From f3e3aab35a06934612568f9234cec96a8e0e71de Mon Sep 17 00:00:00 2001 From: Xamarin Public Jenkins Date: Mon, 22 Feb 2016 11:00:01 -0500 Subject: [PATCH] Imported Upstream version 4.3.2.467 Former-commit-id: 9c2cb47f45fa221e661ab616387c9cda183f283d --- Makefile.am | 25 +- Makefile.in | 31 +- README.md | 8 +- acceptance-tests/Makefile.am.REMOVED.git-id | 1 + acceptance-tests/Makefile.in.REMOVED.git-id | 1 + acceptance-tests/README.md | 14 + acceptance-tests/SUBMODULES.json | 26 + acceptance-tests/versions.mk | 159 + acceptance-tests/versions.py | 52 + code_of_conduct.md | 50 + config.h.in | 57 +- configure.REMOVED.git-id | 2 +- configure.ac.REMOVED.git-id | 2 +- data/Makefile.am | 3 +- data/Makefile.in | 9 +- data/config.in | 2 +- data/gdb/mono-gdb.py | 34 +- data/lldb/monobt.py | 56 + data/mono-nunit.pc.in | 2 +- data/net_2_0/Browsers/Makefile.in | 6 +- data/net_2_0/Makefile.in | 6 +- data/net_4_0/Browsers/Makefile.in | 6 +- data/net_4_0/Makefile.in | 6 +- data/net_4_5/Browsers/Makefile.in | 6 +- data/net_4_5/Makefile.in | 6 +- docs/Makefile.am | 10 +- docs/Makefile.in | 15 +- docs/deploy/mono-api-class.html | 13 +- docs/deploy/mono-api-domains.html | 20 +- docs/deploy/mono-api-gchandle.html | 18 +- docs/deploy/mono-api-image.html | 4 +- docs/deploy/mono-api-metadata.html | 2 +- docs/deploy/mono-api-object.html | 22 +- docs/deploy/mono-api-utils.html | 7 +- docs/deploy/mono-api-wapi.html | 36 +- docs/public-api | 2 + eglib/config.h.in | 12 + eglib/configure.REMOVED.git-id | 2 +- eglib/configure.ac | 4 +- eglib/src/Makefile.am | 7 +- eglib/src/Makefile.in | 982 ++++++ eglib/src/Makefile.in.REMOVED.git-id | 1 - eglib/src/eglib-config.h.in | 2 +- eglib/src/gbytearray.c | 7 + eglib/src/glib.h | 1 + eglib/src/gspawn.c | 15 +- eglib/src/gunicode.c | 6 +- .../v4.5/Accessibility.dll | Bin 0 -> 11264 bytes .../v4.5/Commons.Xml.Relaxng.dll | Bin 0 -> 78336 bytes .../v4.5/CustomMarshalers.dll | Bin 0 -> 12288 bytes .../Facades/System.Collections.Concurrent.dll | Bin 0 -> 6144 bytes .../v4.5/Facades/System.Collections.dll | Bin 0 -> 6144 bytes .../System.ComponentModel.Annotations.dll | Bin 0 -> 5632 bytes .../System.ComponentModel.EventBasedAsync.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.ComponentModel.dll | Bin 0 -> 4608 bytes .../Facades/System.Diagnostics.Contracts.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Diagnostics.Debug.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Diagnostics.Tools.dll | Bin 0 -> 4608 bytes .../Facades/System.Diagnostics.Tracing.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Dynamic.Runtime.dll | Bin 0 -> 6656 bytes .../v4.5/Facades/System.Globalization.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.IO.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Linq.Expressions.dll | Bin 0 -> 7168 bytes .../v4.5/Facades/System.Linq.Parallel.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Linq.Queryable.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Linq.dll | Bin 0 -> 5632 bytes .../Facades/System.Net.NetworkInformation.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Net.Primitives.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Net.Requests.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.ObjectModel.dll | Bin 0 -> 5120 bytes .../System.Reflection.Emit.ILGeneration.dll | Bin 0 -> 4608 bytes .../System.Reflection.Emit.Lightweight.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Reflection.Emit.dll | Bin 0 -> 4608 bytes .../Facades/System.Reflection.Extensions.dll | Bin 0 -> 4608 bytes .../Facades/System.Reflection.Primitives.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Reflection.dll | Bin 0 -> 5632 bytes .../System.Resources.ResourceManager.dll | Bin 0 -> 4608 bytes .../Facades/System.Runtime.Extensions.dll | Bin 0 -> 5120 bytes ...Runtime.InteropServices.WindowsRuntime.dll | Bin 0 -> 5120 bytes .../System.Runtime.InteropServices.dll | Bin 0 -> 6144 bytes .../v4.5/Facades/System.Runtime.Numerics.dll | Bin 0 -> 4608 bytes .../System.Runtime.Serialization.Json.dll | Bin 0 -> 4608 bytes ...ystem.Runtime.Serialization.Primitives.dll | Bin 0 -> 5120 bytes .../System.Runtime.Serialization.Xml.dll | Bin 0 -> 5632 bytes .../v4.5/Facades/System.Runtime.dll | Bin 0 -> 12800 bytes .../Facades/System.Security.Principal.dll | Bin 0 -> 4608 bytes .../Facades/System.ServiceModel.Duplex.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.ServiceModel.Http.dll | Bin 0 -> 5120 bytes .../Facades/System.ServiceModel.NetTcp.dll | Bin 0 -> 5120 bytes .../System.ServiceModel.Primitives.dll | Bin 0 -> 10240 bytes .../Facades/System.ServiceModel.Security.dll | Bin 0 -> 5120 bytes .../System.Text.Encoding.Extensions.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Text.Encoding.dll | Bin 0 -> 4608 bytes .../System.Text.RegularExpressions.dll | Bin 0 -> 4608 bytes .../System.Threading.Tasks.Parallel.dll | Bin 0 -> 5120 bytes .../v4.5/Facades/System.Threading.Tasks.dll | Bin 0 -> 6656 bytes .../v4.5/Facades/System.Threading.Timer.dll | Bin 0 -> 4608 bytes .../v4.5/Facades/System.Threading.dll | Bin 0 -> 5632 bytes .../v4.5/Facades/System.Xml.ReaderWriter.dll | Bin 0 -> 6144 bytes .../v4.5/Facades/System.Xml.XDocument.dll | Bin 0 -> 6144 bytes .../v4.5/Facades/System.Xml.XmlSerializer.dll | Bin 0 -> 5632 bytes .../v4.5/I18N.CJK.dll | Bin 0 -> 18432 bytes .../v4.5/I18N.MidEast.dll | Bin 0 -> 10752 bytes .../v4.5/I18N.Other.dll | Bin 0 -> 12800 bytes .../v4.5/I18N.Rare.dll | Bin 0 -> 17408 bytes .../v4.5/I18N.West.dll | Bin 0 -> 12800 bytes .../binary-reference-assemblies/v4.5/I18N.dll | Bin 0 -> 15360 bytes .../v4.5/IBM.Data.DB2.dll | Bin 0 -> 35328 bytes .../v4.5/ICSharpCode.SharpZipLib.dll | Bin 0 -> 43520 bytes .../v4.5/Microsoft.Build.Engine.dll | Bin 0 -> 74240 bytes .../v4.5/Microsoft.Build.Framework.dll | Bin 0 -> 28672 bytes .../v4.5/Microsoft.Build.Tasks.v4.0.dll | Bin 0 -> 98816 bytes .../v4.5/Microsoft.Build.Utilities.v4.0.dll | Bin 0 -> 30208 bytes .../v4.5/Microsoft.Build.dll.REMOVED.git-id | 1 + .../v4.5/Microsoft.CSharp.dll | Bin 0 -> 18432 bytes .../v4.5/Microsoft.VisualC.dll | Bin 0 -> 9728 bytes .../v4.5/Microsoft.Web.Infrastructure.dll | Bin 0 -> 13312 bytes .../v4.5/Mono.C5.dll | Bin 0 -> 94208 bytes .../v4.5/Mono.CSharp.dll.REMOVED.git-id | 1 + .../v4.5/Mono.Cairo.dll | Bin 0 -> 47104 bytes .../v4.5/Mono.Cecil.Mdb.dll | Bin 0 -> 19456 bytes .../v4.5/Mono.Cecil.dll.REMOVED.git-id | 1 + .../Mono.CodeContracts.dll.REMOVED.git-id | 1 + .../Mono.CompilerServices.SymbolWriter.dll | Bin 0 -> 24064 bytes .../v4.5/Mono.Data.Sqlite.dll | Bin 0 -> 55808 bytes .../v4.5/Mono.Data.Tds.dll | Bin 0 -> 39936 bytes .../v4.5/Mono.Debugger.Soft.dll | Bin 0 -> 74752 bytes .../v4.5/Mono.Http.dll | Bin 0 -> 15360 bytes .../v4.5/Mono.Management.dll | Bin 0 -> 9728 bytes .../v4.5/Mono.Messaging.RabbitMQ.dll | Bin 0 -> 20480 bytes .../v4.5/Mono.Messaging.dll | Bin 0 -> 27648 bytes .../v4.5/Mono.Options.dll | Bin 0 -> 18432 bytes .../v4.5/Mono.Parallel.dll | Bin 0 -> 16384 bytes .../v4.5/Mono.Posix.dll.REMOVED.git-id | 1 + .../v4.5/Mono.Security.Win32.dll | Bin 0 -> 13312 bytes .../v4.5/Mono.Security.dll.REMOVED.git-id | 1 + .../v4.5/Mono.Simd.dll | Bin 0 -> 38912 bytes .../v4.5/Mono.Tasklets.dll | Bin 0 -> 9728 bytes .../v4.5/Mono.WebBrowser.dll.REMOVED.git-id | 1 + .../v4.5/Mono.XBuild.Tasks.dll | Bin 0 -> 16384 bytes .../Novell.Directory.Ldap.dll.REMOVED.git-id | 1 + .../v4.5/PEAPI.dll | Bin 0 -> 57344 bytes .../v4.5/RabbitMQ.Client.dll.REMOVED.git-id | 1 + .../v4.5/SMDiagnostics.dll | Bin 0 -> 30208 bytes ...ponentModel.Composition.dll.REMOVED.git-id | 1 + .../System.ComponentModel.DataAnnotations.dll | Bin 0 -> 41984 bytes .../v4.5/System.Configuration.Install.dll | Bin 0 -> 18944 bytes .../v4.5/System.Configuration.dll | Bin 0 -> 67584 bytes .../v4.5/System.Core.dll.REMOVED.git-id | 1 + .../v4.5/System.Data.DataSetExtensions.dll | Bin 0 -> 19456 bytes .../System.Data.Entity.dll.REMOVED.git-id | 1 + .../v4.5/System.Data.Linq.dll.REMOVED.git-id | 1 + .../v4.5/System.Data.OracleClient.dll | Bin 0 -> 74752 bytes ...em.Data.Services.Client.dll.REMOVED.git-id | 1 + .../v4.5/System.Data.Services.dll | Bin 0 -> 50176 bytes .../v4.5/System.Data.dll.REMOVED.git-id | 1 + .../v4.5/System.Design.dll.REMOVED.git-id | 1 + .../System.DirectoryServices.Protocols.dll | Bin 0 -> 53760 bytes .../v4.5/System.DirectoryServices.dll | Bin 0 -> 74752 bytes .../v4.5/System.Drawing.Design.dll | Bin 0 -> 19456 bytes .../v4.5/System.Drawing.dll.REMOVED.git-id | 1 + .../v4.5/System.Dynamic.dll | Bin 0 -> 41984 bytes .../v4.5/System.EnterpriseServices.dll | Bin 0 -> 42496 bytes .../v4.5/System.IO.Compression.FileSystem.dll | Bin 0 -> 11264 bytes .../v4.5/System.IO.Compression.dll | Bin 0 -> 52736 bytes .../v4.5/System.IdentityModel.Selectors.dll | Bin 0 -> 13312 bytes .../v4.5/System.IdentityModel.dll | Bin 0 -> 82432 bytes .../v4.5/System.Json.Microsoft.dll | Bin 0 -> 26624 bytes .../v4.5/System.Json.dll | Bin 0 -> 15872 bytes .../v4.5/System.Management.dll | Bin 0 -> 43008 bytes .../v4.5/System.Messaging.dll | Bin 0 -> 53760 bytes ...tem.Net.Http.Formatting.dll.REMOVED.git-id | 1 + .../v4.5/System.Net.Http.WebRequest.dll | Bin 0 -> 12288 bytes .../v4.5/System.Net.Http.dll | Bin 0 -> 48640 bytes .../v4.5/System.Net.dll | Bin 0 -> 11776 bytes .../v4.5/System.Numerics.dll | Bin 0 -> 23552 bytes .../v4.5/System.Reactive.Core.dll | Bin 0 -> 42496 bytes .../v4.5/System.Reactive.Debugger.dll | Bin 0 -> 3584 bytes .../v4.5/System.Reactive.Experimental.dll | Bin 0 -> 10752 bytes .../v4.5/System.Reactive.Interfaces.dll | Bin 0 -> 6144 bytes .../System.Reactive.Linq.dll.REMOVED.git-id | 1 + .../System.Reactive.Observable.Aliases.dll | Bin 0 -> 7168 bytes .../v4.5/System.Reactive.PlatformServices.dll | Bin 0 -> 8704 bytes .../v4.5/System.Reactive.Providers.dll | Bin 0 -> 69632 bytes .../v4.5/System.Reactive.Runtime.Remoting.dll | Bin 0 -> 5120 bytes .../v4.5/System.Reactive.Windows.Forms.dll | Bin 0 -> 4096 bytes .../System.Reactive.Windows.Threading.dll | Bin 0 -> 6144 bytes .../v4.5/System.Runtime.Caching.dll | Bin 0 -> 40448 bytes .../v4.5/System.Runtime.DurableInstancing.dll | Bin 0 -> 64512 bytes .../v4.5/System.Runtime.Remoting.dll | Bin 0 -> 51200 bytes ....Runtime.Serialization.Formatters.Soap.dll | Bin 0 -> 17920 bytes ...m.Runtime.Serialization.dll.REMOVED.git-id | 1 + .../v4.5/System.Security.dll | Bin 0 -> 58368 bytes .../v4.5/System.ServiceModel.Activation.dll | Bin 0 -> 11776 bytes .../v4.5/System.ServiceModel.Discovery.dll | Bin 0 -> 82944 bytes ....ServiceModel.Internals.dll.REMOVED.git-id | 1 + .../v4.5/System.ServiceModel.Routing.dll | Bin 0 -> 26624 bytes .../v4.5/System.ServiceModel.Web.dll | Bin 0 -> 48640 bytes .../System.ServiceModel.dll.REMOVED.git-id | 1 + .../v4.5/System.ServiceProcess.dll | Bin 0 -> 33792 bytes .../v4.5/System.Threading.Tasks.Dataflow.dll | Bin 0 -> 41984 bytes .../v4.5/System.Transactions.dll | Bin 0 -> 23040 bytes .../v4.5/System.Web.Abstractions.dll | Bin 0 -> 11264 bytes .../v4.5/System.Web.ApplicationServices.dll | Bin 0 -> 21504 bytes .../v4.5/System.Web.DynamicData.dll | Bin 0 -> 45056 bytes .../v4.5/System.Web.Extensions.Design.dll | Bin 0 -> 13312 bytes .../System.Web.Extensions.dll.REMOVED.git-id | 1 + .../v4.5/System.Web.Http.SelfHost.dll | Bin 0 -> 40448 bytes .../v4.5/System.Web.Http.WebHost.dll | Bin 0 -> 22016 bytes .../v4.5/System.Web.Http.dll.REMOVED.git-id | 1 + .../v4.5/System.Web.Mvc.dll.REMOVED.git-id | 1 + .../v4.5/System.Web.Razor.dll.REMOVED.git-id | 1 + .../v4.5/System.Web.Routing.dll | Bin 0 -> 11264 bytes .../System.Web.Services.dll.REMOVED.git-id | 1 + .../v4.5/System.Web.WebPages.Deployment.dll | Bin 0 -> 17920 bytes .../v4.5/System.Web.WebPages.Razor.dll | Bin 0 -> 22016 bytes .../v4.5/System.Web.WebPages.dll | Bin 0 -> 87552 bytes .../v4.5/System.Web.dll.REMOVED.git-id | 1 + ...Forms.DataVisualization.dll.REMOVED.git-id | 1 + .../System.Windows.Forms.dll.REMOVED.git-id | 1 + .../v4.5/System.Windows.dll | Bin 0 -> 10240 bytes .../v4.5/System.Xaml.dll | Bin 0 -> 82944 bytes .../v4.5/System.Xml.Linq.dll | Bin 0 -> 48128 bytes .../v4.5/System.Xml.Serialization.dll | Bin 0 -> 9728 bytes .../v4.5/System.Xml.dll.REMOVED.git-id | 1 + .../v4.5/System.dll.REMOVED.git-id | 1 + .../v4.5/SystemWebTestShim.dll | Bin 0 -> 10752 bytes .../v4.5/WebMatrix.Data.dll | Bin 0 -> 12800 bytes .../v4.5/WindowsBase.dll.REMOVED.git-id | 1 + .../v4.5/cscompmgd.dll | Bin 0 -> 11776 bytes .../v4.5/monodoc.dll.REMOVED.git-id | 1 + .../v4.5/mscorlib.dll.REMOVED.git-id | 1 + external/ikdasm/Program.cs | 22 +- external/ikdasm/TableDumper.cs | 142 + external/referencesource/README.md | 4 +- .../Diagnostics/EventLogCategory.cs | 6 +- .../Diagnostics/EventLogEventId.cs | 4 +- .../ServiceModel/Diagnostics/NativeMethods.cs | 2 +- .../Diagnostics/TraceSourceKind.cs | 2 +- .../AssemblyInfo.cs | 2 +- .../SR.Designer.cs | 0 .../ArgumentIdentifierTrimConverter.cs | 0 .../Core/Presentation/AssignDesigner.xaml.cs | 0 .../CancellationScopeDesigner.xaml.cs | 0 .../Core/Presentation/CaseDesigner.xaml.cs | 0 .../Presentation/CaseKeyBox.ViewInterface.cs | 0 .../Core/Presentation/CaseKeyBox.ViewModel.cs | 0 .../Core/Presentation/CaseKeyBox.xaml.cs | 0 .../CaseKeyBoxIsEnabledConverter.cs | 0 .../CaseLabelVisibilityConverter.cs | 0 .../Core/Presentation/CatchDesigner.xaml.cs | 0 .../Core/Presentation/ComboBoxHelper.cs | 0 .../CompensableActivityDesigner.xaml.cs | 0 .../Core/Presentation/ConnectionPointType.cs | 0 .../DelegateArgumentsValueEditor.cs | 0 .../Core/Presentation/DesignerMetadata.cs | 0 .../Core/Presentation/DisplayNameConverter.cs | 0 .../Core/Presentation/DoWhileDesigner.xaml.cs | 0 .../DynamicActivityPropertyChooser.xaml.cs | 0 ...DynamicActivityPropertyChooserViewModel.cs | 0 ...namicActivityPropertyToTooltipConverter.cs | 0 ...ableItemShowExpandedMultiValueConverter.cs | 0 .../Presentation/ExpandableItemWrapper.cs | 0 .../ExpressionToExpressionTextConverter.cs | 0 .../GenericForEachWithBodyFactory.cs | 0 .../GenericParallelForEachWithBodyFactory.cs | 0 .../Factories/PickWithTwoBranchesFactory.cs | 0 .../StateMachineWithInitialStateFactory.cs | 0 .../Activities/Core/Presentation/FakeRoot.cs | 0 .../Core/Presentation/FinalState.cs | 2 +- .../Presentation/FlowDecisionDesigner.xaml.cs | 0 .../Presentation/FlowDecisionLabelFeature.cs | 0 .../FlowSwitchCaseEditorDialog.cs | 0 .../FlowSwitchDefaultLinkFeature.cs | 0 .../Presentation/FlowSwitchDesigner.xaml.cs | 0 .../Presentation/FlowSwitchLabelFeature.cs | 0 .../Core/Presentation/FlowSwitchLink.cs | 0 .../FlowSwitchLinkCasePropertyEditor.cs | 0 .../FlowSwitchLinkMultiValueConverter.cs | 0 .../FlowchartConnectionPointsAdorner.cs | 0 .../FlowchartDesigner.Container.cs | 0 .../Presentation/FlowchartDesigner.Helpers.cs | 0 .../FlowchartDesigner.ModelChangeReactions.cs | 0 .../FlowchartDesigner.ModelChanges.cs | 0 .../FlowchartDesigner.xaml.cs.REMOVED.git-id | 0 .../Presentation/FlowchartDesignerCommands.cs | 0 .../FlowchartExpressionAdorner.cs | 0 .../FlowchartExpressionAutomationPeer.cs | 0 .../Presentation/FlowchartFreeFormPanel.cs | 0 .../Core/Presentation/FlowchartResizeGrip.cs | 0 .../Core/Presentation/FlowchartSizeFeature.cs | 0 .../Core/Presentation/ForEachDesigner.xaml.cs | 0 .../Presentation/FreeFormPanelUtilities.cs | 0 .../Presentation/GenericFlowSwitchHelper.cs | 0 .../GenericTypeArgumentConverter.cs | 0 .../Core/Presentation/HintTextConverter.cs | 0 .../Presentation/HintTextMaxWidthConverter.cs | 0 .../Core/Presentation/IFlowSwitch.cs | 0 .../Core/Presentation/IfElseDesigner.xaml.cs | 0 .../Core/Presentation/InteropDesigner.xaml.cs | 0 .../InvokeDelegateDesigner.xaml.cs | 0 .../InvokeDelegateValidationFeature.cs | 0 .../Presentation/InvokeMethodDesigner.xaml.cs | 0 .../IsLastSelectedItemConverter.cs | 0 .../IsStateRootDesignerConverter.cs | 0 .../Presentation/LocationChangedEventArgs.cs | 0 .../Core/Presentation/MaxValueConverter.cs | 0 .../Core/Presentation/MorphHelpers.cs | 0 .../NoPersistScopeDesigner.xaml.cs | 0 .../Core/Presentation/NotConverter.cs | 0 .../Presentation/ParallelDesigner.xaml.cs | 0 .../Presentation/ParallelSeparator.xaml.cs | 0 .../Presentation/PickBranchDesigner.xaml.cs | 0 .../Core/Presentation/PickDesigner.xaml.cs | 0 .../PickValidationErrorSourceLocator.cs | 0 ...PickValidationErrorSourceLocatorFeature.cs | 0 .../Core/Presentation/PropertyNames.cs | 0 .../RegisterMetadataDelayedWorker.cs | 0 .../ReorderableListEditor.xaml.cs | 0 .../SelectedPropertyNameChangedEventArgs.cs | 0 .../Presentation/SequenceDesigner.xaml.cs | 0 .../Activities/Core/Presentation/StartNode.cs | 0 .../Core/Presentation/StartSymbol.xaml.cs | 0 .../StateConnectionPointToolTip.xaml.cs | 0 .../StateContainerEditor.CompositeView.cs | 0 ...ateContainerEditor.ModelChangeReactions.cs | 0 .../StateContainerEditor.ModelChanges.cs | 0 .../StateContainerEditor.Utilities.cs | 0 ...tateContainerEditor.xaml.cs.REMOVED.git-id | 0 .../Presentation/StateContainerResizeGrip.cs | 0 .../Core/Presentation/StateDesigner.xaml.cs | 0 .../StateLinkButtonToolTipConverter.cs | 0 .../StateMachineConnetionPointsAdorner.cs | 0 .../Presentation/StateMachineDesigner.xaml.cs | 0 .../Presentation/StateMachineFreeFormPanel.cs | 0 ...tateMachineValidationErrorSourceLocator.cs | 0 ...hineValidationErrorSourceLocatorFeature.cs | 0 .../Core/Presentation/SwitchDesigner.xaml.cs | 0 .../SwitchTryCatchDesignerHelper.cs | 0 .../Themes/DesignerStyleDictionary.xaml.cs | 0 .../EditorCategoryTemplateDictionary.xaml.cs | 0 .../Themes/StringResourceDictionary.xaml.cs | 0 .../TransactionScopeDesigner.xaml.cs | 0 .../Presentation/TransitionDesigner.xaml.cs | 0 .../Presentation/TransitionReorderChange.cs | 0 .../Presentation/TryCatchDesigner.xaml.cs | 0 .../Presentation/VerticalConnector.xaml.cs | 0 .../Core/Presentation/WhileDesigner.xaml.cs | 0 .../Presentation/WriteLineDesigner.xaml.cs | 0 .../Presentation/ActivityDesignerHelper.cs | 0 .../ActivityXRefPropertyEditor.cs | 0 .../ArgumentCollectionPropertyEditor.cs | 0 .../DynamicArgumentDesigner.xaml.cs | 0 .../DynamicArgumentDesignerOptions.cs | 0 .../Presentation/DynamicArgumentDialog.cs | 0 .../TypeCollectionDesigner.xaml.cs | 0 .../TypeCollectionPropertyEditor.cs | 0 .../Presentation/ActivityXRefConverter.cs | 0 .../Presentation/BindingEditor.xaml.cs | 0 .../BindingPropertyValueEditor.cs | 0 .../ContentButtonTitleConverter.cs | 0 .../ContentCorrelationTypeExpander.xaml.cs | 0 .../Presentation/ContentDialogViewModel.cs | 0 ...MessageContentSearchableStringConverter.cs | 0 ...ametersContentSearchableStringConverter.cs | 0 ...MessageContentSearchableStringConverter.cs | 0 ...ametersContentSearchableStringConverter.cs | 0 ...thMessageQuerySearchableStringConverter.cs | 0 .../Presentation/CorrelatesOnValueEditor.cs | 0 .../CorrelationDataDesigner.xaml.cs | 0 .../CorrelationInitializerDesigner.xaml.cs | 0 .../CorrelationInitializerValueEditor.cs | 0 .../CorrelationScopeDesigner.xaml.cs | 0 .../Presentation/EndpointDesigner.cs | 0 .../Factories/ReceiveAndSendReplyFactory.cs | 0 .../Factories/SendAndReceiveReplyFactory.cs | 0 .../InitializeCorrelationDesigner.xaml.cs | 0 .../Presentation/MessageQueryEditor.xaml.cs | 0 .../MessageQuerySetDesigner.xaml.cs | 0 ...gingContentPropertyEditorResources.xaml.cs | 0 .../Presentation/ReceiveContentDialog.xaml.cs | 0 .../ReceiveContentPropertyEditor.cs | 0 .../Presentation/ReceiveDesigner.xaml.cs | 0 .../Presentation/ReceiveReplyDesigner.xaml.cs | 0 .../ReceiveReplyValidationFeature.cs | 0 .../Presentation/SendContentDialog.xaml.cs | 0 .../Presentation/SendContentPropertyEditor.cs | 0 .../Presentation/SendDesigner.xaml.cs | 0 .../Presentation/SendReplyDesigner.xaml.cs | 0 .../SendReplyValidationFeature.cs | 0 .../Presentation/ServiceContractImporter.cs | 0 .../TransactedReceiveScope.xaml.cs | 0 .../Presentation/TypeToTreeConverter.cs | 0 .../Presentation/ServiceDesigner.xaml.cs | 0 .../AssemblyInfo.cs | 2 +- .../InstanceCompletionAction.cs | 2 +- .../InstanceEncodingOption.cs | 2 +- .../Activities/DurableInstancing/LoadType.cs | 2 +- .../DurableInstancing/PrimitiveType.cs | 2 +- .../SqlCommandAsyncResult.cs | 2 + .../SuspensionStateChange.cs | 2 +- .../Presentation/Xaml/XamlTypeKind.cs | 2 +- .../Annotations/AdornerLocation.cs | 2 +- .../Annotations/IDockedAnnotation.cs | 2 +- .../CategoryContainerCommands.cs | 40 + .../ExtensibilityMetadataHelper.cs | 113 + .../PropertyContainerPopupHelper.cs | 74 + .../Core/PropertyEditing/PropertyMarker.cs | 2 +- .../FreeFormEditing/AutoConnectDirections.cs | 2 +- .../FreeFormEditing/AutoSplitAlignment.cs | 2 +- .../INestedFreeFormPanelContainer.cs | 2 +- .../RequiredSizeChangedEventHandler.cs | 2 +- .../Toolbox/IActivityTemplateFactory.cs | 2 +- .../Validation/ValidationReason.cs | 2 +- .../Validation/ValidationState.cs | 2 +- .../Presentation/View/IVersionEditor.cs | 2 +- .../Presentation/View/ViewStateService.cs | 2 +- .../System/Activities/ActivityInstance.cs | 2 +- .../Activities/ActivityInstanceState.cs | 24 + .../System/Activities/AssemblyInfo.cs | 2 +- ...ICharacterSpottingTextReaderForUnitTest.cs | 2 +- .../Activities/Debugger/StateManager.cs | 24 +- .../ILocationReferenceExpression.cs | 2 +- .../Hosting/IWorkflowInstanceExtension.cs | 2 +- .../ActivityExecutor.cs.REMOVED.git-id | 2 +- .../Activities/Tracking/ActivityStates.cs | 2 +- .../Tracking/ImplementationVisibility.cs | 2 +- .../AppContextDefaultValues.Default.cs | 35 + .../DataAnnotations/AppSettings.cs | 52 + .../DataAnnotations/CreditCardAttribute.cs | 5 +- .../DataAnnotations/EmailAddressAttribute.cs | 53 +- .../FileExtensionsAttribute.cs | 5 +- .../DataAnnotations/IValidatableObject.cs | 2 +- .../LocalAppContextSwitches.cs | 28 + .../DataAnnotations/PhoneAttribute.cs | 117 +- .../RegularExpressionAttribute.cs | 30 +- .../Schema/ComplexTypeAttribute.cs | 2 +- .../Schema/DatabaseGeneratedOption.cs | 2 +- .../Schema/NotMappedAttribute.cs | 2 +- .../DataAnnotations/UrlAttribute.cs | 46 +- .../DataAnnotations/ValidationAttribute.cs | 106 +- .../Clr/inc/AppContextDefaultValues.cs | 169 + .../InternalApis/Clr/inc/LocalAppContext.cs | 128 + .../Properties/AssemblyInfo.cs | 2 +- .../System.ComponentModel.DataAnnotations.txt | 3 + .../DateTimeConfigurationCollection.cs | 2 +- .../DateTimeConfigurationElement.cs | 2 +- .../Configuration/FipsAwareEncryptedXml.cs | 75 + .../RSAProtectedConfigurationProvider.cs | 65 +- .../System/Configuration/TypeUtil.cs | 13 + .../BaselineExcludes.lst.cs.REMOVED.git-id | 2 +- .../Scripting/Ast/DynamicExpression.cs | 13 +- .../Scripting/Ast/IArgumentProvider.cs | 2 +- .../Scripting/Ast/IDynamicExpression.cs | 49 + .../System.Core/Microsoft/Scripting/Stubs.cs | 2 +- .../Win32/SafeHandles/BCryptSafeHandles.cs | 18 + .../Win32/SafeHandles/CapiSafeHandles.cs | 91 + .../Microsoft/Win32/UnsafeNativeMethods.cs | 27 +- .../System.Core.CLR.lst.cs.REMOVED.git-id | 2 +- .../System.Core.dll.Triaged.lst.cs | 190 +- .../System/Collections/Generic/HashSet.cs | 12 +- .../Diagnostics/Eventing/Reader/Winmeta.cs | 4 +- .../System.Core/System/FuncAndAction.cs | 2 +- .../System.Core/System/IO/Enums.cs | 2 + .../IO/MemoryMappedFiles/MemoryMappedFile.cs | 18 + .../IO/MemoryMappedFiles/MemoryMappedView.cs | 32 +- .../System/IO/Pipes/IOCancellationHelper.cs | 99 + .../System.Core/System/IO/Pipes/Pipe.cs | 164 +- .../System.Core/System/IO/__Error.cs | 3 + .../System/Linq/Enumerable.cs.REMOVED.git-id | 2 +- .../System.Core/System/Linq/IQueryable.cs | 370 +- .../Enumerables/IParallelPartitionable.cs | 4 +- .../Enumerables/QueryAggregationOptions.cs | 4 +- .../Linq/Parallel/Merging/IMergeHelper.cs | 4 +- .../IPartitionedStreamRecipient.cs | 4 +- .../QueryOperators/OrdinalIndexState.cs | 4 +- .../System/Linq/ParallelExecutionMode.cs | 2 +- .../System/Linq/ParallelMergeOptions.cs | 4 +- .../InteropServices/ComAwareEventInfo.cs | 10 + .../System/Security/Cryptography/Aes.cs | 2 +- .../Cryptography/AesCryptoServiceProvider.cs | 23 +- .../Security/Cryptography/BCryptNative.cs | 130 +- .../Security/Cryptography/CapiNative.cs | 392 ++- .../Cryptography/CapiSymmetricAlgorithm.cs | 3 + .../Security/Cryptography/CngAlgorithm.cs | 13 +- .../System/Security/Cryptography/CngKey.cs | 17 +- .../Security/Cryptography/ECDiffieHellman.cs | 4 + .../System/Security/Cryptography/ECDsa.cs | 95 + .../System/Security/Cryptography/ECDsaCng.cs | 32 + .../Security/Cryptography/ECKeyXmlFormat.cs | 2 +- .../Security/Cryptography/NCryptNative.cs | 470 ++- .../System/Security/Cryptography/RsaCng.cs | 508 +++ .../SignatureVerificationResult.cs | 4 +- .../ECDsaCertificateExtensions.cs | 129 + .../RSACertificateExtensions.cs | 106 + .../X509Certificates/X509Native.cs | 296 +- .../System/Security/ManifestKinds.cs | 2 +- .../LockRecursionException.cs | 2 +- .../System/Data/ShippingAssemblyAttribute.cs | 6 +- .../Data/Entity/Design/DesignXmlConstants.cs | 4 +- .../Design/EntityStoreSchemaFilterEffect.cs | 4 +- .../EntityStoreSchemaFilterObjectTypes.cs | 4 +- ...oreSchemaGenerator.EntityCreationStatus.cs | 4 +- .../ICustomPluralizationMapping.cs | 4 +- .../SSDLGenerator/ModelBuilderErrorCodes.cs | 4 +- .../Data/EntityModel/Emitters/FixUpType.cs | 4 +- .../Emitters/PrivateMemberPrefixId.cs | 4 +- .../System/Data/EntityModel/LanguageOption.cs | 4 +- .../EntityModel/TerminalErrorException.cs | 4 +- .../Data/Common/ShippingAssemblyAttributes.cs | 4 +- .../EntityModel/SchemaObjectModel/Action.cs | 4 +- .../SchemaObjectModel/CollectionKind.cs | 6 +- .../SchemaObjectModel/ConcurrencyMode.cs | 6 +- .../SchemaObjectModel/ErrorCode.cs | 4 +- .../SchemaObjectModel/IRelationship.cs | 4 +- .../SchemaObjectModel/IRelationshipEnd.cs | 4 +- .../ISchemaElementLookUpTable.cs | 6 +- .../SchemaObjectModel/Operation.cs | 4 +- .../SchemaDataModelOption.cs | 4 +- .../StoreGeneratedPattern.cs | 6 +- .../SchemaObjectModel/TypeModifier.cs | 4 +- .../System/Data/EntityState.cs | 4 +- .../System/Data/IEntityAdapter.cs | 2 +- .../System/Data/IEntityStateEntry.cs | 4 +- .../System/Data/IEntityStateManager.cs | 4 +- .../System/Data/IExtendedDataRecord.cs | 6 +- .../Data/Mapping/ObjectMslConstructs.cs | 4 +- .../Data/Mapping/StorageMappingErrorCode.cs | 4 +- .../Data/Mapping/StorageMslConstructs.cs | 4 +- .../Update/Internal/PropagatorFlags.cs | 6 +- .../Structures/CellTreeOpType.cs | 4 +- .../ViewGeneration/Utils/ViewGenErrorCode.cs | 4 +- .../Validation/ConstraintBase.cs | 4 +- .../System/Data/Metadata/DataSpace.cs | 4 +- .../System/Data/Metadata/Edm/AttributeKind.cs | 4 +- .../System/Data/Metadata/Edm/BuiltInKind.cs | 4 +- .../Data/Metadata/Edm/OperationAction.cs | 4 +- .../System/Data/Metadata/Edm/ParameterMode.cs | 6 +- .../Data/Metadata/Edm/PrimitiveTypeKind.cs | 4 +- .../Metadata/Edm/RelationshipMultiplicity.cs | 4 +- .../Data/Metadata/EdmSchemaErrorSeverity.cs | 6 +- .../MetadataArtifactAssemblyResolver.cs | 4 +- .../Data/Metadata/ParameterTypeSemantics.cs | 6 +- .../System/Data/Metadata/XmlConstants.cs | 6 +- .../DataClasses/IEntityChangeTracker.cs | 4 +- .../DataClasses/IEntityWithChangeTracker.cs | 6 +- .../Objects/DataClasses/IEntityWithKey.cs | 4 +- .../DataClasses/IEntityWithRelationships.cs | 4 +- .../Data/Objects/DataClasses/IRelatedEnd.cs | 4 +- .../Objects/DataClasses/IRelationshipFixer.cs | 4 +- .../Objects/DataClasses/RelationshipKind.cs | 4 +- .../System/Data/Objects/IObjectSet.cs | 4 +- .../System/Data/Objects/IObjectView.cs | 4 +- .../System/Data/Objects/IObjectViewData.cs | 4 +- .../Data/Objects/Internal/IEntityWrapper.cs | 6 +- .../System/Data/Objects/MergeOption.cs | 4 +- .../System/Data/Objects/RefreshMode.cs | 4 +- .../System/Data/Objects/SaveOptions.cs | 4 +- .../Query/InternalTrees/BasicValidator.cs | 6 +- .../Data/Query/PlanCompiler/Validator.cs | 4 +- .../Data/Spatial/DbSpatialDataReader.cs | 4 +- .../Data/SqlClient/SqlGen/ISqlFragment.cs | 4 +- .../System.Data.Linq/FunctionResults.cs | 6 +- .../SqlClient/Reader/ObjectReader.cs | 2 +- .../System.Data.Linq/misc/SecurityUtils.cs | 10 + .../System/Xml/Xsl/Assembly.cs | 2 +- .../System/Xml/Xsl/ISourceLineInfo.cs | 2 +- .../System/Xml/Xsl/IlGen/XmlILOptimization.cs | 2 +- .../System/Xml/Xsl/IlGen/XmlIlTrace.cs | 2 +- .../System/Xml/Xsl/QIL/QilNodeType.cs | 2 +- .../System/Xml/Xsl/QIL/SerializationHints.cs | 4 +- .../System/Xml/Xsl/XPath/IXPathEnvironment.cs | 2 +- .../System/Xml/Xsl/XPath/IXpathBuilder.cs | 2 +- .../System/Xml/Xsl/XPath/XPathAxis.cs | 2 +- .../System/Xml/Xsl/XPath/XPathContext.cs | 4 +- .../System/Xml/Xsl/XPath/XPathOperator.cs | 2 +- .../System/Xml/Xsl/XmlNodeKindFlags.cs | 4 +- .../System/Xml/Xsl/Xslt/IErrorHelper.cs | 2 +- .../System/Xml/Xsl/Xslt/XslFlags.cs | 2 +- .../System/Xml/Xsl/XsltOld/ActionFrame.cs | 1 - .../Xml/Xsl/XsltOld/InputScopeManager.cs | 1 - .../Xml/Xsl/XsltOld/OutputScopeManager.cs | 1 - .../System/Xml/Xsl/XsltOld/Processor.cs | 2 - .../System/Xml/Xsl/XsltOld/ReaderOutput.cs | 10 - .../System/Xml/Xsl/XsltOld/RecordOutput.cs | 2 +- .../Xml/Xsl/XsltOld/XsltCompileContext.cs | 1 - .../System/Xml/Xsl/XsltOld/XsltDebugger.cs | 2 +- .../Baseline.cs.REMOVED.git-id | 2 +- .../FxCopSuppressions/EverettBreaking.cs | 6 +- .../FxCop40Suppressions.cs.REMOVED.git-id | 2 +- .../Triaged.cs.REMOVED.git-id | 2 +- .../SqlServer/Server/ExtendedClrTypeCode.cs | 4 +- .../SqlServer/Server/ITypedGetters.cs | 4 +- .../SqlServer/Server/ITypedGettersV3.cs | 4 +- .../SqlServer/Server/ITypedSetters.cs | 4 +- .../SqlServer/Server/ITypedSettersV3.cs | 4 +- .../SqlServer/Server/SmiExecuteType.cs | 4 +- .../Microsoft/SqlServer/Server/SmiLink.cs | 4 +- .../Microsoft/SqlServer/Server/SmiMetaData.cs | 2 + .../Microsoft/SqlServer/Server/SmiStream.cs | 4 +- .../SqlServer/Server/SmiXetterTypeCode.cs | 4 +- .../System/Data/AcceptRejectRule.cs | 6 +- .../System.Data/System/Data/AggregateType.cs | 6 +- .../System/Data/CatalogLocation.cs | 4 +- .../System/Data/CommandBehavior.cs | 6 +- .../System.Data/System/Data/CommandType.cs | 4 +- .../System/Data/Common/AdapterSwitches.cs | 4 +- .../Data/Common/AdapterUtil.cs.REMOVED.git-id | 2 +- .../System/Data/Common/DbConnectionOptions.cs | 3 + .../Data/Common/DbConnectionStringBuilder.cs | 6 +- .../Data/Common/DbConnectionStringCommon.cs | 485 ++- .../System/Data/Common/Groupbybehavior.cs | 4 +- .../System/Data/Common/NativeMethods.cs | 6 +- .../System/Data/Common/SqlEventSource.cs | 76 + .../Data/Common/SupportedJoinOperators.cs | 4 +- .../System/Data/Common/dbenumerator.cs | 27 +- .../System/Data/Common/identifiercase.cs | 4 +- .../System/Data/ConflictOptions.cs | 4 +- .../System/Data/ConnectionState.cs | 4 +- .../Data/DataColumnChangeEventHandler.cs | 6 +- .../System.Data/System/Data/DataRowAction.cs | 6 +- .../System/Data/DataRowChangeEventHandler.cs | 6 +- .../System/Data/DataRowCreatedEventHandler.cs | 6 +- .../System.Data/System/Data/DataRowState.cs | 6 +- .../System.Data/System/Data/DataRowVersion.cs | 6 +- .../System/Data/DataSerializationFormat.cs | 4 +- .../System/Data/DataSetDateTime.cs | 4 +- .../System/Data/DataTableClearEventHandler.cs | 4 +- .../Data/DataTableNewRowEventHandler.cs | 4 +- .../System/Data/DataViewRowState.cs | 6 +- .../System/Data/FillErrorEventHandler.cs | 4 +- .../System.Data/System/Data/Filter/IFilter.cs | 6 +- .../System.Data/System/Data/IColumnMapping.cs | 4 +- .../System/Data/IColumnMappingCollection.cs | 4 +- .../System.Data/System/Data/IDataAdapter.cs | 4 +- .../System.Data/System/Data/IDataParameter.cs | 4 +- .../System/Data/IDataParameterCollection.cs | 4 +- .../System.Data/System/Data/IDataReader.cs | 4 +- .../System.Data/System/Data/IDataRecord.cs | 4 +- .../System.Data/System/Data/IDbCommand.cs | 4 +- .../System.Data/System/Data/IDbConnection.cs | 4 +- .../System.Data/System/Data/IDbDataAdapter.cs | 4 +- .../System/Data/IDbDataParameter.cs | 4 +- .../System.Data/System/Data/IDbTransaction.cs | 4 +- .../System.Data/System/Data/ITableMapping.cs | 4 +- .../System/Data/ITableMappingCollection.cs | 4 +- .../System.Data/System/Data/IsolationLevel.cs | 4 +- .../System.Data/System/Data/LoadOption.cs | 6 +- .../System.Data/System/Data/MappingType.cs | 6 +- .../System/Data/MergeFailedEventHandler.cs | 6 +- .../System/Data/MissingMappingAction.cs | 4 +- .../System/Data/MissingSchemaAction.cs | 6 +- .../System.Data/System/Data/Odbc/OdbcType.cs | 4 +- .../System/Data/OleDb/OleDbHResult.cs | 6 +- .../OleDb/OleDbInfoMessageEventHandler.cs | 4 +- .../System/Data/OleDb/OleDbLiteral.cs | 4 +- .../System/Data/OleDb/OleDbPropertyStatus.cs | 4 +- .../Data/OleDb/OleDbRowUpdatedEventHandler.cs | 4 +- .../OleDb/OleDbRowUpdatingEventHandler.cs | 4 +- .../System/Data/OleDb/OleDbType.cs | 4 +- .../System/Data/OleDb/PropertyAttributes.cs | 4 +- .../System/Data/ParameterDirection.cs | 4 +- .../Data/ProviderBase/DbConnectionPool.cs | 19 + .../DbConnectionPoolAuthenticationContext.cs | 108 + ...bConnectionPoolAuthenticationContextKey.cs | 106 + .../DbConnectionPoolProviderInfo.cs | 2 +- .../Data/RecordsAffectedEventHandler.cs | 4 +- .../System.Data/System/Data/Rule.cs | 6 +- .../System/Data/SQLTypes/INullable.cs | 4 +- .../System/Data/SchemaSerializationMode.cs | 4 +- .../System.Data/System/Data/SchemaType.cs | 4 +- .../System/Data/Sql/IBinarySerialize.cs | 8 +- .../System/Data/Sql/TriggerAction.cs | 10 +- .../Data/SqlClient/OnChangedEventHandler.cs | 4 +- .../Data/SqlClient/ParameterPeekAheadValue.cs | 4 +- .../Data/SqlClient/RowsCopiedEventHandler.cs | 4 +- .../System/Data/SqlClient/SortOrder.cs | 6 +- .../SqlAeadAes256CbcHmac256Algorithm.cs | 406 +++ .../SqlAeadAes256CbcHmac256EncryptionKey.cs | 128 + .../SqlAeadAes256CbcHmac256Factory.cs | 80 + .../Data/SqlClient/SqlAes256CbcAlgorithm.cs | 65 + .../Data/SqlClient/SqlAes256CbcFactory.cs | 85 + .../System/Data/SqlClient/SqlBuffer.cs | 21 +- .../SqlClient/SqlBulkCopy.cs.REMOVED.git-id | 2 +- .../Data/SqlClient/SqlBulkCopyOptions.cs | 5 +- .../SqlClient/SqlClientEncryptionAlgorithm.cs | 33 + .../SqlClientEncryptionAlgorithmFactory.cs | 26 + ...SqlClientEncryptionAlgorithmFactoryList.cs | 79 + .../Data/SqlClient/SqlClientEncryptionType.cs | 19 + .../Data/SqlClient/SqlClientSymmetricKey.cs | 73 + ...olumnEncryptionCertificateStoreProvider.cs | 556 +++ .../SqlColumnEncryptionCngProvider.cs | 414 +++ .../SqlColumnEncryptionCspProvider.cs | 462 +++ .../SqlColumnEncryptionKeyStoreProvider.cs | 39 + .../SqlClient/SqlCommand.cs.REMOVED.git-id | 2 +- .../System/Data/SqlClient/SqlCommandSet.cs | 8 +- .../System/Data/SqlClient/SqlConnection.cs | 2248 ------------ .../SqlClient/SqlConnection.cs.REMOVED.git-id | 1 + .../Data/SqlClient/SqlConnectionFactory.cs | 18 +- .../Data/SqlClient/SqlConnectionPoolKey.cs | 23 +- .../Data/SqlClient/SqlConnectionString.cs | 376 +- .../SqlClient/SqlConnectionStringBuilder.cs | 448 ++- .../SqlClient/SqlDataReader.cs.REMOVED.git-id | 2 +- .../Data/SqlClient/SqlDelegatedTransaction.cs | 23 + .../SqlClient/SqlInfoMessageEventHandler.cs | 4 +- .../Data/SqlClient/SqlInternalConnection.cs | 82 +- .../SqlClient/SqlInternalConnectionTds.cs | 2009 ----------- ...SqlInternalConnectionTds.cs.REMOVED.git-id | 1 + .../Data/SqlClient/SqlNotificationInfo.cs | 6 +- .../Data/SqlClient/SqlNotificationSource.cs | 6 +- .../Data/SqlClient/SqlNotificationType.cs | 6 +- .../System/Data/SqlClient/SqlParameter.cs | 71 +- .../SqlClient/SqlRowUpdatedEventHandler.cs | 4 +- .../SqlClient/SqlRowUpdatingEventHandler.cs | 4 +- .../Data/SqlClient/SqlSecurityUtility.cs | 263 ++ .../Data/SqlClient/SqlSymmetricKeyCache.cs | 107 + .../System/Data/SqlClient/SqlUtil.cs | 557 ++- .../System/Data/SqlClient/TdsEnums.cs | 186 +- .../SqlClient/TdsParser.cs.REMOVED.git-id | 2 +- .../Data/SqlClient/TdsParserHelperClasses.cs | 557 ++- .../Data/SqlClient/TdsParserSafeHandles.cs | 7 +- .../TdsParserStateObject.cs.REMOVED.git-id | 2 +- .../Data/SqlClient/TdsParserStaticMethods.cs | 4 + .../System.Data/System/Data/SqlDbType.cs | 4 +- .../System/Data/StateChangeEventHandler.cs | 4 +- .../System.Data/System/Data/StatementType.cs | 4 +- .../System/Data/UpdateRowSource.cs | 4 +- .../System.Data/System/Data/XmlContent.cs | 6 +- .../System.Data/System/Data/XmlReadMode.cs | 6 +- .../System.Data/System/Data/XmlWriteMode.cs | 6 +- .../System.Data/System/Data/dbtype.cs | 4 +- .../System.Data/System/Data/updatestatus.cs | 4 +- .../System/NewXml/IXmlDataVirtualNode.cs | 6 +- .../Clr/inc/AppContextDefaultValues.cs | 169 + .../InternalApis/Clr/inc/LocalAppContext.cs | 128 + .../System/AppContextDefaultValues.cs | 39 + .../Claims/X509CertificateClaimSet.cs | 70 +- .../IdentityModel/IdentityModelStrings.cs | 2 +- .../IdentityModel/LocalAppContextSwitches.cs | 52 + .../Policy/DefaultAuthorizationContext.cs | 17 +- .../System/IdentityModel/SignedXml.cs | 7 +- .../Collaboration/CollaborationEnumTypes.cs | 2 +- .../System.Numerics/BaselineExcludes.lst.cs | 4 +- .../System/Numerics/Complex.cs | 8 + .../System/Numerics/HashCodeHelper.cs | 16 + .../System/Numerics/JITIntrinsicAttribute.cs | 13 + .../System/Numerics/Matrix3x2.cs | 809 +++++ .../System/Numerics/Matrix4x4.cs | 2212 ++++++++++++ .../System.Numerics/System/Numerics/Plane.cs | 366 ++ .../System/Numerics/Quaternion.cs | 792 +++++ .../System/Numerics/Vector2.cs | 451 +++ .../System/Numerics/Vector2_Intrinsics.cs | 296 ++ .../System/Numerics/Vector3.cs | 471 +++ .../System/Numerics/Vector3_Intrinsics.cs | 322 ++ .../System/Numerics/Vector4.cs | 520 +++ .../System/Numerics/Vector4_Intrinsics.cs | 353 ++ .../System/Numerics/Vector_Operations.cs | 29 + .../System/Caching/MemoryCache.cs | 3 + .../System/Caching/MemoryCacheEntry.cs | 2 +- .../System/Caching/MemoryCacheStore.cs | 12 +- .../AssemblyInfo.cs | 2 +- .../System/Runtime/ICancelable.cs | 2 +- .../Serialization/ClassDataContract.cs | 4 +- .../Serialization/CollectionDataContract.cs | 6 +- .../CollectionDataContractAttribute.cs | 48 +- .../DataContract.cs.REMOVED.git-id | 2 +- .../Serialization/DataContractAttribute.cs | 24 +- .../Runtime/Serialization/DataContractSet.cs | 61 +- .../Serialization/DataMemberAttribute.cs | 8 +- .../Runtime/Serialization/EnumDataContract.cs | 2 +- .../Serialization/EnumMemberAttribute.cs | 8 +- .../System/Runtime/Serialization/Globals.cs | 22 +- .../Serialization/Json/JsonNodeType.cs | 2 +- .../XmlObjectSerializerContext.cs | 8 +- .../XmlObjectSerializerReadContextComplex.cs | 2 +- .../XmlObjectSerializerWriteContext.cs | 2 + .../Xml/XmlBaseReader.cs.REMOVED.git-id | 2 +- .../System/Xml/XmlDictionaryWriter.cs | 33 +- .../System/Xml/XmlStreamNodeWriter.cs | 8 +- .../IServiceModelActivationHandler.cs | 2 +- .../SuppressMessages.cs | 2 +- .../ServiceModel/Activities/AppSettings.cs | 25 +- .../WorkflowServiceInstance.cs.REMOVED.git-id | 2 +- .../Activities/IWorkflowInstanceManagement.cs | 2 +- .../Activities/SerializerOption.cs | 2 +- .../Activities/WorkflowService.cs | 4 + .../Activities/WorkflowServiceHost.cs | 3 +- .../AssemblyInfo.cs | 2 +- .../Channels/ByteStreamMessage.cs | 8 + .../Channels/XmlByteStreamWriter.cs | 20 + .../AssemblyInfo.cs | 2 +- .../AssemblyInfo.cs | 2 +- .../Diagnostics/DiagnosticTraceBase.cs | 2 + .../Runtime/Diagnostics/EventLogCategory.cs | 2 +- .../Runtime/Diagnostics/EventLogEventId.cs | 2 +- .../Runtime/Interop/UnsafeNativeMethods.cs | 15 +- .../Routing/ProcessRequestAsyncResult.cs | 16 + .../GlobalSuppressions.cs | 4 +- .../Dispatcher/HelpHtmlBuilder.cs | 2 +- .../Clr/inc/AppContextDefaultValues.cs | 169 + .../InternalApis/Clr/inc/LocalAppContext.cs | 128 + .../EndpointInstanceProvider.cs | 4 +- .../Administration/ServiceInstanceProvider.cs | 2 +- .../AppContextDefaultValues.Default.cs | 35 + .../System/ServiceModel/CacheSetting.cs | 2 +- .../Channels/BufferedOutputAsyncStream.cs | 17 +- .../Channels/ChannelDemuxer.cs.REMOVED.git-id | 2 +- .../Channels/ClientWebSocketFactory.cs | 2 +- .../Channels/HttpChannelFactory.cs | 30 +- .../HttpChannelHelpers.cs.REMOVED.git-id | 2 +- .../Channels/HttpsChannelListener.cs | 8 +- .../ServiceModel/Channels/IChannelAcceptor.cs | 2 +- .../Channels/IChannelBindingProvider.cs | 2 +- .../Channels/IHttpCookieContainerManager.cs | 2 +- .../Channels/IReliableFactorySettings.cs | 2 +- .../IStreamUpgradeChannelBindingProvider.cs | 2 +- .../ServiceModel/Channels/MessageHeaders.cs | 2 +- .../Channels/SafeNativeMethods.cs | 14 +- .../SslStreamSecurityBindingElement.cs | 20 +- .../SslStreamSecurityUpgradeProvider.cs | 24 +- .../Channels/TransportDefaults.cs | 5 + .../Channels/UnsafeNativeMethods.cs | 7 + .../WebSocketTransportDuplexSessionChannel.cs | 10 +- .../ComIntegration/IClassFactory.cs | 2 +- .../IContextSecurityPerimeter.cs | 2 +- .../ComIntegration/IServerSecurity.cs | 2 +- .../ComIntegration/SafeNativeMethods.cs | 46 +- .../Configuration/ConfigurationStrings.cs | 1 + .../Properties.cs.REMOVED.git-id | 2 +- ...erviceMetadataEndpointCollectionElement.cs | 2 +- .../Configuration/SslStreamSecurityElement.cs | 14 + .../TcpTransportSecurityElement.cs | 11 + .../Description/DispatcherBuilder.cs | 6 + .../Description/IPolicyImportExtension.cs | 2 +- .../Description/IWsdlExportExtension.cs | 2 +- .../Description/IWsdlImportExtension.cs | 2 +- .../ServiceModel/Diagnostics/ActivityType.cs | 2 +- .../EndpointPerformanceCountersBase.cs | 33 +- .../EndpointPerformanceCountersV2.cs | 12 + .../ServiceModel/Diagnostics/MessageLogger.cs | 4 +- .../OperationPerformanceCountersBase.cs | 34 +- .../OperationPerformanceCountersV2.cs | 12 + .../Diagnostics/PerformanceCountersBase.cs | 58 +- .../Diagnostics/PerformanceCountersFactory.cs | 81 + .../ServicePerformanceCountersBase.cs | 49 +- .../ServicePerformanceCountersV2.cs | 12 + .../ServiceModel/Diagnostics/TraceUtility.cs | 18 + .../ServiceModel/Dispatcher/ChannelHandler.cs | 51 +- .../Dispatcher/ImmutableDispatchRuntime.cs | 2 +- .../Dispatcher/ServiceThrottle.cs | 93 +- .../System/ServiceModel/EndpointTrait.cs | 2 +- .../ServiceModel/LocalAppContextSwitches.cs | 45 + .../System/ServiceModel/OSVersion.cs | 2 +- .../ServiceModel/Security/SecurityUtils.cs | 23 + .../Security/TransportSecurityProtocol.cs | 7 + ...SecurityOneDotZeroReceiveSecurityHeader.cs | 30 +- .../ServiceModel/ServiceModelAppSettings.cs | 99 + .../ServiceModelAttributeTargets.cs | 2 +- .../ServiceModel/ServiceModelStrings.cs | 2 +- .../System/ServiceModel/StringUtil.cs | 63 + .../Syndication/Rss20FeedFormatter.cs | 34 +- .../ServiceModel/TcpTransportSecurity.cs | 27 +- .../Transactions/IsolationFlags.cs | 2 +- .../ServiceModel/UpnEndpointIdentity.cs | 28 +- .../Properties/AssemblyInfo.cs | 2 +- .../Design/EntityDataSourceDesignerHelper.cs | 28 +- .../System.Web.Entity/AssemblyInfo.cs | 4 +- .../Handlers/ScriptModule.cs | 4 + .../ui/EmbeddedResourceFinder.cs | 2 +- .../ui/PageRequestManager.cs | 1 + .../GlobalSuppressions.cs.REMOVED.git-id | 2 +- .../Design/Util/InterchangeableLists.cs | 4 +- .../Web/Services/Configuration/Protocols.cs | 2 +- .../Discovery/DiscoveryClientProtocol.cs | 6 +- .../Discovery/DiscoveryRequestHandler.cs | 2 +- .../System/Web/Services/NativeMethods.cs | 2 +- .../Protocols/DiscoveryServerProtocol.cs | 2 +- .../Protocols/DocumentationServerProtocol.cs | 2 +- .../Web/Services/Protocols/RuntimeUtils.cs | 8 + .../Services/Protocols/ScatterGatherStream.cs | 2 +- .../Services/Protocols/SoapServerMessage.cs | 2 +- .../Protocols/SoapServiceRoutingStyle.cs | 2 +- .../Abstractions/HttpContextWrapper.cs | 2 +- .../Abstractions/HttpRequestBase.cs | 6 + .../Abstractions/HttpRequestWrapper.cs | 8 +- .../Abstractions/HttpResponseBase.cs | 13 + .../Abstractions/HttpResponseWrapper.cs | 13 + .../AspNetSynchronizationContext.cs | 6 + .../System.Web/BufferAllocator.cs | 274 +- .../Compilation/BuildManagerHost.cs | 2 +- .../Compilation/BuildResultCache.cs | 5 +- .../System.Web/Compilation/CompilationLock.cs | 3 +- .../System.Web/Configuration/BuildProvider.cs | 2 +- .../Configuration/FolderLevelBuildProvider.cs | 2 +- .../Configuration/HttpCapabilitiesBase.cs | 3 +- .../Configuration/MachineKeySection.cs | 12 +- .../Configuration/MembershipSection.cs | 2 + .../System.Web/Configuration/RegexWorker.cs | 3 +- .../System.Web/Configuration/RuntimeConfig.cs | 2 - .../Configuration/TicketCompatibilityMode.cs | 2 +- .../System.Web/ErrorFormatter.cs | 16 + .../referencesource/System.Web/EtwTrace.cs | 1 - .../GlobalSuppressions.cs.REMOVED.git-id | 2 +- .../System.Web/GlobalSuppressions3.cs | 2 +- .../System.Web/Hosting/AppDomainFactory.cs | 8 +- .../System.Web/Hosting/ApplicationHost.cs | 3 +- .../System.Web/Hosting/ApplicationManager.cs | 72 +- .../System.Web/Hosting/HostingEnvironment.cs | 35 + .../IIS7WorkerRequest.cs.REMOVED.git-id | 2 +- .../System.Web/Hosting/IISUnsafeMethods.cs | 25 + .../System.Web/Hosting/IPipelineRuntime.cs | 10 + .../ISAPIWorkerRequest.cs.REMOVED.git-id | 2 +- .../System.Web/Hosting/ProcessHost.cs | 6 +- .../System.Web/Hosting/TlsTokenBindingInfo.cs | 31 + .../HttpApplication.cs.REMOVED.git-id | 2 +- .../System.Web/HttpCachePolicy.cs | 7 +- .../referencesource/System.Web/HttpContext.cs | 15 +- .../System.Web/HttpHeaderCollection.cs | 4 +- .../System.Web/HttpRequest.cs.REMOVED.git-id | 2 +- .../System.Web/HttpResponse.cs.REMOVED.git-id | 2 +- .../System.Web/HttpRuntime.cs.REMOVED.git-id | 2 +- .../System.Web/HttpServerVarsCollection.cs | 37 +- .../referencesource/System.Web/HttpWriter.cs | 92 +- .../System.Web/ITlsTokenBindingInfo.cs | 36 + .../IntraPartitionAPIs/xsp/PerfCounterEnum.cs | 131 + .../LegacyAspNetSynchronizationContext.cs | 8 +- .../System.Web/OutputCacheModule.cs | 4 +- .../System.Web/PerfCounters.cs | 4 - .../System.Web/Properties/AssemblyInfo.cs | 2 +- .../ADMembershipProvider.cs.REMOVED.git-id | 2 +- .../Security/AntiXss/GlobalSuppressions.cs | 2 +- .../System.Web/Security/IVType.cs | 2 +- .../Security/MembershipPasswordAttribute.cs | 7 +- .../System.Web/Security/RolePrincipal.cs | 6 +- .../System.Web/Security/Roles.cs | 8 +- .../Security/SQLMembershipProvider.cs | 11 +- .../System.Web/State/sqlstateclientmanager.cs | 3 +- .../System.Web/System.Web.txt.REMOVED.git-id | 2 +- .../System.Web/UI/ConflictOptions.cs | 2 +- .../System.Web/UI/Control.cs.REMOVED.git-id | 2 +- .../System.Web/UI/ControlCollection.cs | 3 - .../System.Web/UI/EmptyTextWriter.cs | 2 +- .../System.Web/UI/HTMLTextWriter.cs | 10 +- .../System.Web/UI/HtmlControls/HtmlControl.cs | 1 - .../referencesource/System.Web/UI/HtmlForm.cs | 4 +- .../System.Web/UI/IUpdatePanel.cs | 2 +- .../System.Web/UI/LiteralControl.cs | 1 - .../System.Web/UI/Page.cs.REMOVED.git-id | 2 +- .../System.Web/UI/PartialCachingControl.cs | 6 +- .../System.Web/UI/TemplateControl.cs | 2 +- .../System.Web/UI/TraceContext.cs | 62 +- .../referencesource/System.Web/UI/Util.cs | 2 +- .../Adapters/WmlBulletedListAdapter.cs | 4 +- .../WmlDataBoundLiteralControlAdapter.cs | 4 +- .../Adapters/WmlHyperLinkAdapter.cs | 4 +- .../Adapters/WmlImageButtonAdapter.cs | 8 +- .../WebControls/Adapters/WmlLiteralAdapter.cs | 2 +- .../Adapters/WmlLiteralControlAdapter.cs | 4 +- .../UI/WebControls/Adapters/WmlPageAdapter.cs | 26 +- .../Adapters/WmlPhoneLinkAdapter.cs | 6 +- .../Adapters/WmlRadioButtonAdapter.cs | 4 +- .../WebControls/Adapters/WmlTextBoxAdapter.cs | 8 +- .../UI/WebControls/BaseDataBoundControl.cs | 4 + .../System.Web/UI/WebControls/CheckBoxList.cs | 2 +- .../System.Web/UI/WebControls/DataGridItem.cs | 1 - .../System.Web/UI/WebControls/DropDownList.cs | 2 +- .../UI/WebControls/GridView.cs.REMOVED.git-id | 2 +- .../ICompositeControlDesignerAccessor.cs | 2 +- .../UI/WebControls/IFieldControl.cs | 2 +- .../System.Web/UI/WebControls/ListControl.cs | 50 +- .../System.Web/UI/WebControls/Listbox.cs | 2 +- .../UI/WebControls/MenuRenderingMode.cs | 2 +- .../UI/WebControls/ModelDataSourceView.cs | 405 ++- .../System.Web/UI/WebControls/PagerTable.cs | 2 +- .../UI/WebControls/RadioButtonList.cs | 3 +- .../WebControls/RegularExpressionValidator.cs | 11 +- .../System.Web/UI/WebControls/RepeatLayout.cs | 2 +- .../System.Web/UI/WebControls/Repeater.cs | 60 +- .../System.Web/UI/WebControls/SelectResult.cs | 17 + .../System.Web/UI/WebControls/Style.cs | 3 - .../System.Web/UI/WebControls/TreeNode.cs | 17 + .../System.Web/UI/WebControls/WebControl.cs | 2 - .../System.Web/UI/WebResourceAttribute.cs | 2 +- .../System.Web/UI/WmlTextWriter.cs | 12 +- .../System.Web/UnsafeNativeMethods.cs | 11 + .../System.Web/Util/AppSettings.cs | 27 + .../System.Web/Util/AppVerifier.cs | 166 +- .../System.Web/Util/AppVerifierErrorCode.cs | 8 +- .../System.Web/Util/BinaryCompatibility.cs | 4 + .../System.Web/Util/HashCodeCombiner.cs | 4 +- .../System.Web/Util/HeapAllocHandle.cs | 26 + .../System.Web/Util/HttpEncoder.cs | 46 +- .../System.Web/Util/RegexUtil.cs | 83 + .../System.Web/Util/SecUtil.cs | 11 + .../System.Web/Util/StringUtil.cs | 58 +- .../System.Web/Util/SynchronizationHelper.cs | 63 +- .../System.Web/Util/TlsTokenBindingHandle.cs | 68 + .../System.Web/Util/UriUtil.cs | 2 +- .../System.Web/Util/VersionUtil.cs | 3 + .../System.Web/Util/versioninfo.cs | 7 +- .../referencesource/System.Web/VirtualPath.cs | 5 - .../System.Web/httpserverutility.cs | 3 +- .../Common/AssemblyRef.cs | 2 +- .../System.Workflow.Activities/State.cs | 2 +- .../StateMachineHelpers.cs | 2 +- .../AuthoringOM/Compiler/XomlCompiler.cs | 84 +- .../AuthoringOM/RuleDeclaration.cs | 2 +- .../Shared/AssemblyRef.cs | 2 +- .../Common/Shared/DigestComparer.cs | 39 + .../ISupportInterop.cs | 2 +- .../TransactionalProperties.cs | 2 +- .../WorkflowEventInternal.cs | 2 +- .../GlobalSuppressions.cs | 6 +- .../System/Xml/Linq/XLinq.cs.REMOVED.git-id | 2 +- .../Clr/inc/AppContextDefaultValues.cs | 169 + .../InternalApis/Clr/inc/LocalAppContext.cs | 128 + .../NDP_Common/inc/Win8Helpers.cs | 6 + .../Xml/Assembly/System.Xml.Assembly.cs | 4 +- .../System/Xml/BinaryXml/BinXmltoken.cs | 2 +- .../System.Xml/System/Xml/Cache/Shape.cs | 4 +- .../System/Xml/Cache/ShapeGenerator.cs | 4 +- .../System/Xml/Cache/XPathDocumentView.cs | 6 +- .../System.Xml/System/Xml/Cache/XPathNode.cs | 1 - .../System/Xml/Cache/XPathNodeView.cs | 4 +- .../Cache/XPathNodeViewPropertyDescriptor.cs | 4 +- .../Core/AppContextDefaultValues.Defaults.cs | 46 + .../System/Xml/Core/BinaryCompatibility.cs | 6 +- .../System/Xml/Core/ConformanceLevel.cs | 2 +- .../System/Xml/Core/DtdProcessing.cs | 2 +- .../System/Xml/Core/EntityHandling.cs | 2 +- .../System.Xml/System/Xml/Core/IDtdInfo.cs | 2 +- .../System.Xml/System/Xml/Core/IDtdParser.cs | 2 +- .../System/Xml/Core/IDtdParserAdapter.cs | 2 +- .../System/Xml/Core/IDtdParserAsync.cs | 2 +- .../System/Xml/Core/IRemovableWriter.cs | 2 +- .../Xml/Core/IValidationEventHandling.cs | 2 +- .../Xml/Core/LocalAppContextSwitches.cs | 33 + .../System/Xml/Core/NamespaceHandling.cs | 2 +- .../System/Xml/Core/NewLineHandling.cs | 2 +- .../System.Xml/System/Xml/Core/ReadState.cs | 2 +- .../System/Xml/Core/SecureStringHasher.cs | 45 +- .../System/Xml/Core/ValidationType.cs | 2 +- .../System/Xml/Core/WhitespaceHandling.cs | 2 +- .../Xml/Core/XmlEncodedRawTextWriter.cs | 3 +- .../System.Xml/System/Xml/Core/XmlReader.cs | 6 +- .../System/Xml/Core/XmlReaderSettings.cs | 12 +- .../System.Xml/System/Xml/Core/XmlSpace.cs | 2 +- .../Core/XmlTextReaderImpl.cs.REMOVED.git-id | 2 +- .../System/Xml/Core/XmlUtf8RawTextWriter.cs | 4 +- .../System.Xml/System/Xml/Core/XmlWriter.cs | 1 - .../System/Xml/Core/XmlWriterAsync.cs | 1 - .../System.Xml/System/Xml/Dom/XmlAttribute.cs | 2 - .../System/Xml/Dom/XmlAttributeCollection.cs | 1 - .../System/Xml/Dom/XmlCDataSection.cs | 2 +- .../System/Xml/Dom/XmlCharacterData.cs | 1 - .../System.Xml/System/Xml/Dom/XmlDocument.cs | 1 - .../System/Xml/Dom/XmlEventChangedAction.cs | 2 +- .../System/Xml/Dom/XmlNamedNodemap.cs | 1 - .../System.Xml/System/Xml/Dom/XmlNode.cs | 7 +- .../Xml/Dom/XmlNodeChangedEventHandler.cs | 2 +- .../Xml/Dom/XmlSignificantWhiteSpace.cs | 2 +- .../System.Xml/System/Xml/Dom/XmlText.cs | 2 +- .../System/Xml/Dom/XmlWhitespace.cs | 2 +- .../System.Xml/System/Xml/HWStack.cs | 2 - .../System.Xml/System/Xml/IHasXmlNode.cs | 2 +- .../System/Xml/IXmlNamespaceResolver.cs | 2 +- .../System.Xml/System/Xml/MTNameTable.cs | 10 +- .../System/Xml/Resolvers/XmlKnownDtds.cs | 2 +- .../System/Xml/Schema/ConstraintStruct.cs | 60 +- .../System/Xml/Schema/IXmlSchemaInfo.cs | 2 +- .../System/Xml/Schema/SchemaBuilder.cs | 2 +- .../System/Xml/Schema/SchemaType.cs | 2 +- .../Xml/Schema/ValidationEventHandler.cs | 2 +- .../System/Xml/Schema/XmlSchemaContent.cs | 2 +- .../Xml/Schema/XmlSchemaContentModel.cs | 2 +- .../Xml/Schema/XmlSchemaContentProcessing.cs | 2 +- .../System/Xml/Schema/XmlSchemaContentType.cs | 2 +- .../Xml/Schema/XmlSchemaDerivationMethod.cs | 2 +- .../System/Xml/Schema/XmlSchemaForm.cs | 2 +- .../System/Xml/Schema/XmlSchemaGroupBase.cs | 2 +- .../Xml/Schema/XmlSchemaSimpleTypeContent.cs | 2 +- .../System/Xml/Schema/XmlSchemaUse.cs | 4 +- .../XmlSchemaValidator.cs.REMOVED.git-id | 2 +- .../System/Xml/Schema/XmlSchemaValidity.cs | 2 +- .../System/Xml/Schema/XmlSeverityType.cs | 2 +- .../System/Xml/Schema/XmlTokenizedType.cs | 4 +- .../System/Xml/Schema/XmlTypeCode.cs | 2 +- .../System/Xml/Serialization/CodeExporter.cs | 1 + .../Serialization/CodeGenerationoptions.cs | 2 +- .../Xml/Serialization/IXmlSerializable.cs | 2 +- .../Xml/Serialization/IXmlTextParser.cs | 2 +- .../Xml/Serialization/XmlCodeExporter.cs | 6 +- .../System/Xml/XPath/IXPathNavigable.cs | 4 +- .../System/Xml/XPath/Internal/AstNode.cs | 2 +- .../System/Xml/XPath/Internal/Query.cs | 1 - .../System/Xml/XPath/XPathNamespaceScope.cs | 2 +- .../System/Xml/XPath/XPathNodeType.cs | 2 +- .../System.Xml/System/Xml/XmlConvert.cs | 2 - .../System.Xml/System/Xml/XmlNameTable.cs | 2 +- .../System/Xml/XmlNamespaceScope.cs | 2 +- .../System.Xml/System/Xml/XmlNodeOrder.cs | 2 +- .../System.Xml/System/Xml/XmlNodeType.cs | 2 +- .../System.Xml/System/Xml/XmlQualifiedName.cs | 80 + .../System.Xml/System/Xml/XmlReservedNs.cs | 2 +- .../Clr/inc/AppContextDefaultValues.cs | 169 + .../InternalApis/Clr/inc/LocalAppContext.cs | 128 + .../NDP_Common/inc/PinnableBufferCache.cs | 9 + .../microsoft/win32/SafeNativeMethods.cs | 13 +- .../win32/safehandles/SafeLibraryHandle.cs | 2 + .../win32/safehandles/SafeProcessHandle.cs | 15 +- .../ComTypes/FxCopSuppression.cs | 2 +- .../codedom/CodeBaseReferenceExpression.cs | 2 +- .../system/codedom/CodeBinaryOperatorType.cs | 2 +- .../compmod/system/codedom/CodeDirective.cs | 2 +- .../compmod/system/codedom/CodeExpression.cs | 2 +- ...CodePropertySetValueReferenceExpression.cs | 2 +- .../compmod/system/codedom/CodeRegionMode.cs | 2 +- .../codedom/CodeThisReferenceExpression.cs | 2 +- .../compmod/system/codedom/FieldDirection.cs | 2 +- .../system/codedom/MemberAttributes.cs | 2 +- .../system/codedom/compiler/CodeParser.cs | 2 +- .../codedom/compiler/GeneratorSupport.cs | 2 +- .../system/codedom/compiler/ICodeCompiler.cs | 2 +- .../system/codedom/compiler/ICodeGenerator.cs | 2 +- .../system/codedom/compiler/ICodeParser.cs | 2 +- .../codedom/compiler/LanguageOptions.cs | 2 +- .../system/collections/generic/iset.cs | 2 +- .../system/collections/generic/linkedlist.cs | 4 +- .../system/collections/generic/queue.cs | 3 +- .../collections/generic/sorteddictionary.cs | 22 +- .../system/collections/generic/sortedlist.cs | 41 +- .../system/collections/generic/sortedset.cs | 4 +- .../system/collections/generic/stack.cs | 3 +- .../system/collections/generic/throwhelper.cs | 18 +- .../objectmodel/observablecollection.cs | 4 + .../readonlyobservablecollection.cs | 2 + .../casesensitivestringdictionary.cs | 2 +- .../specialized/hybriddictionary.cs | 40 +- .../specialized/inotifycollectionchanged.cs | 2 + .../notifycollectionchangedeventargs.cs | 6 + .../specialized/stringdictionary.cs | 272 +- .../system/componentmodel/FxCopSuppression.cs | 2 +- .../PropertyChangedEventArgs.cs | 2 + .../PropertyChangedEventHandler.cs | 2 + .../ReflectPropertyDescriptor.cs | 1 - .../system/componentmodel/Win32Exception.cs | 48 +- .../design/DesigntimeLicenseContext.cs | 15 +- .../compmod/system/diagnostics/Debug.cs | 96 +- .../diagnostics/TextWriterTraceListener.cs | 1 - .../compmod/system/diagnostics/Trace.cs | 6 +- .../system/diagnostics/TraceEventCache.cs | 6 +- .../system/diagnostics/TraceInternal.cs | 2 + .../System/net/System/IriHelper.cs | 370 ++ .../net/System/Net/AuthenticationManager.cs | 766 +--- .../net/System/Net/AuthenticationScheme.cs | 2 +- .../System/net/System/Net/FtpWebRequest.cs | 146 +- .../net/System/Net/HttpListenerRequest.cs | 124 + .../Net/HttpWebRequest.cs.REMOVED.git-id | 2 +- .../System/net/System/Net/IPAddress.cs | 7 +- .../System/Net/NetRegistryConfiguration.cs | 197 ++ .../System/Net/SecureProtocols/_SslState.cs | 31 +- .../System/net/System/Net/ServicePoint.cs | 68 +- .../net/System/Net/ServicePointManager.cs | 142 +- .../System/net/System/Net/SocketException.cs | 14 +- .../System/net/System/Net/Sockets/Internal.cs | 2 +- .../net/System/Net/Sockets/LingerOption.cs | 4 + .../net/System/Net/Sockets/MulticastOption.cs | 8 + .../Net/Sockets/Socket.cs.REMOVED.git-id | 2 +- .../net/System/Net/Sockets/SocketErrors.cs | 8 +- .../System/Net/Sockets/SocketOptionName.cs | 8 +- .../net/System/Net/Sockets/TCPClient.cs | 3 +- .../net/System/Net/Sockets/UDPClient.cs | 5 +- .../System/net/System/Net/TransportContext.cs | 10 + .../System/Net/UnicodeDecodingConformance.cs | 5 +- .../System/Net/UnicodeEncodingConformance.cs | 5 +- .../Net/UnsafeNativeMethods.cs.REMOVED.git-id | 2 +- .../System/net/System/Net/WebRequest.cs | 55 +- .../System/Net/WebSockets/ClientWebSocket.cs | 17 +- .../WebSocketBase.cs.REMOVED.git-id | 2 +- .../System/Net/WebSockets/WebSocketBuffer.cs | 2 +- .../Net/WebSockets/WebSocketCloseStatus.cs | 2 +- .../System/Net/WebSockets/WebSocketError.cs | 2 +- .../WebSocketHttpListenerDuplexStream.cs | 70 +- .../Net/WebSockets/WebSocketMessageType.cs | 2 +- .../System/Net/WebSockets/WebSocketState.cs | 2 +- .../System/net/System/Net/WebUtility.cs | 579 ++- .../net/System/Net/_AuthenticationManager2.cs | 376 ++ .../System/Net/_AuthenticationManagerBase.cs | 241 ++ .../Net/_AuthenticationManagerDefault.cs | 465 +++ .../System/net/System/Net/_BasicClient.cs | 22 +- .../net/System/Net/_IAuthenticationManager.cs | 60 + .../System/net/System/Net/_PrefixLookup.cs | 173 + .../Net/_SafeNetHandles.cs.REMOVED.git-id | 2 +- .../System/net/System/Net/_SecureChannel.cs | 9 +- .../System/net/System/Net/cookiecontainer.cs | 100 +- .../System/net/System/Net/filewebrequest.cs | 41 +- .../net/System/Net/mail/IEncodableStream.cs | 2 +- .../net/System/Net/mail/SmtpDateTime.cs | 2 +- .../System/net/System/URI.cs.REMOVED.git-id | 2 +- .../System/net/System/UriEnumTypes.cs | 2 +- .../System/net/System/UriExt.cs | 320 +- .../System/net/System/UriHelper.cs | 33 +- .../regularexpressions/RegexBoyerMoore.cs | 26 +- .../ExtendedProtection/TokenBinding.cs | 37 + .../cryptography/cryptoapi.cs.REMOVED.git-id | 2 +- .../security/cryptography/x509/x500Name.cs | 9 + .../cryptography/x509/x509certificate2.cs | 283 +- .../x509/x509certificate2collection.cs | 85 + .../security/cryptography/x509/x509chain.cs | 263 +- .../cryptography/x509/x509chainelement.cs | 7 + .../cryptography/x509/x509extension.cs | 60 + .../security/cryptography/x509/x509store.cs | 37 +- .../security/cryptography/x509/x509utils.cs | 41 +- .../system/diagnosticts/AsyncStreamReader.cs | 38 +- .../diagnosticts/Process.cs.REMOVED.git-id | 2 +- .../system/diagnosticts/ProcessManager.cs | 55 +- .../system/diagnosticts/ProcessStartInfo.cs | 42 +- .../sys/AppContextDefaultValues.Defaults.cs | 44 + .../System/sys/LocalAppContextSwitches.cs | 43 + .../System/sys/baseline.cs.REMOVED.git-id | 2 +- .../system/IO/compression/CompressionLevel.cs | 2 +- .../system/Reflection/ICustomTypeProvider.cs | 2 +- .../BlockingCollection.cs.REMOVED.git-id | 2 +- .../collections/concurrent/ConcurrentBag.cs | 4 +- .../interopservices/handlecollector.cs | 3 + .../runtime/versioning/FrameworkName.cs | 3 +- .../System/sys/system/threading/semaphore.cs | 27 +- .../threading/semaphorefullexception.cs | 2 +- .../System/sys/v4suppressions.cs | 4 +- .../Xaml/CompilationPass2TaskInternal.cs | 9 + .../PartialClassGenerationTaskInternal.cs | 9 + .../Xaml/XamlBuildTaskLeaseLifetimeHelper.cs | 77 + .../mscorlib/GlobalSuppressions.cs | 200 +- .../NDP_Common/inc/PinnableBufferCache.cs | 9 + .../microsoft/win32/RegistryOptions.cs | 4 +- .../mscorlib/microsoft/win32/RegistryView.cs | 4 +- .../mscorlib/microsoft/win32/registrykey.cs | 26 +- .../win32/safehandles/saferegistryhandle.cs | 6 + .../win32/safehandles/safewaithandle.cs | 48 - .../microsoft/win32/unsafenativemethods.cs | 46 +- .../win32/win32native.cs.REMOVED.git-id | 2 +- .../mscorlib/system/AppContext/AppContext.cs | 173 + ...ppContextDefaultValues.Defaults.Central.cs | 34 + .../AppContextDefaultValues.Defaults.cs | 62 + ...ppContextDefaultValues.DesktopOverrides.cs | 136 + .../AppContext/AppContextDefaultValues.cs | 169 + .../system/AppContext/AppContextSwitches.cs | 82 + .../mscorlib/system/AppDomainSetup.cs | 1431 ++++++++ .../mscorlib/system/FormattableString.cs | 82 + .../referencesource/mscorlib/system/Lazy.cs | 5 +- .../referencesource/mscorlib/system/action.cs | 2 +- .../mscorlib/system/activator.cs | 36 +- .../system/appdomain.cs.REMOVED.git-id | 2 +- .../mscorlib/system/appdomainmanager.cs | 2 - .../mscorlib/system/argumentexception.cs | 2 +- .../system/argumentoutofrangeexception.cs | 8 +- .../mscorlib/system/array.cs.REMOVED.git-id | 2 +- .../mscorlib/system/arraysegment.cs | 9 - .../mscorlib/system/attribute.cs | 42 +- .../mscorlib/system/boolean.cs | 1 + .../referencesource/mscorlib/system/buffer.cs | 111 +- .../referencesource/mscorlib/system/byte.cs | 1 + .../referencesource/mscorlib/system/char.cs | 29 +- .../Concurrent/ConcurrentDictionary.cs | 42 +- .../collections/Concurrent/ConcurrentQueue.cs | 4 +- .../collections/Concurrent/ConcurrentStack.cs | 2 +- .../collections/arraylist.cs.REMOVED.git-id | 2 +- .../collections/generic/arraysorthelper.cs | 49 + .../system/collections/generic/dictionary.cs | 26 +- .../collections/generic/equalitycomparer.cs | 138 +- .../system/collections/generic/icollection.cs | 2 +- .../system/collections/generic/icomparer.cs | 2 +- .../system/collections/generic/idictionary.cs | 2 +- .../system/collections/generic/ienumerable.cs | 2 +- .../system/collections/generic/ienumerator.cs | 2 +- .../collections/generic/iequalitycomparer.cs | 2 +- .../system/collections/generic/ilist.cs | 2 +- .../generic/ireadonlycollection.cs | 2 +- .../generic/ireadonlydictionary.cs | 2 +- .../collections/generic/ireadonlylist.cs | 2 +- .../system/collections/generic/list.cs | 52 - .../mscorlib/system/collections/hashtable.cs | 55 +- .../system/collections/icollection.cs | 2 +- .../mscorlib/system/collections/icomparer.cs | 2 +- .../system/collections/idictionary.cs | 2 +- .../collections/idictionaryenumerator.cs | 2 +- .../system/collections/ienumerable.cs | 2 +- .../system/collections/ienumerator.cs | 2 +- .../system/collections/iequalitycomparer.cs | 2 +- .../system/collections/ihashcodeprovider.cs | 2 +- .../mscorlib/system/collections/ilist.cs | 2 +- .../collections/istructuralequatable.cs | 2 +- .../collections/objectmodel/collection.cs | 30 - .../objectmodel/readonlycollection.cs | 15 - .../objectmodel/readonlydictionary.cs | 6 +- .../mscorlib/system/cominterfaces.cs | 6 + .../mscorlib/system/compatibilityswitches.cs | 54 +- .../assemblies/assemblyhashalgorithm.cs | 2 - .../mscorlib/system/console.cs | 48 +- .../mscorlib/system/contextboundobject.cs | 2 +- .../mscorlib/system/currency.cs | 6 - .../mscorlib/system/datetime.cs | 80 +- .../mscorlib/system/datetimeoffset.cs | 73 +- .../mscorlib/system/decimal.cs | 6 +- .../mscorlib/system/defaultbinder.cs | 8 - .../mscorlib/system/delegate.cs | 18 - .../mscorlib/system/deployment/cdf.cs | 6 - .../mscorlib/system/deployment/cmsinterop.cs | 5 - .../isolationinterop.cs.REMOVED.git-id | 2 +- .../ICustomDebuggerNotification.cs | 2 +- .../diagnostics/contracts/contractsbcl.cs | 15 +- .../mscorlib/system/diagnostics/debugger.cs | 29 +- .../diagnostics/eventing/StubEnvironment.cs | 350 ++ .../eventing/TraceLogging/ArrayTypeInfo.cs | 60 + .../eventing/TraceLogging/ConcurrentSet.cs | 123 + .../TraceLogging/ConcurrentSetItem.cs | 21 + .../eventing/TraceLogging/DataCollector.cs | 315 ++ .../eventing/TraceLogging/EmptyStruct.cs | 13 + .../eventing/TraceLogging/EnumHelper.cs | 42 + .../TraceLogging/EnumerableTypeInfo.cs | 62 + .../TraceLogging/EventDataAttribute.cs | 142 + .../TraceLogging/EventFieldAttribute.cs | 72 + .../eventing/TraceLogging/EventFieldFormat.cs | 126 + .../TraceLogging/EventIgnoreAttribute.cs | 21 + .../eventing/TraceLogging/EventPayload.cs | 147 + .../TraceLogging/EventSourceActivity.cs | 317 ++ .../TraceLogging/EventSourceOptions.cs | 126 + .../eventing/TraceLogging/FieldMetadata.cs | 227 ++ .../eventing/TraceLogging/InvokeTypeInfo.cs | 114 + .../eventing/TraceLogging/NameInfo.cs | 75 + .../eventing/TraceLogging/PropertyAccessor.cs | 154 + .../eventing/TraceLogging/PropertyAnalysis.cs | 33 + .../eventing/TraceLogging/SimpleEventTypes.cs | 46 + .../eventing/TraceLogging/SimpleTypeInfos.cs | 1044 ++++++ .../eventing/TraceLogging/Statics.cs | 827 +++++ .../TraceLogging/TraceLoggingDataCollector.cs | 392 +++ .../TraceLogging/TraceLoggingDataType.cs | 354 ++ .../TraceLogging/TraceLoggingEventSource.cs | 844 +++++ .../TraceLogging/TraceLoggingEventTraits.cs | 24 + .../TraceLogging/TraceLoggingEventTypes.cs | 258 ++ .../TraceLoggingMetadataCollector.cs | 366 ++ .../TraceLogging/TraceLoggingTypeInfo.cs | 176 + .../TraceLogging/TraceLoggingTypeInfo_T.cs | 158 + .../eventing/TraceLogging/TypeAnalysis.cs | 99 + .../diagnostics/eventing/activitytracker.cs | 564 +++ .../eventing/eventactivityoptions.cs | 40 + .../diagnostics/eventing/eventdescriptor.cs | 39 +- .../diagnostics/eventing/eventprovider.cs | 473 ++- .../eventing/eventsource.cs.REMOVED.git-id | 1 + .../eventing/eventsourceexception.cs | 32 +- .../eventing/frameworkeventsource.cs | 716 +--- .../system/diagnostics/eventing/winmeta.cs | 62 +- .../mscorlib/system/diagnostics/stacktrace.cs | 6 +- .../diagnostics/symbolstore/isymwriter.cs | 4 +- .../referencesource/mscorlib/system/double.cs | 10 + .../referencesource/mscorlib/system/enum.cs | 193 +- .../mscorlib/system/environment.cs | 663 +--- .../mscorlib/system/exception.cs | 23 +- .../referencesource/mscorlib/system/gc.cs | 103 +- .../CalendricalCalculationsHelper.cs | 414 +++ .../system/globalization/Persiancalendar.cs | 196 +- .../system/globalization/bidicategory.cs | 4 + .../system/globalization/calendardata.cs | 16 + .../system/globalization/charunicodeinfo.cs | 18 +- .../system/globalization/compareinfo.cs | 40 +- .../culturedata.cs.REMOVED.git-id | 2 +- .../system/globalization/cultureinfo.cs | 126 +- .../system/globalization/datetimeformat.cs | 1 + .../datetimeparse.cs.REMOVED.git-id | 2 +- .../system/globalization/japanesecalendar.cs | 12 +- .../system/globalization/regioninfo.cs | 8 +- .../system/globalization/taiwancalendar.cs | 6 +- .../mscorlib/system/globalization/textinfo.cs | 126 +- .../system/globalization/timespanparse.cs | 4 +- .../referencesource/mscorlib/system/guid.cs | 135 +- .../mscorlib/system/iappdomain.cs | 4 +- .../mscorlib/system/iappdomainsetup.cs | 2 +- .../referencesource/mscorlib/system/int16.cs | 1 + .../referencesource/mscorlib/system/int32.cs | 40 +- .../referencesource/mscorlib/system/int64.cs | 1 + .../mscorlib/system/internal.cs | 207 +- .../referencesource/mscorlib/system/intptr.cs | 78 +- .../mscorlib/system/io/ReadLinesIterator.cs | 6 - .../system/io/__debugoutputtextwriter.cs | 4 +- .../mscorlib/system/io/__hresults.cs | 2 +- .../mscorlib/system/io/binaryreader.cs | 12 - .../mscorlib/system/io/binarywriter.cs | 6 - .../mscorlib/system/io/directory.cs | 234 +- .../mscorlib/system/io/directoryinfo.cs | 133 +- .../mscorlib/system/io/file.cs | 181 +- .../mscorlib/system/io/fileaccess.cs | 2 +- .../mscorlib/system/io/fileattributes.cs | 4 +- .../mscorlib/system/io/fileinfo.cs | 70 +- .../mscorlib/system/io/filemode.cs | 2 +- .../mscorlib/system/io/fileshare.cs | 2 +- .../system/io/filestream.cs.REMOVED.git-id | 2 +- .../system/io/filesystemenumerable.cs | 51 +- .../mscorlib/system/io/filesysteminfo.cs | 53 +- .../system/io/isolatedstorage/__hresults.cs | 4 +- .../inormalizeforisolatedstorage.cs | 4 +- .../io/isolatedstorage/isolatedstorage.cs | 7 +- .../mscorlib/system/io/longpath.cs | 2 - .../mscorlib/system/io/memorystream.cs | 70 +- .../mscorlib/system/io/path.cs | 147 +- .../mscorlib/system/io/pathhelper.cs | 12 +- .../mscorlib/system/io/searchoption.cs | 2 +- .../mscorlib/system/io/seekorigin.cs | 2 +- .../mscorlib/system/io/stream.cs | 3 - .../mscorlib/system/io/streamreader.cs | 19 +- .../mscorlib/system/io/streamwriter.cs | 13 - .../mscorlib/system/io/stringwriter.cs | 27 - .../mscorlib/system/io/textwriter.cs | 6 - .../system/io/unmanagedmemorystream.cs | 15 - .../system/io/unmanagedmemorystreamwrapper.cs | 5 + .../mscorlib/system/iobservable.cs | 4 +- .../mscorlib/system/iobserver.cs | 4 +- .../mscorlib/system/iprogress.cs | 4 +- .../referencesource/mscorlib/system/math.cs | 139 +- .../mscorlib/system/multicastdelegate.cs | 41 - .../mscorlib/system/nullable.cs | 30 +- .../referencesource/mscorlib/system/number.cs | 6 - .../referencesource/mscorlib/system/object.cs | 15 +- .../mscorlib/system/oleautbinder.cs | 58 - .../mscorlib/system/paramsarray.cs | 78 + .../mscorlib/system/platforms.cs | 2 +- .../referencesource/mscorlib/system/random.cs | 9 - .../system/reflection/ConstructorInfo.cs | 24 +- .../reflection/RuntimeReflectionExtensions.cs | 128 +- .../reflection/assembly.cs.REMOVED.git-id | 2 +- .../system/reflection/assemblyattributes.cs | 5 +- .../system/reflection/assemblyname.cs | 27 +- .../system/reflection/assemblynameflags.cs | 4 +- .../mscorlib/system/reflection/binder.cs | 2 +- .../system/reflection/bindingflags.cs | 2 +- .../system/reflection/callingconventions.cs | 4 +- .../system/reflection/cominterfaces.cs | 26 +- .../customattribute.cs.REMOVED.git-id | 2 +- .../emit/assemblybuilder.cs.REMOVED.git-id | 2 +- .../reflection/emit/assemblybuilderaccess.cs | 8 +- .../system/reflection/emit/cominterfaces.cs | 32 +- .../reflection/emit/constructorbuilder.cs | 2 + .../reflection/emit/customattributebuilder.cs | 2 + .../system/reflection/emit/dynamicmethod.cs | 2 - .../system/reflection/emit/enumbuilder.cs | 16 +- .../system/reflection/emit/eventbuilder.cs | 2 + .../system/reflection/emit/fieldbuilder.cs | 2 + .../system/reflection/emit/flowcontrol.cs | 2 +- .../emit/generictypeparameterbuilder.cs | 10 +- .../system/reflection/emit/ilgenerator.cs | 2 + .../system/reflection/emit/isymwrappercore.cs | 2 +- .../system/reflection/emit/localbuilder.cs | 2 + .../system/reflection/emit/methodbuilder.cs | 5 +- .../emit/modulebuilder.cs.REMOVED.git-id | 2 +- .../system/reflection/emit/opcodetype.cs | 2 +- .../system/reflection/emit/operandtype.cs | 2 +- .../reflection/emit/parameterbuilder.cs | 2 + .../system/reflection/emit/pefilekinds.cs | 2 +- .../system/reflection/emit/propertybuilder.cs | 3 +- .../system/reflection/emit/signaturehelper.cs | 2 + .../system/reflection/emit/stackbehaviour.cs | 2 +- .../system/reflection/emit/symboltype.cs | 10 +- .../emit/typebuilder.cs.REMOVED.git-id | 2 +- .../emit/typebuilderinstantiation.cs | 10 +- .../reflection/emit/unmanagedmarshal.cs | 14 - .../system/reflection/eventattributes.cs | 2 +- .../mscorlib/system/reflection/eventinfo.cs | 26 +- .../system/reflection/fieldattributes.cs | 2 +- .../mscorlib/system/reflection/fieldinfo.cs | 83 +- .../reflection/genericparameterattributes.cs | 2 +- .../reflection/icustomattributeprovider.cs | 4 +- .../system/reflection/interfacemapping.cs | 4 +- .../reflection/introspectionextensions.cs | 7 - .../mscorlib/system/reflection/ireflect.cs | 2 +- .../system/reflection/ireflectabletype.cs | 2 +- .../system/reflection/memberfilter.cs | 4 +- .../mscorlib/system/reflection/memberinfo.cs | 25 +- .../mscorlib/system/reflection/membertypes.cs | 2 +- .../system/reflection/methodattributes.cs | 2 +- .../mscorlib/system/reflection/methodbase.cs | 77 +- .../mscorlib/system/reflection/methodbody.cs | 3 +- .../system/reflection/methodimplattributes.cs | 2 +- .../mscorlib/system/reflection/methodinfo.cs | 59 +- .../mscorlib/system/reflection/module.cs | 11 +- .../system/reflection/parameterattributes.cs | 2 +- .../system/reflection/parameterinfo.cs | 4 + .../system/reflection/propertyattributes.cs | 8 +- .../system/reflection/propertyinfo.cs | 29 +- .../system/reflection/resourceattributes.cs | 4 +- .../system/reflection/typeattributes.cs | 5 +- .../system/reflection/typedelegator.cs | 10 +- .../mscorlib/system/reflection/typefilter.cs | 4 +- .../mscorlib/system/reflection/typeinfo.cs | 165 +- .../mscorlib/system/resources/__hresults.cs | 6 +- .../system/resources/iresourcegroveler.cs | 2 +- .../system/resources/iresourcereader.cs | 2 +- .../system/resources/iresourcewriter.cs | 2 +- .../looselylinkedresourcereference.cs | 4 +- .../manifestbasedresourcegroveler.cs | 39 +- .../system/resources/resourcemanager.cs | 81 +- .../system/resources/resourcereader.cs | 34 +- .../system/resources/resourcetypecode.cs | 2 +- .../ultimateresourcefallbacklocation.cs | 4 +- .../mscorlib/system/rttype.cs.REMOVED.git-id | 2 +- .../system/runtime/NgenServicingAttributes.cs | 22 - .../system/runtime/ProfileOptimization.cs | 4 +- .../compilerservices/AsyncMethodBuilder.cs | 389 +- .../FormattableStringFactory.cs | 59 + .../compilerservices/IAsyncStateMachine.cs | 4 +- .../compilerservices/INotifyCompletion.cs | 4 +- .../runtime/compilerservices/TaskAwaiter.cs | 83 +- .../compilerservices/YieldAwaitable.cs | 20 +- .../disableprivatereflectionattribute.cs | 19 + .../compilerservices/issignunspecifiedbyte.cs | 4 +- .../runtime/compilerservices/jithelpers.cs | 24 - .../compilerservices/runtimehelpers.cs | 12 +- .../mscorlib/system/runtime/gcsettings.cs | 12 +- .../interopservices/ComEventsHelper.cs | 4 - .../runtime/interopservices/ComEventsInfo.cs | 4 - .../interopservices/ComEventsMethod.cs | 3 - .../runtime/interopservices/ComEventsSink.cs | 3 - .../interopservices/arraywithoffset.cs | 9 - .../runtime/interopservices/attributes.cs | 37 +- .../runtime/interopservices/criticalhandle.cs | 3 - .../interopservices/expando/iexpando.cs | 2 +- .../runtime/interopservices/iexception.cs | 12 +- .../interopservices/marshal.cs.REMOVED.git-id | 2 +- .../runtime/interopservices/pinvokemap.cs | 2 +- .../runtime/interopservices/safebuffer.cs | 2 - .../runtime/interopservices/safehandle.cs | 12 - .../windowsruntime/IClosable.cs | 3 - .../bindablevectortocollectionadapter.cs | 4 - .../bindablevectortolistadapter.cs | 11 - .../windowsruntime/clrireferenceimpl.cs | 31 +- .../windowsruntime/custompropertyimpl.cs | 56 +- .../windowsruntime/iactivationfactory.cs | 6 +- .../windowsruntime/icustomproperty.cs | 2 +- .../windowsruntime/icustompropertyprovider.cs | 32 +- .../windowsruntime/iiterable.cs | 6 +- .../windowsruntime/iiterator.cs | 6 +- .../interopservices/windowsruntime/imap.cs | 7 +- .../windowsruntime/ipropertyvalue.cs | 6 +- .../windowsruntime/ireference.cs | 6 +- .../windowsruntime/irestrictederrorinfo.cs | 5 +- .../iteratortoenumeratoradapter.cs | 1 - .../interopservices/windowsruntime/ivector.cs | 8 +- .../windowsruntime/iwinrtclassactivator.cs | 2 +- .../managedactivationfactory.cs | 7 - .../windowsruntime/nativemethods.cs | 6 +- .../windowsruntime/propertyvalue.cs | 8 +- .../windowsruntime/runtimeclass.cs | 1 - .../windowsfoundationeventhandler.cs | 3 +- .../windowsruntime/windowsruntimemarshal.cs | 16 +- .../system/runtime/memoryfailpoint.cs | 2 +- .../runtime/remoting/activationservices.cs | 2 - .../system/runtime/remoting/callcontext.cs | 12 +- .../runtime/remoting/channelservices.cs | 6 +- .../system/runtime/remoting/configuration.cs | 34 +- .../system/runtime/remoting/identity.cs | 14 +- .../system/runtime/remoting/identityholder.cs | 31 +- .../runtime/remoting/iinternalmessage.cs | 4 +- .../system/runtime/remoting/ilease.cs | 2 +- .../system/runtime/remoting/isponsor.cs | 2 +- .../system/runtime/remoting/leasestate.cs | 2 +- .../system/runtime/remoting/objref.cs | 10 +- .../system/runtime/remoting/realproxy.cs | 2 - .../runtime/remoting/remotingconfigparser.cs | 4 +- .../system/runtime/remoting/remotingproxy.cs | 2 - .../remotingservices.cs.REMOVED.git-id | 2 +- .../serialization/formatterservices.cs | 5 +- .../serialization/objectidgenerator.cs | 6 +- .../serialization/serializationinfo.cs | 55 +- .../runtime/versioning/CompatibilitySwitch.cs | 15 +- .../versioning/NonVersionableAttribute.cs | 34 + .../runtime/versioning/binarycompatibility.cs | 111 +- .../mscorlib/system/runtimehandles.cs | 36 - .../referencesource/mscorlib/system/sbyte.cs | 1 + .../accesscontrol/acl.cs.REMOVED.git-id | 2 +- .../security/accesscontrol/objectsecurity.cs | 4 +- .../security/accesscontrol/privilege.cs | 10 +- .../system/security/accesscontrol/rules.cs | 6 +- .../accesscontrol/securitydescriptor.cs | 13 +- .../mscorlib/system/security/claims/Claim.cs | 319 +- .../system/security/claims/ClaimTypes.cs | 2 +- .../system/security/claims/ClaimValueTypes.cs | 2 +- .../system/security/claims/ClaimsIdentity.cs | 267 ++ .../system/security/claims/ClaimsPrincipal.cs | 158 + .../cryptography/HashAlgorithmName.cs | 109 + .../cryptography/RSAEncryptionPadding.cs | 130 + .../cryptography/RSAEncryptionPaddingMode.cs | 32 + .../cryptography/RSASignaturePadding.cs | 87 + .../cryptography/RSASignaturePaddingMode.cs | 32 + .../cryptography/asymmetricalgorithm.cs | 29 +- .../security/cryptography/capinative.cs | 598 ++++ .../cryptography/cryptoapitransform.cs | 2 +- .../security/cryptography/cryptoconfig.cs | 13 +- .../security/cryptography/derivebytes.cs | 5 - .../security/cryptography/hashalgorithm.cs | 7 +- .../security/cryptography/icryptotransform.cs | 4 +- .../cryptography/maskgenerationmethod.cs | 2 +- .../cryptography/randomnumbergenerator.cs | 15 +- .../cryptography/rfc2898derivebytes.cs | 75 +- .../cryptography/rngcryptoserviceprovider.cs | 14 + .../system/security/cryptography/rsa.cs | 196 +- .../cryptography/rsacryptoserviceprovider.cs | 140 + .../cryptography/symmetricalgorithm.cs | 7 +- .../system/security/cryptography/utils.cs | 52 +- .../x509certificates/x509certificate.cs | 28 +- .../security/framesecuritydescriptor.cs | 8 +- .../system/security/ievidencefactory.cs | 2 +- .../mscorlib/system/security/ipermission.cs | 2 +- .../system/security/isecurityencodable.cs | 2 +- .../security/isecuritypolicyencodable.cs | 2 +- .../mscorlib/system/security/istackwalk.cs | 2 +- .../security/permissions/fileiopermission.cs | 39 +- .../permissions/hostprotectionpermission.cs | 5 + .../permissions/ibuiltinpermission.cs | 2 +- .../permissions/iunrestrictedpermission.cs | 2 +- .../security/permissions/permissionstate.cs | 2 +- .../mscorlib/system/security/policy/hash.cs | 21 +- .../policy/iconstantmembershipcondition.cs | 2 +- .../policy/idelayevaluatedevidence.cs | 2 +- .../policy/iidentitypermissionfactory.cs | 2 +- .../security/policy/imembershipcondition.cs | 2 +- .../policy/iruntimeevidencefactory.cs | 2 +- .../system/security/principal/iidentity.cs | 2 +- .../system/security/principal/iprincipal.cs | 2 +- .../security/principal/principalpolicy.cs | 2 +- .../security/principal/tokenaccesslevels.cs | 2 +- .../principal/tokenimpersonationlevel.cs | 6 +- .../system/security/principal/win32.cs | 6 +- .../security/principal/windowsidentity.cs | 93 +- .../principal/windowsimpersonationcontext.cs | 4 +- .../security/principal/windowsprincipal.cs | 8 +- .../system/security/safesecurityhandles.cs | 57 +- .../mscorlib/system/security/securestring.cs | 24 +- .../system/security/securitycontext.cs | 8 +- .../mscorlib/system/security/securitystate.cs | 6 + .../mscorlib/system/security/securityzone.cs | 2 +- .../security/util/stringexpressionset.cs | 13 +- .../system/security/util/urlstring.cs | 138 +- .../mscorlib/system/sharedstatics.cs | 27 - .../referencesource/mscorlib/system/single.cs | 10 + .../mscorlib/system/string.cs.REMOVED.git-id | 2 +- .../mscorlib/system/stubhelpers.cs | 451 +-- .../system/supportedplatformsattribute.cs | 2 +- .../system/text/encoderreplacementfallback.cs | 6 - .../mscorlib/system/text/encoding.cs | 99 +- .../mscorlib/system/text/encodingprovider.cs | 138 + .../mscorlib/system/text/normalization.cs | 6 +- .../mscorlib/system/text/stringbuilder.cs | 100 +- .../mscorlib/system/threadattributes.cs | 3 - .../system/threading/CancellationToken.cs | 21 - .../threading/CancellationTokenSource.cs | 96 +- .../threading/Tasks/AsyncCausalityTracer.cs | 213 +- .../mscorlib/system/threading/Tasks/Future.cs | 15 +- .../Tasks/FutureFactory.cs.REMOVED.git-id | 2 +- .../Tasks/Parallel.cs.REMOVED.git-id | 2 +- .../system/threading/Tasks/TPLETWProvider.cs | 296 +- .../threading/Tasks/Task.cs.REMOVED.git-id | 2 +- .../threading/Tasks/TaskCompletionSource.cs | 4 +- .../threading/Tasks/TaskContinuation.cs | 80 +- .../threading/Tasks/TaskExceptionHolder.cs | 2 + .../Tasks/TaskFactory.cs.REMOVED.git-id | 2 +- .../system/threading/Tasks/TaskScheduler.cs | 7 +- .../system/threading/apartmentstate.cs | 2 +- .../mscorlib/system/threading/asynclocal.cs | 118 + .../system/threading/eventresetmode.cs | 2 +- .../system/threading/executioncontext.cs | 498 ++- .../mscorlib/system/threading/interlocked.cs | 23 - .../mscorlib/system/threading/monitor.cs | 12 - .../mscorlib/system/threading/mutex.cs | 115 +- .../threading/parameterizedthreadstart.cs | 2 +- .../system/threading/sendorpostcallback.cs | 2 +- .../threading/synchronizationcontext.cs | 112 +- .../mscorlib/system/threading/thread.cs | 99 +- .../mscorlib/system/threading/threadpool.cs | 28 +- .../system/threading/threadpriority.cs | 2 +- .../mscorlib/system/threading/threadstart.cs | 2 +- .../mscorlib/system/threading/threadstate.cs | 2 +- .../mscorlib/system/threading/timer.cs | 15 +- .../mscorlib/system/threading/volatile.cs | 84 - .../mscorlib/system/threading/waithandle.cs | 8 - .../system/threading/waithandleExtensions.cs | 47 + .../mscorlib/system/throwhelper.cs | 38 +- .../mscorlib/system/timespan.cs | 30 - .../system/timezoneinfo.cs.REMOVED.git-id | 2 +- .../referencesource/mscorlib/system/type.cs | 70 +- .../mscorlib/system/typedreference.cs | 3 +- .../referencesource/mscorlib/system/uint16.cs | 1 + .../referencesource/mscorlib/system/uint32.cs | 19 +- .../referencesource/mscorlib/system/uint64.cs | 1 + .../mscorlib/system/uintptr.cs | 21 +- .../mscorlib/system/version.cs | 60 +- .../mscorlib/system/weakreferenceoft.cs | 10 - ikvm-native/Makefile.am | 4 +- ikvm-native/Makefile.in | 10 +- libgc/alloc.c | 10 +- libgc/depcomp | 837 +++-- libgc/finalize.c | 30 +- libgc/include/gc.h | 44 +- libgc/include/private/gc_priv.h | 2 + libgc/include/private/pthread_support.h | 30 +- libgc/misc.c | 2 +- libgc/missing | 457 +-- libgc/pthread_support.c | 50 +- libgc/solaris_threads.c | 9 +- libgc/win32_threads.c | 16 + m4/Makefile.in | 6 +- man/Makefile.in | 6 +- man/al.1 | 2 +- man/mono.1 | 173 +- man/signcode.1 | 4 +- mcs/Makefile | 16 +- mcs/build/Makefile | 2 +- mcs/build/common/Consts.cs | 14 +- mcs/build/common/Consts.cs.in | 12 +- mcs/build/config-default.make | 2 +- mcs/build/executable.make | 2 +- mcs/build/library.make | 5 +- .../profiles/{net_4_5.make => net_4_x.make} | 2 +- mcs/build/profiles/xbuild_12.make | 4 +- mcs/build/profiles/xbuild_14.make | 4 +- mcs/class/Facades/Makefile | 27 +- .../AssemblyInfo.cs | 41 + .../Microsoft.Win32.Primitives/Makefile | 23 + .../Microsoft.Win32.Primitives.dll.sources | 3 + .../TypeForwarders.cs} | 21 +- .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...t.Win32.Registry.AccessControl.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../Microsoft.Win32.Registry/AssemblyInfo.cs | 41 + .../Facades/Microsoft.Win32.Registry/Makefile | 23 + .../Microsoft.Win32.Registry.dll.sources | 3 + .../TypeForwarders.cs | 35 + .../Facades/System.AppContext/AssemblyInfo.cs | 41 + mcs/class/Facades/System.AppContext/Makefile | 23 + .../System.AppContext.dll.sources | 3 + .../System.AppContext/TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../System.Collections.NonGeneric/Makefile | 23 + .../System.Collections.NonGeneric.dll.sources | 3 + .../TypeForwarders.cs | 35 + .../AssemblyInfo.cs | 41 + .../System.Collections.Specialized/Makefile | 23 + ...System.Collections.Specialized.dll.sources | 3 + .../TypeForwarders.cs | 34 + .../System.Collections/TypeForwarders.cs | 1 + .../TypeForwarders.cs | 16 + .../TypeForwarders.cs | 7 + .../AssemblyInfo.cs | 41 + .../System.ComponentModel.Primitives/Makefile | 23 + ...stem.ComponentModel.Primitives.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...m.ComponentModel.TypeConverter.dll.sources | 3 + .../TypeForwarders.cs | 54 + .../System.Console/AssemblyInfo.cs} | 56 +- mcs/class/Facades/System.Console/Makefile | 23 + .../System.Console/System.Console.dll.sources | 3 + .../Facades/System.Console/TypeForwarders.cs | 29 + .../System.Data.Common/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Data.Common/Makefile | 23 + .../System.Data.Common.dll.sources | 3 + .../System.Data.Common/TypeForwarders.cs | 43 + .../System.Data.SqlClient/AssemblyInfo.cs | 41 + .../Facades/System.Data.SqlClient/Makefile | 23 + .../System.Data.SqlClient.dll.sources | 3 + .../System.Data.SqlClient/TypeForwarders.cs | 65 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...em.Diagnostics.FileVersionInfo.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...Diagnostics.PerformanceCounter.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../AssemblyInfo.cs | 41 + .../System.Diagnostics.Process/Makefile | 23 + .../System.Diagnostics.Process.dll.sources | 3 + .../TypeForwarders.cs | 37 + .../AssemblyInfo.cs | 41 + .../System.Diagnostics.StackTrace/Makefile | 23 + .../System.Diagnostics.StackTrace.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...ostics.TextWriterTraceListener.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../System.Diagnostics.TraceEvent/Makefile | 23 + .../System.Diagnostics.TraceEvent.dll.sources | 3 + .../TypeForwarders.cs | 34 + .../AssemblyInfo.cs | 41 + .../System.Diagnostics.TraceSource/Makefile | 23 + ...System.Diagnostics.TraceSource.dll.sources | 3 + .../TypeForwarders.cs | 41 + .../AssemblyInfo.cs | 41 + .../System.Globalization.Calendars/Makefile | 23 + ...System.Globalization.Calendars.dll.sources | 3 + .../TypeForwarders.cs | 40 + .../AssemblyInfo.cs | 41 + .../System.Globalization.Extensions/Makefile | 23 + ...ystem.Globalization.Extensions.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../System.IO.Compression.ZipFile/Makefile | 23 + .../System.IO.Compression.ZipFile.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...em.IO.FileSystem.AccessControl.dll.sources | 3 + .../TypeForwarders.cs | 31 + .../AssemblyInfo.cs | 41 + .../System.IO.FileSystem.DriveInfo/Makefile | 23 + ...System.IO.FileSystem.DriveInfo.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../AssemblyInfo.cs | 41 + .../System.IO.FileSystem.Primitives/Makefile | 23 + ...ystem.IO.FileSystem.Primitives.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../AssemblyInfo.cs | 41 + .../System.IO.FileSystem.Watcher/Makefile | 23 + .../System.IO.FileSystem.Watcher.dll.sources | 3 + .../TypeForwarders.cs | 33 + .../System.IO.FileSystem/AssemblyInfo.cs | 41 + .../Facades/System.IO.FileSystem/Makefile | 23 + .../System.IO.FileSystem.dll.sources | 3 + .../System.IO.FileSystem/TypeForwarders.cs | 33 + .../System.IO.IsolatedStorage/AssemblyInfo.cs | 41 + .../System.IO.IsolatedStorage/Makefile | 23 + .../System.IO.IsolatedStorage.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../AssemblyInfo.cs | 41 + .../System.IO.MemoryMappedFiles/Makefile | 23 + .../System.IO.MemoryMappedFiles.dll.sources | 3 + .../TypeForwarders.cs | 32 + .../Facades/System.IO.Pipes/AssemblyInfo.cs | 41 + mcs/class/Facades/System.IO.Pipes/Makefile | 23 + .../System.IO.Pipes.dll.sources | 3 + .../Facades/System.IO.Pipes/TypeForwarders.cs | 33 + .../AssemblyInfo.cs | 41 + .../System.IO.UnmanagedMemoryStream/Makefile | 23 + ...ystem.IO.UnmanagedMemoryStream.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../System.Linq.Expressions/TypeForwarders.cs | 2 + .../AssemblyInfo.cs | 41 + .../System.Net.AuthenticationManager/Makefile | 23 + ...stem.Net.AuthenticationManager.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../Facades/System.Net.Cache/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Net.Cache/Makefile | 23 + .../System.Net.Cache.dll.sources | 3 + .../System.Net.Cache/TypeForwarders.cs | 29 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...tem.Net.Http.WebRequestHandler.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../System.Net.HttpListener/AssemblyInfo.cs | 41 + .../Facades/System.Net.HttpListener/Makefile | 23 + .../System.Net.HttpListener.dll.sources | 3 + .../System.Net.HttpListener/TypeForwarders.cs | 33 + .../Facades/System.Net.Mail/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Net.Mail/Makefile | 23 + .../System.Net.Mail.dll.sources | 3 + .../Facades/System.Net.Mail/TypeForwarders.cs | 49 + .../System.Net.NameResolution/AssemblyInfo.cs | 41 + .../System.Net.NameResolution/Makefile | 23 + .../System.Net.NameResolution.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../TypeForwarders.cs | 31 + .../System.Net.Primitives/TypeForwarders.cs | 17 + .../System.Net.Security/AssemblyInfo.cs | 41 + .../Facades/System.Net.Security/Makefile | 23 + .../System.Net.Security.dll.sources | 3 + .../System.Net.Security/TypeForwarders.cs | 33 + .../System.Net.ServicePoint/AssemblyInfo.cs | 41 + .../Facades/System.Net.ServicePoint/Makefile | 23 + .../System.Net.ServicePoint.dll.sources | 3 + .../System.Net.ServicePoint/TypeForwarders.cs | 28 + .../System.Net.Sockets/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Net.Sockets/Makefile | 23 + .../System.Net.Sockets.dll.sources | 3 + .../System.Net.Sockets/TypeForwarders.cs | 49 + .../System.Net.Utilities/AssemblyInfo.cs | 41 + .../Facades/System.Net.Utilities/Makefile | 23 + .../System.Net.Utilities.dll.sources | 3 + .../System.Net.Utilities/TypeForwarders.cs | 29 + .../AssemblyInfo.cs | 41 + .../System.Net.WebHeaderCollection/Makefile | 23 + ...System.Net.WebHeaderCollection.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../AssemblyInfo.cs | 41 + .../System.Net.WebSockets.Client/Makefile | 23 + .../System.Net.WebSockets.Client.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../System.Net.WebSockets/AssemblyInfo.cs | 41 + .../Facades/System.Net.WebSockets/Makefile | 23 + .../System.Net.WebSockets.dll.sources | 3 + .../System.Net.WebSockets/TypeForwarders.cs | 31 + .../System.ObjectModel/TypeForwarders.cs | 3 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...rivate.CoreLib.InteropServices.dll.sources | 3 + .../TypeForwarders.cs | 34 + .../AssemblyInfo.cs | 41 + .../System.Private.CoreLib.Threading/Makefile | 23 + ...stem.Private.CoreLib.Threading.dll.sources | 3 + .../TypeForwarders.cs | 40 + .../AssemblyInfo.cs | 41 + .../System.Reflection.TypeExtensions/Makefile | 23 + ...stem.Reflection.TypeExtensions.dll.sources | 3 + .../TypeForwarders.cs | 29 + .../AssemblyInfo.cs | 41 + .../System.Resources.ReaderWriter/Makefile | 23 + .../System.Resources.ReaderWriter.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...ntime.CompilerServices.VisualC.dll.sources | 3 + .../TypeForwarders.cs | 39 + .../TypeForwarders.cs | 1 + .../System.Runtime.Handles/AssemblyInfo.cs | 41 + .../Facades/System.Runtime.Handles/Makefile | 23 + .../System.Runtime.Handles.dll.sources | 3 + .../System.Runtime.Handles/TypeForwarders.cs | 27 + .../TypeForwarders.cs | 1 + .../Facades/System.Runtime/TypeForwarders.cs | 19 + .../AssemblyInfo.cs | 41 + .../System.Security.AccessControl/Makefile | 23 + .../System.Security.AccessControl.dll.sources | 3 + .../TypeForwarders.cs | 68 + .../System.Security.Claims/AssemblyInfo.cs | 41 + .../Facades/System.Security.Claims/Makefile | 23 + .../System.Security.Claims.dll.sources | 3 + .../System.Security.Claims/TypeForwarders.cs | 31 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...urity.Cryptography.DeriveBytes.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...Security.Cryptography.Encoding.dll.sources | 3 + .../TypeForwarders.cs | 29 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...ty.Cryptography.Encryption.Aes.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...phy.Encryption.ECDiffieHellman.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../AssemblyInfo.cs} | 58 +- .../Makefile | 23 + ....Cryptography.Encryption.ECDsa.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...curity.Cryptography.Encryption.dll.sources | 3 + .../TypeForwarders.cs | 33 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...ryptography.Hashing.Algorithms.dll.sources | 3 + .../TypeForwarders.cs | 33 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ....Security.Cryptography.Hashing.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...ity.Cryptography.ProtectedData.dll.sources | 3 + .../TypeForwarders.cs | 26 + .../AssemblyInfo.cs | 41 + .../System.Security.Cryptography.RSA/Makefile | 23 + ...stem.Security.Cryptography.RSA.dll.sources | 3 + .../TypeForwarders.cs | 32 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...tography.RandomNumberGenerator.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ....Cryptography.X509Certificates.dll.sources | 3 + .../TypeForwarders.cs | 60 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...tem.Security.Principal.Windows.dll.sources | 3 + .../TypeForwarders.cs | 35 + .../AssemblyInfo.cs | 41 + .../System.Security.SecureString/Makefile | 23 + .../System.Security.SecureString.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../AssemblyInfo.cs | 41 + .../System.ServiceModel.Duplex/Makefile | 23 + .../System.ServiceModel.Duplex.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../AssemblyInfo.cs | 41 + .../System.ServiceModel.NetTcp/Makefile | 23 + .../System.ServiceModel.NetTcp.dll.sources | 3 + .../TypeForwarders.cs | 34 + .../AssemblyInfo.cs | 41 + .../Makefile | 23 + ...rviceProcess.ServiceController.dll.sources | 3 + .../TypeForwarders.cs | 29 + .../TypeForwarders.cs | 3 + .../System.Text.Encoding/TypeForwarders.cs | 9 + .../AssemblyInfo.cs | 41 + .../System.Threading.AccessControl/Makefile | 23 + ...System.Threading.AccessControl.dll.sources | 3 + .../TypeForwarders.cs | 36 + .../AssemblyInfo.cs | 41 + .../System.Threading.Overlapped/Makefile | 23 + .../System.Threading.Overlapped.dll.sources | 3 + .../TypeForwarders.cs | 27 + .../System.Threading.Thread/AssemblyInfo.cs | 41 + .../Facades/System.Threading.Thread/Makefile | 23 + .../System.Threading.Thread.dll.sources | 3 + .../System.Threading.Thread/TypeForwarders.cs | 30 + .../AssemblyInfo.cs | 41 + .../System.Threading.ThreadPool/Makefile | 23 + .../System.Threading.ThreadPool.dll.sources | 3 + .../TypeForwarders.cs | 28 + .../System.Threading/TypeForwarders.cs | 4 + .../System.Xml.ReaderWriter/TypeForwarders.cs | 3 + .../AssemblyInfo.cs | 41 + .../System.Xml.XPath.XDocument/Makefile | 23 + .../System.Xml.XPath.XDocument.dll.sources | 3 + .../TypeForwarders.cs | 25 + .../Facades/System.Xml.XPath/AssemblyInfo.cs | 41 + mcs/class/Facades/System.Xml.XPath/Makefile | 23 + .../System.Xml.XPath.dll.sources | 3 + .../System.Xml.XPath/TypeForwarders.cs | 38 + .../System.Xml.XmlDocument/AssemblyInfo.cs | 41 + .../Facades/System.Xml.XmlDocument/Makefile | 23 + .../System.Xml.XmlDocument.dll.sources | 3 + .../System.Xml.XmlDocument/TypeForwarders.cs | 45 + .../System.Xml.Xsl.Primitives/AssemblyInfo.cs | 41 + .../System.Xml.Xsl.Primitives/Makefile | 23 + .../System.Xml.Xsl.Primitives.dll.sources | 3 + .../TypeForwarders.cs} | 23 +- mcs/class/Facades/subdirs.make | 45 + mcs/class/I18N/CJK/CP51932.cs | 38 +- mcs/class/I18N/tools/ucm2cp.c | 2 - mcs/class/Makefile | 44 +- mcs/class/Microsoft.Build.Engine/Makefile | 12 +- .../Microsoft.Build.BuildEngine/Engine.cs | 5 +- .../Microsoft.Build.BuildEngine/Expression.cs | 14 +- .../MemberInvocationReference.cs | 16 +- .../Microsoft.Build.BuildEngine/Consts.cs | 6 +- .../ProjectTest.cs | 67 +- .../Microsoft.Build.BuildEngine/TargetTest.cs | 2 - .../Test/various/Properties.cs | 10 + .../Microsoft.Build.Tasks.dll.sources | 1 + .../AssignProjectConfiguration.cs | 7 +- .../ResolveAssemblyReference.cs | 7 + .../Microsoft.Build.Tasks/XmlPeek.cs | 371 ++ .../CodeTaskFactoryTest.cs | 6 +- .../Test/Microsoft.Build.Tasks/CscTest.cs | 14 - .../TargetDotNetFrameworkVersion.cs | 5 +- .../ToolLocationHelper.cs | 50 +- .../ToolLocationHelperTest.cs | 3 +- mcs/class/Mono.C5/Makefile | 2 + mcs/class/Mono.CSharp/Makefile | 8 +- .../Test/Evaluator/ExpressionsTest.cs | 20 + .../monotouch_tv_Mono.CSharp.dll.sources | 2 + mcs/class/Mono.Cairo/Mono.Cairo/Context.cs | 4 +- .../Mono.Data.Sqlite_2.0/SQLite3.cs | 18 + .../Mono.Data.Sqlite_2.0/SQLite3_UTF16.cs | 6 + .../Mono.Data.Sqlite_2.0/SQLiteBase.cs | 9 +- .../UnsafeNativeMethods.cs | 14 + .../Test/SqliteConnectionTest.cs | 20 + mcs/class/Mono.Debugger.Soft/Makefile | 2 +- .../Mono.Debugger.Soft/Connection.cs | 5 +- .../Mono.Debugger.Soft/ObjectMirror.cs | 3 + .../Mono.Debugger.Soft/Test/dtest-app.cs | 11 + .../Test/dtest.cs.REMOVED.git-id | 2 +- mcs/class/Mono.Dynamic.Interpreter/Makefile | 2 - .../CollectionStressTestHelper.cs | 2 - .../ConcurrentSkipListTests.cs | 2 - .../Test/Mono.Threading/ParallelTestHelper.cs | 2 - .../Test/Mono.Threading/SnziTests.cs | 2 - .../Mono.Posix/Mono.Posix_test.dll.sources | 1 + .../NativeConvert.generated.cs | 242 +- .../Mono.Posix/Mono.Unix.Native/Stdlib.cs | 36 + .../Syscall.cs.REMOVED.git-id | 2 +- mcs/class/Mono.Posix/Mono.Unix/UnixClient.cs | 2 +- mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs | 11 +- .../Test/Mono.Unix.Native/SocketTest.cs | 223 ++ .../Test/Mono.Unix/UnixSignalTest.cs | 3 + .../Mono.Security.Providers.DotNet/Makefile | 14 + ...Mono.Security.Providers.DotNet.dll.sources | 6 + .../DotNetSslStreamImpl.cs | 317 ++ .../DotNetTlsProvider.cs | 118 + .../Properties/AssemblyInfo.cs | 46 + .../Mono.Security.Providers.DotNet/README.md | 1 + .../Makefile | 21 + ...rity.Providers.NewSystemSource.dll.sources | 33 + .../Properties/AssemblyInfo.cs | 48 + .../README.md | 95 + .../Mono.Security.Providers.NewTls/Makefile | 12 + ...Mono.Security.Providers.NewTls.dll.sources | 13 + .../ITlsConfiguration.cs | 47 + .../ITlsContext.cs} | 67 +- .../MonoNewTlsStream.cs | 93 + .../MonoNewTlsStreamFactory.cs | 91 + .../NewTlsProvider.cs | 95 + .../TlsContextWrapper.cs | 221 ++ .../TlsProviderFactory.cs | 97 + .../Properties/AssemblyInfo.cs | 47 + ...Mono.Security.Providers.NewTls.dll.sources | 7 + ...Mono.Security.Providers.NewTls.dll.sources | 1 + .../Mono.Security.Providers.OldTls/Makefile | 12 + ...Mono.Security.Providers.OldTls.dll.sources | 73 + .../OldTlsProvider.cs | 87 + .../Properties/AssemblyInfo.cs | 46 + .../Mono.Security/Assembly/AssemblyInfo.cs | 9 +- mcs/class/Mono.Security/Makefile | 9 +- .../AuthenticodeFormatter.cs | 2 +- .../Mono.Security.Cryptography/CryptoTools.cs | 4 + .../Mono.Security.Interface/Alert.cs | 277 ++ .../BufferOffsetSize.cs | 96 + .../CertificateValidationHelper.cs | 161 + .../CipherAlgorithmType.cs} | 27 +- .../CipherSuiteCode.cs | 398 +++ .../ExchangeAlgorithmType.cs | 38 + .../HashAlgorithmType.cs | 44 + .../IBufferOffsetSize.cs | 43 + .../Mono.Security.Interface/IMonoSslStream.cs | 195 + .../IMonoTlsContext.cs | 71 + .../IMonoTlsEventSink.cs} | 26 +- .../MonoTlsConnectionInfo.cs} | 51 +- .../MonoTlsProvider.cs | 174 + .../MonoTlsProviderFactory.cs | 113 + .../MonoTlsSettings.cs | 170 + .../Mono.Security.Interface/README.md | 1 + .../SecretParameters.cs} | 54 +- .../Mono.Security.Interface/SecureBuffer.cs} | 73 +- .../Mono.Security.Interface/TlsBuffer.cs | 334 ++ .../Mono.Security.Interface/TlsException.cs | 84 + .../Mono.Security.Interface/TlsMultiBuffer.cs | 119 + .../TlsProtocolCode.cs} | 26 +- .../Mono.Security.Interface/TlsProtocols.cs | 49 + .../ChallengeResponse.cs | 7 +- .../ChallengeResponse2.cs | 7 +- .../MessageBase.cs | 7 +- .../NtlmAuthLevel.cs | 7 +- .../Mono.Security.Protocol.Ntlm/NtlmFlags.cs | 7 +- .../NtlmSettings.cs | 43 +- .../Type1Message.cs | 7 +- .../Type2Message.cs | 7 +- .../Type3Message.cs | 13 +- .../TlsClientCertificate.cs | 2 + .../TlsServerCertificate.cs | 2 + .../TlsClientCertificate.cs | 4 + .../HttpsClientStream.cs | 1 + .../RecordProtocol.cs | 2 +- .../ServerContext.cs | 34 +- .../ServerRecordProtocol.cs | 4 +- .../SslClientStream.cs | 31 +- .../SslServerStream.cs | 1 + .../SslStreamBase.cs | 11 +- .../Mono.Security.X509/PKCS12.cs | 7 +- .../Mono.Security/Mono.Security.dll.sources | 24 + .../mobile_Mono.Security.dll.sources | 129 + .../mobile_static_Mono.Security.dll.sources | 5 + .../monodroid_Mono.Security.dll.sources | 5 + .../monotouch_Mono.Security.dll.sources | 133 +- .../monotouch_tv_Mono.Security.dll.sources | 1 + .../xammac_Mono.Security.dll.sources | 3 +- mcs/class/Mono.Simd/Makefile | 9 - mcs/class/RabbitMQ.Client/src/client/Makefile | 5 + .../net_2_0_RabbitMQ.Client.dll.sources | 4 - .../net_4_0_RabbitMQ.Client.dll.sources | 4 - .../net_4_5_RabbitMQ.Client.dll.sources | 4 - .../Makefile | 8 - .../DataAnnotationsResources.cs | 96 +- ...ComponentModel.DataAnnotations.dll.sources | 1 + .../AssociationAttributeTest.cs | 2 - .../DisplayAttributeTest.cs | 4 +- .../EnumDataTypeAttributeTest.cs | 2 - .../FilterUIHintAttributeTest.cs | 2 - .../RangeAttributeTest.cs | 45 - .../RegularExpressionAttributeTest.cs | 10 +- .../RequiredAttributeTest.cs | 4 - .../StringLengthAttributeTest.cs | 14 - .../UIHintAttributeTest.cs | 2 - .../ValidationAttributeTest.cs | 146 +- .../ValidationContextTest.cs | 2 - .../ValidationResultTest.cs | 2 - .../ValidatorTest.cs | 2 - .../System.Configuration/Configuration.cs | 8 +- .../ConfigurationManagerTest.cs | 18 + .../ConfigurationPermissionTest.cs | 12 - .../Test/Util/TestUtil.cs | 12 - mcs/class/System.Core/Makefile | 3 - mcs/class/System.Core/ReferenceSources/SR.cs | 2 + .../MemoryMappedFileTest.cs | 2 - .../System.Linq.Expressions/ExpressionTest.cs | 42 - .../ExpressionTest_AddChecked.cs | 6 - .../ExpressionTest_AndAlso.cs | 7 - .../ExpressionTest_Call.cs | 16 - .../ExpressionTest_Convert.cs | 6 - .../ExpressionTest_Equal.cs | 12 - .../ExpressionTest_Lambda.cs | 14 - .../ExpressionTest_Negate.cs | 4 + .../ExpressionTest_OrElse.cs | 30 - .../ExpressionTest_Quote.cs | 11 - .../ExpressionTest_SubtractChecked.cs | 9 - .../ExpressionTest_TypeIs.cs | 9 - .../Test/System.Linq/EnumerableFixture.cs | 2 - .../System.Linq/ParallelEnumerableTests.cs | 2 - .../Test/System.Linq/ParallelTestHelper.cs | 2 - .../DynamicAttributeTest.cs | 2 - .../TaskExtensionsTests.cs | 2 - .../ReaderWriterLockSlimTest.cs | 4 - .../System.Core/basic_System.Core.dll.sources | 2 +- .../System.Core/build_System.Core.dll.sources | 2 +- .../common_System.Core.dll.sources | 4 + .../dynamic_System.Core.dll.sources | 1 - .../interpreter_System.Core.dll.sources | 1 - .../monotouch_tv_System.Core.dll.sources | 2 + ...notouch_tv_runtime_System.Core.dll.sources | 1 + ...ouch_watch_runtime_System.Core.dll.sources | 1 + ...ources => net_4_x_System.Core.dll.sources} | 2 + .../xammac_net_4_5_System.Core.dll.sources | 2 +- mcs/class/System.Data.Linq/Makefile | 9 - .../Client/AssemblyAttributes.cs | 54 - .../System.Data.Services.Client.dll.sources | 1 + ...le_System.Data.Services.Client.dll.sources | 1 - ...ic_System.Data.Services.Client.dll.sources | 1 - ...id_System.Data.Services.Client.dll.sources | 1 - ...ch_System.Data.Services.Client.dll.sources | 1 - ...ch_System.Data.Services.Client.dll.sources | 1 - ..._0_System.Data.Services.Client.dll.sources | 3 - ..._0_System.Data.Services.Client.dll.sources | 5 - ..._5_System.Data.Services.Client.dll.sources | 1 - ...ac_System.Data.Services.Client.dll.sources | 1 - ..._5_System.Data.Services.Client.dll.sources | 1 - .../System.Data.Services.dll.sources | 51 + .../DataServiceProviderMethodsTest.cs | 2 - .../ResourceTypeTest.cs | 2 - .../net_4_0_System.Data.Services.dll.sources | 52 - .../net_4_5_System.Data.Services.dll.sources | 1 - mcs/class/System.Data/Makefile | 5 +- .../SqlDataRecord.cs | 166 + mcs/class/System.Data/ReferenceSources/Res.cs | 1243 +++++++ .../ReferenceSources/Res.cs.REMOVED.git-id | 1 - .../System.Data.SqlClient/SqlDataReader.cs | 3 +- .../DataTableTest.cs.REMOVED.git-id | 2 +- .../Test/System.Data/DataViewTest.cs | 1 + ...net_4_5.config => app_test_net_4_x.config} | 0 .../mobile_System.Data.dll.sources | 2 + .../monotouch_tv_System.Data.dll.sources | 1 + ...ources => net_4_x_System.Data.dll.sources} | 3 +- mcs/class/System.Data/referencesource.sources | 3 + .../xammac_net_4_5_System.Data.dll.sources | 2 +- .../ActiveDirectoryObjectNotFoundException.cs | 82 + .../System.DirectoryServices.dll.sources | 1 + .../DirectoryEntry.cs | 20 + mcs/class/System.Drawing/Makefile | 2 +- .../PrintingServicesUnix.cs | 4 +- .../System.Drawing/System.Drawing/Color.cs | 2 + .../System.Drawing/ColorTranslator.cs | 13 +- .../System.Drawing/KnownColors.cs | 2 + .../System.Drawing/System.Drawing/Point.cs | 4 +- .../System.Drawing/Rectangle.cs | 2 + .../System.Drawing/System.Drawing/Size.cs | 2 + .../System.Drawing/System.Drawing/SizeF.cs | 2 + .../Test/System.Drawing/ColorTranslator.cs | 2 + .../Test/System.Drawing/TestPoint.cs | 9 + .../Test/System.IO.Compression/ZipTest.cs | 11 + mcs/class/System.IO.Compression/ZipArchive.cs | 6 +- .../System.IdentityModel.Selectors/Makefile | 8 - mcs/class/System.IdentityModel/Makefile | 8 - mcs/class/System.Json.Microsoft/Makefile | 6 +- mcs/class/System.Json/Makefile | 9 - mcs/class/System.Json/System.Json.dll.sources | 2 +- .../System.Json}/JavaScriptReader.cs | 0 .../HttpContentHeaders.cs | 5 +- .../System.Net.Http.Headers/HttpHeaders.cs | 2 +- .../System.Net.Http/HttpClient.cs | 4 +- .../System.Net.Http/HttpResponseMessage.cs | 2 +- .../Test/System.Net.Http/HttpClientTest.cs | 4 +- .../Test/System.Net.Http/StreamContentTest.cs | 10 + .../Assembly/AssemblyInfo.cs} | 59 +- mcs/class/System.Numerics.Vectors/Makefile | 11 + .../System.Numerics.Vectors.dll.sources} | 2 +- mcs/class/System.Reactive.Core/Makefile | 8 +- mcs/class/System.Reactive.Debugger/Makefile | 8 +- .../System.Reactive.Experimental/Makefile | 8 +- mcs/class/System.Reactive.Interfaces/Makefile | 8 +- mcs/class/System.Reactive.Linq/Makefile | 8 +- .../Makefile | 8 +- .../System.Reactive.PlatformServices/Makefile | 8 +- mcs/class/System.Reactive.Providers/Makefile | 8 +- .../System.Reactive.Runtime.Remoting/Makefile | 8 +- .../System.Reactive.Windows.Forms/Makefile | 8 +- .../Makefile | 8 +- .../ReferenceSources/CacheEntryCollection.cs | 16 +- .../System.Runtime.Caching/MemoryCacheTest.cs | 13 +- .../Test/HttpServerChannelTests.cs | 2 +- .../Test/IpcChannelTest.cs | 1 + .../System.Runtime.Serialization/Makefile | 4 + ...tem.Runtime.Serialization_test.dll.sources | 3 + .../ChangeLog | 0 .../DataContractJsonSerializerTest.cs | 87 +- .../JsonReaderTest.cs | 0 .../JsonWriterTest.cs | 0 .../Bug36100.cs.REMOVED.git-id | 2 +- .../DataContractResolverTest.cs | 2 - .../XsdDataContractImporterTest2.cs | 2 - ...v_System.Runtime.Serialization.dll.sources | 1 + ..._System.Runtime.Serialization.dll.sources} | 0 ...5_System.Runtime.Serialization.dll.sources | 2 +- mcs/class/System.Security/Makefile | 4 +- .../SignedXml.cs | 6 + .../System.ServiceModel.Internals/Makefile | 6 +- .../MobileStubs.cs | 146 + ..._System.ServiceModel.Internals.dll.sources | 78 + ..._System.ServiceModel.Internals.dll.sources | 1 + ..._System.ServiceModel.Internals.dll.sources | 1 + ..._System.ServiceModel.Internals.dll.sources | 1 + ..._System.ServiceModel.Internals.dll.sources | 1 + mcs/class/System.ServiceModel.Web/Makefile | 3 +- .../ChangeLog | 338 -- .../DataContractJsonSerializer.cs | 293 -- .../IXmlJsonReaderInitializer.cs | 43 - .../IXmlJsonWriterInitializer.cs | 41 - .../JavaScriptObjectDeserializer.cs | 0 .../JsonReader.cs | 1099 ------ .../JsonReaderWriterFactory.cs | 79 - .../JsonSerializationReader.cs | 421 --- .../JsonSerializationWriter.cs | 210 -- .../JsonWriter.cs | 552 --- .../TypeMap.cs | 374 -- .../System.ServiceModel.Web.dll.sources | 58 +- .../WebOperationContext.cs | 2 +- .../System.ServiceModel.Web_test.dll.sources | 3 - .../System.ServiceModel/WebHttpBinding.cs | 2 +- .../WebHttpBehaviorTest.cs | 2 - .../WebHttpEndpointTest.cs | 2 +- .../WebOperationContextTest.cs | 4 +- .../System.ServiceModel/WebHttpBindingTest.cs | 10 + ...common_System.ServiceModel.Web.dll.sources | 47 - ...uch_tv_System.ServiceModel.Web.dll.sources | 1 + ...et_2_0_System.ServiceModel.Web.dll.sources | 53 - ...et_4_0_System.ServiceModel.Web.dll.sources | 1 - ...et_4_5_System.ServiceModel.Web.dll.sources | 1 - .../Assembly/AssemblyInfo.cs | 2 +- .../SynchronizedCollection.cs | 13 +- .../HttpListenerManager.cs | 30 +- .../HttpReplyChannel.cs | 13 +- .../TcpReplyChannel.cs | 9 + .../ReplyChannelBase.cs | 29 +- .../ContractDescriptionGenerator.cs | 63 +- .../ChannelDispatcher.cs | 7 +- .../XmlMessagesFormatter.cs | 6 + .../System.ServiceModel.dll.sources | 61 + .../System.ServiceModel/NetTcpBinding.cs | 3 +- .../System.ServiceModel/ServiceHost.cs | 9 +- .../HttpTransportBindingElementTest.cs | 5 - .../MsmqBindingElementBaseTest.cs | 2 - .../StandardEndpointsSectionTest.cs | 2 - .../ContractDescriptionTest.cs | 77 + .../MetadataExchangeBindingsTest.cs | 14 +- .../ServiceDebugBehaviorTest.cs | 23 +- .../ServiceMetadataEndpointTest.cs | 2 - .../Bug32886Test.cs | 29 +- .../Bug652331Test.cs | 21 +- .../Bug652331_2Test.cs | 121 +- .../ChannelDispatcherTest.cs | 35 +- .../ChannelFactory_1Test.cs | 2 - .../System.ServiceModel/ClientBaseTest.cs | 83 +- .../System.ServiceModel/NetTcpBindingTest.cs | 7 + .../ServiceHostBaseTest.cs | 2 - .../System.ServiceModel/ServiceHostTest.cs | 32 +- ...notouch_tv_System.ServiceModel.dll.sources | 1 + .../net_4_0_System.ServiceModel.dll.sources | 48 - .../net_4_5_System.ServiceModel.dll.sources | 15 - .../Base/DataflowBlock.cs.REMOVED.git-id | 1 + .../Base/DataflowBlockOptions.cs | 414 +++ .../CoreFxSources/Base/DataflowLinkOptions.cs | 113 + .../Base/DataflowMessageHeader.cs | 92 + .../Base/DataflowMessageStatus.cs | 47 + .../CoreFxSources/Base/IDataflowBlock.cs | 31 + .../CoreFxSources/Base/IPropagatorBlock.cs | 22 + .../Base/IReceivableSourceBlock.cs | 31 + .../CoreFxSources/Base/ISourceBlock.cs | 39 + .../CoreFxSources/Base/ITargetBlock.cs | 24 + .../CoreFxSources/Blocks/ActionBlock.cs | 383 ++ .../CoreFxSources/Blocks/BatchBlock.cs | 1206 +++++++ .../CoreFxSources/Blocks/BatchedJoinBlock.cs | 783 ++++ .../CoreFxSources/Blocks/BroadcastBlock.cs | 1262 +++++++ .../CoreFxSources/Blocks/BufferBlock.cs | 492 +++ .../CoreFxSources/Blocks/JoinBlock.cs | 1482 ++++++++ .../CoreFxSources/Blocks/TransformBlock.cs | 427 +++ .../Blocks/TransformManyBlock.cs | 644 ++++ .../CoreFxSources/Blocks/WriteOnceBlock.cs | 568 +++ .../CoreFxSources/Internal/ActionOnDispose.cs | 142 + .../CoreFxSources/Internal/Common.cs | 694 ++++ .../Internal/EnumerableDebugView.cs | 57 + .../Internal/IDebuggerDisplay.cs | 27 + .../CoreFxSources/Internal/ImmutableList.cs | 89 + .../CoreFxSources/Internal/Padding.cs | 37 + .../Internal/ProducerConsumerQueues.cs | 558 +++ .../CoreFxSources/Internal/QueuedMap.cs | 230 ++ .../Internal/ReorderingBuffer.cs | 184 + .../CoreFxSources/Internal/SourceCore.cs | 1035 ++++++ .../CoreFxSources/Internal/SpscTargetCore.cs | 413 +++ .../CoreFxSources/Internal/TargetCore.cs | 881 +++++ .../CoreFxSources/Internal/TargetRegistry.cs | 418 +++ .../CoreFxSources/Internal/Threading.cs | 52 + .../System.Threading.Tasks.Dataflow/Makefile | 3 +- .../System.Threading.Tasks.Dataflow/README.md | 6 + .../System.Threading.Tasks.Dataflow/SR.cs | 27 + ...ystem.Threading.Tasks.Dataflow.dll.sources | 80 +- .../ActionBlock.cs | 150 - .../AsyncExecutingMessageBox.cs | 121 - .../BatchBlock.cs | 376 -- .../BatchedJoinBlock.cs | 270 -- .../BatchedJoinBlock`3.cs | 294 -- .../BroadcastBlock.cs | 146 - .../BroadcastOutgoingQueue.cs | 212 -- .../BufferBlock.cs | 132 - .../ChooserBlock.cs | 179 - .../CompletionHelper.cs | 199 -- .../DataflowBlock.cs | 311 -- .../DataflowBlockOptions.cs | 94 - .../ExecutingMessageBox.cs | 67 - .../ExecutingMessageBoxBase.cs | 163 - .../ISourceBlock.cs | 31 - .../JoinBlock.cs | 256 -- .../JoinBlock`3.cs | 292 -- .../JoinTarget.cs | 84 - .../MessageBox.cs | 332 -- .../NameHelper.cs | 44 - .../NullTargetBlock.cs | 67 - .../ObservableDataflowBlock.cs | 83 - .../OutgoingQueue.cs | 281 -- .../OutgoingQueueBase.cs | 177 - .../OutputAvailableBlock.cs | 97 - .../PassingMessageBox.cs | 54 - .../PredicateBlock.cs | 131 - .../PropagatorWrapperBlock.cs | 92 - .../ReceiveBlock.cs | 149 - .../SendBlock.cs | 188 - .../TargetCollection.cs | 523 --- .../TransformBlock.cs | 203 -- .../TransformManyBlock.cs | 223 -- .../WriteOnceBlock.cs | 150 - ....Threading.Tasks.Dataflow_test.dll.sources | 2 - .../ActionBlockTest.cs | 4 +- .../BatchBlockTest.cs | 20 +- .../BatchedJoinBlockTest.cs | 10 +- .../BatchedJoinBlock`3Test.cs | 6 +- .../BoundedCapacityTest.cs | 4 +- .../BroadcastBlockTest.cs | 10 +- .../ChooseTest.cs | 12 +- .../CompletionHelperTest.cs | 81 - .../CompletionTest.cs | 18 +- .../DataflowBlockTest.cs | 8 +- .../ExecutionBlocksTest.cs | 6 +- .../JoinBlockTest.cs | 8 +- .../JoinBlock`3Test.cs | 10 +- .../OptionsTest.cs | 8 +- .../OutputAvailableTest.cs | 14 +- .../PropagateCompletionTest.cs | 12 +- .../ReceivingTest.cs | 4 +- .../TransformBlockTest.cs | 2 +- .../TransformManyBlockTest.cs | 4 +- .../WriteOnceBlockTest.cs | 14 +- mcs/class/System.Transactions/Makefile | 4 +- mcs/class/System.Web.Abstractions/Makefile | 9 - .../System.Web.Abstractions.dll.sources | 26 +- .../System.Web/ChangeLog | 60 - .../System.Web/HttpApplicationStateBase.cs | 154 - .../System.Web/HttpApplicationStateWrapper.cs | 172 - .../System.Web/HttpBrowserCapabilitiesBase.cs | 321 -- .../HttpBrowserCapabilitiesWrapper.cs | 548 --- .../System.Web/HttpCachePolicyBase.cs | 157 - .../System.Web/HttpCachePolicyWrapper.cs | 167 - .../System.Web/HttpFileCollectionBase.cs | 99 - .../System.Web/HttpPostedFileBase.cs | 64 - .../System.Web/HttpPostedFileWrapper.cs | 76 - .../System.Web/HttpRequestBase.cs | 186 - .../System.Web/HttpResponseBase.cs | 390 -- .../System.Web/HttpServerUtilityBase.cs | 211 -- .../System.Web/HttpSessionStateBase.cs | 136 - .../System.Web/HttpSessionStateWrapper.cs | 173 - .../HttpStaticObjectsCollectionBase.cs | 90 - .../HttpStaticObjectsCollectionWrapper.cs | 102 - ...et_4_5_System.Web.Abstractions.dll.sources | 1 - ...System.Web.ApplicationServices.dll.sources | 17 + ...System.Web.ApplicationServices.dll.sources | 1 - ...System.Web.ApplicationServices.dll.sources | 23 - ...System.Web.ApplicationServices.dll.sources | 1 - mcs/class/System.Web.DynamicData/Makefile | 13 +- .../Test/Common/TestsSetup.cs | 8 +- .../Test/WebPages/web.config.2.0 | 135 - .../Test/WebPages/web.config.4.5 | 135 - .../{web.config.4.0 => web.config.4.x} | 4 +- mcs/class/System.Web.Extensions/Makefile | 4 +- .../JavaScriptSerializerTest.cs | 8 +- .../System.Web.UI.WebControls/ListViewTest.cs | 34 - .../Test/code/WebTestLocal.cs | 8 +- .../Test/resources/profile.config.2.0 | 8 - .../Test/resources/profile.config.4.5 | 8 - ...{profile.config.4.0 => profile.config.4.x} | 2 +- mcs/class/System.Web.Routing/Makefile | 13 - .../System.Web.Routing.dll.sources | 19 - .../System.Web.Routing/ChangeLog | 225 -- .../System.Web.Routing/IRouteConstraint.cs | 42 - .../System.Web.Routing/IRouteHandler.cs | 42 - .../System.Web.Routing/RequestContext.cs | 61 - .../System.Web.Routing/RouteBase.cs | 45 - .../System.Web.Routing/RouteDirection.cs | 40 - .../System.Web.Routing/RouteTable.cs | 49 - .../RouteValueDictionary.cs | 184 - .../FakeHttpWorkerRequest.cs | 4 - .../Test/System.Web.Routing/RequestContext.cs | 6 - .../System.Web.Routing/RouteCollectionTest.cs | 21 +- .../Test/System.Web.Routing/RouteTest.cs | 18 - .../Test/System.Web.Routing/TestStubTypes.cs | 2 - .../UrlRoutingModuleTest.cs | 75 - .../net_4_0_System.Web.Routing.dll.sources | 3 - .../net_4_5_System.Web.Routing.dll.sources | 1 - mcs/class/System.Web.Services/Makefile | 11 +- .../System.Web.Services_test.dll.sources | 2 +- .../SoapHttpClientProtocolTest.cs | 20 +- .../SocketResponder.cs | 118 - ...notouch_tv_System.Web.Services.dll.sources | 1 + mcs/class/System.Web/Assembly/AssemblyInfo.cs | 4 +- mcs/class/System.Web/Makefile | 2 + .../ReferenceSources/SR.cs.REMOVED.git-id | 1 + .../System.Web.Caching/IOutputCacheEntry.cs | 38 - .../AppResourcesAssemblyBuilder.cs | 2 +- .../BuildProviderAppliesTo.cs | 44 - .../BuildProviderAppliesToAttribute.cs | 50 - ...ignTimeResourceProviderFactoryAttribute.cs | 67 - .../ExpressionEditorAttribute.cs | 69 - .../ExpressionPrefixAttribute.cs | 51 - .../FolderLevelBuildProviderAppliesTo.cs | 41 - ...derLevelBuildProviderAppliesToAttribute.cs | 44 - .../IAssemblyPostProcessor.cs | 39 - .../IImplicitResourceProvider.cs | 42 - .../ImplicitResourceKey.cs | 64 - .../AdapterDictionary.cs | 52 - .../AuthenticationMode.cs | 38 - .../AuthorizationRuleAction.cs | 36 - .../CustomErrorsMode.cs | 37 - .../CustomErrorsRedirectMode.cs | 37 - .../FormsAuthPasswordFormat.cs | 38 - .../FormsProtectionEnum.cs | 37 - .../IConfigMapPath.cs | 44 - .../IConfigMapPathFactory.cs | 40 - .../IRemoteWebConfigurationHostServer.cs | 50 - .../MachineKeyCompatibilityMode.cs | 36 - .../MachineKeyValidation.cs | 44 - .../PagesEnableSessionState.cs | 40 - .../ProcessModelComAuthenticationLevel.cs | 41 - .../ProcessModelComImpersonationLevel.cs | 39 - .../ProcessModelLogLevel.cs | 37 - .../SerializationMode.cs | 40 - .../SystemWebCachingSectionGroup.cs | 63 - .../TraceDisplayMode.cs | 38 - .../WebApplicationLevel.cs | 38 - .../XhtmlConformanceMode.cs | 37 - .../System.Web.Hosting/IApplicationHost.cs | 48 - .../System.Web.Hosting/IRegisteredObject.cs | 38 - .../System.Web.Profile/ProfileEventArgs.cs | 61 - .../System.Web.Profile/ProfileEventHandler.cs | 35 - .../System.Web.Profile/ProfileGroupBase.cs | 70 - .../HttpMethodConstraint.cs | 0 .../System.Web.Routing/PatternParser.cs | 0 .../System.Web.Routing/PatternToken.cs | 0 .../System.Web.Routing/PatternTokenType.cs | 0 .../System.Web.Routing/Route.cs | 0 .../System.Web.Routing/RouteCollection.cs | 4 +- .../System.Web.Routing/RouteData.cs | 0 .../RouteValueDictionaryExtensions.cs | 0 .../System.Web.Routing/StopRoutingHandler.cs | 0 .../System.Web.Routing/UrlRoutingHandler.cs | 0 .../System.Web.Routing/UrlRoutingModule.cs | 0 .../FormsAuthentication.cs | 13 +- .../FormsAuthenticationEventArgs.cs | 67 - .../FormsAuthenticationEventHandler.cs | 35 - .../PassportAuthenticationEventArgs.cs | 77 - .../PassportAuthenticationEventHandler.cs | 37 - .../RoleManagerEventArgs.cs | 54 - .../RoleManagerEventHandler.cs | 34 - .../WindowsAuthenticationEventArgs.cs | 76 - .../WindowsAuthenticationEventHandler.cs | 36 - .../IReadOnlySessionState.cs | 36 - .../IRequiresSessionState.cs | 36 - .../SessionStateBehavior.cs | 40 - .../WmlPostFieldType.cs | 39 - .../ITrackingPersonalizable.cs | 46 - .../ITransformerConfigurationControl.cs | 40 - .../IVersioningPersonalizable.cs | 41 - .../IWebEditable.cs | 41 - .../IWebPart.cs | 44 - .../IWebPartField.cs | 44 - .../IWebPartHttpHandler.cs | 39 - .../IWebPartParameters.cs | 47 - .../IWebPartRow.cs | 44 - .../IWebPartTable.cs | 45 - .../PartChromeState.cs | 33 - .../PartChromeType.cs | 36 - .../PersonalizationScope.cs | 33 - .../WebPartAuthorizationEventHandler.cs | 34 - .../WebPartCancelEventArgs.cs | 51 - .../WebPartCancelEventHandler.cs | 34 - .../WebPartEventArgs.cs | 47 - .../WebPartEventHandler.cs | 34 - .../WebPartExportMode.cs | 34 - .../WebPartHelpMode.cs | 34 - .../WebPartVerbsEventArgs.cs | 52 - .../WebPartVerbsEventHandler.cs | 34 - .../AdCreatedEventHandler.cs | 31 - .../AuthenticateEventArgs.cs | 52 - .../AuthenticateEventHandler.cs | 34 - .../AutoCompleteType.cs | 69 - .../System.Web.UI.WebControls/BorderStyle.cs | 44 - .../BulletedListEventArgs.cs | 43 - .../BulletedListEventHandler.cs | 33 - .../ButtonColumnType.cs | 37 - .../System.Web.UI.WebControls/ButtonType.cs | 37 - .../CalendarSelectionMode.cs | 38 - .../System.Web.UI.WebControls/CheckBox.cs | 6 +- .../CommandEventArgs.cs | 55 - .../CommandEventHandler.cs | 31 - .../ContentDirection.cs | 37 - .../CreateUserErrorEventArgs.cs | 49 - .../CreateUserErrorEventHandler.cs | 35 - .../DataBoundControlMode.cs | 37 - .../DataControlCellType.cs | 36 - .../DataControlRowState.cs | 39 - .../DataControlRowType.cs | 39 - .../DataGridCommandEventArgs.cs | 50 - .../DataGridCommandEventHandler.cs | 34 - .../DataGridItemEventArgs.cs | 43 - .../DataGridItemEventHandler.cs | 33 - .../DataGridPageChangedEventArgs.cs | 49 - .../DataGridPageChangedEventHandler.cs | 33 - .../DataGridSortCommandEventArgs.cs | 51 - .../DataGridSortCommandEventHandler.cs | 33 - .../DataListCommandEventArgs.cs | 50 - .../DataListCommandEventHandler.cs | 34 - .../DataListItemEventArgs.cs | 43 - .../DataListItemEventHandler.cs | 30 - .../DayNameFormat.cs | 40 - .../DayRenderEventHandler.cs | 33 - .../DetailsViewCommandEventArgs.cs | 46 - .../DetailsViewCommandEventHandler.cs | 34 - .../DetailsViewDeleteEventHandler.cs | 35 - .../DetailsViewDeletedEventHandler.cs | 34 - .../DetailsViewInsertEventHandler.cs | 35 - .../DetailsViewInsertedEventHandler.cs | 35 - .../DetailsViewMode.cs | 37 - .../DetailsViewModeEventArgs.cs | 56 - .../DetailsViewModeEventHandler.cs | 34 - .../DetailsViewPageEventArgs.cs | 50 - .../DetailsViewPageEventHandler.cs | 34 - .../DetailsViewUpdateEventHandler.cs | 35 - .../DetailsViewUpdatedEventHandler.cs | 34 - .../FirstDayOfWeek.cs | 38 - .../System.Web.UI.WebControls/FontSize.cs | 46 - .../FormViewCommandEventHandler.cs | 35 - .../FormViewDeleteEventHandler.cs | 35 - .../FormViewDeletedEventHandler.cs | 34 - .../FormViewInsertEventHandler.cs | 35 - .../FormViewInsertedEventHandler.cs | 35 - .../System.Web.UI.WebControls/FormViewMode.cs | 37 - .../FormViewModeEventArgs.cs | 56 - .../FormViewModeEventHandler.cs | 34 - .../FormViewPageEventArgs.cs | 50 - .../FormViewPageEventHandler.cs | 35 - .../FormViewUpdateEventHandler.cs | 34 - .../FormViewUpdatedEventHandler.cs | 35 - .../System.Web.UI.WebControls/GridLines.cs | 37 - .../GridViewCancelEditEventArgs.cs | 50 - .../GridViewCancelEditEventHandler.cs | 34 - .../GridViewCommandEventArgs.cs | 59 - .../GridViewCommandEventHandler.cs | 34 - .../GridViewDeleteEventHandler.cs | 35 - .../GridViewDeletedEventHandler.cs | 35 - .../GridViewEditEventArgs.cs | 48 - .../GridViewEditEventHandler.cs | 35 - .../GridViewPageEventArgs.cs | 48 - .../GridViewPageEventHandler.cs | 35 - .../GridViewRowEventArgs.cs | 47 - .../GridViewRowEventHandler.cs | 34 - .../GridViewSelectEventArgs.cs | 48 - .../GridViewSelectEventHandler.cs | 35 - .../GridViewSortEventArgs.cs | 53 - .../GridViewSortEventHandler.cs | 35 - .../GridViewUpdateEventHandler.cs | 35 - .../GridViewUpdatedEventHandler.cs | 35 - .../HorizontalAlign.cs | 41 - .../System.Web.UI.WebControls/HotSpotMode.cs | 38 - .../IButtonControl.cs | 48 - .../ICallbackContainer.cs | 40 - .../ICompositeControlDesignerAccessor.cs | 40 - .../IDataBoundControl.cs | 44 - .../IDataBoundItemControl.cs | 41 - .../IDataBoundListControl.cs | 44 - .../IFieldControl.cs | 40 - .../IPersistedSelector.cs | 42 - .../IRepeatInfoUser.cs | 49 - .../System.Web.UI.WebControls/ImageAlign.cs | 43 - .../ImageMapEventArgs.cs | 47 - .../ImageMapEventHandler.cs | 35 - .../System.Web.UI.WebControls/ListItemType.cs | 43 - .../ListSelectionMode.cs | 37 - .../System.Web.UI.WebControls/LiteralMode.cs | 34 - .../LoginCancelEventArgs.cs | 53 - .../LoginCancelEventHandler.cs | 34 - .../LoginFailureAction.cs | 36 - .../System.Web.UI.WebControls/LogoutAction.cs | 34 - .../MailMessageEventArgs.cs | 50 - .../MailMessageEventHandler.cs | 32 - .../MenuEventArgs.cs | 60 - .../MenuEventHandler.cs | 32 - .../MenuRenderingMode.cs | 37 - .../MonthChangedEventArgs.cs | 56 - .../MonthChangedEventHandler.cs | 38 - .../NextPrevFormat.cs | 38 - .../ObjectDataSourceDisposingEventArgs.cs | 49 - .../ObjectDataSourceDisposingEventHandler.cs | 32 - .../ObjectDataSourceEventArgs.cs | 48 - .../ObjectDataSourceFilteringEventArgs.cs | 49 - .../ObjectDataSourceFilteringEventHandler.cs | 35 - .../ObjectDataSourceMethodEventArgs.cs | 50 - .../ObjectDataSourceMethodEventHandler.cs | 32 - .../ObjectDataSourceSelectingEventArgs.cs | 56 - .../ObjectDataSourceSelectingEventHandler.cs | 32 - .../ObjectDataSourceStatusEventArgs.cs | 79 - .../ObjectDataSourceStatusEventHandler.cs | 32 - .../System.Web.UI.WebControls/Orientation.cs | 33 - .../System.Web.UI.WebControls/PagerButtons.cs | 35 - .../System.Web.UI.WebControls/PagerMode.cs | 37 - .../PagerPosition.cs | 38 - .../PathDirection.cs | 33 - .../RepeatDirection.cs | 37 - .../System.Web.UI.WebControls/RepeatLayout.cs | 39 - .../RepeaterCommandEventArgs.cs | 54 - .../RepeaterCommandEventHandler.cs | 33 - .../RepeaterItemEventArgs.cs | 44 - .../RepeaterItemEventHandler.cs | 30 - .../SendMailErrorEventHandler.cs | 32 - .../ServerValidateEventHandler.cs | 33 - .../SiteMapNodeItemEventArgs.cs | 47 - .../SiteMapNodeItemEventHandler.cs | 32 - .../SiteMapNodeItemType.cs | 35 - .../SortDirection.cs | 35 - .../SqlDataSourceCommandEventArgs.cs | 51 - .../SqlDataSourceCommandEventHandler.cs | 34 - .../SqlDataSourceCommandType.cs | 38 - .../SqlDataSourceFilteringEventArgs.cs | 49 - .../SqlDataSourceFilteringEventHandler.cs | 32 - .../SqlDataSourceMode.cs | 41 - .../SqlDataSourceSelectingEventArgs.cs | 48 - .../SqlDataSourceSelectingEventHandler.cs | 34 - .../SqlDataSourceStatusEventArgs.cs | 71 - .../SqlDataSourceStatusEventHandler.cs | 34 - .../SqlDataSourceView.cs | 4 +- .../System.Web.UI.WebControls/Table.cs | 5 - .../TableCaptionAlign.cs | 38 - .../TableHeaderScope.cs | 34 - .../TableRowSection.cs | 34 - .../System.Web.UI.WebControls/TextAlign.cs | 34 - .../System.Web.UI.WebControls/TextBoxMode.cs | 39 - .../TreeNodeEventArgs.cs | 48 - .../TreeNodeEventHandler.cs | 34 - .../TreeNodeSelectAction.cs | 35 - .../TreeViewImageSet.cs | 47 - .../System.Web.UI.WebControls/UnitType.cs | 44 - .../ValidationCompareOperator.cs | 42 - .../ValidationDataType.cs | 40 - .../ValidationSummaryDisplayMode.cs | 38 - .../ValidatorDisplay.cs | 38 - .../VerticalAlign.cs | 40 - .../WebColorConverter.cs | 71 - .../System.Web/System.Web.UI/ClientIDMode.cs | 39 - .../System.Web.UI/ConflictOptions.cs | 35 - .../ConstructorNeedsTagAttribute.cs | 55 - .../System.Web.UI/ControlBuilderAttribute.cs | 73 - .../CssClassPropertyAttribute.cs | 43 - .../DataBindingHandlerAttribute.cs | 81 - .../System.Web.UI/DataKeyPropertyAttribute.cs | 58 - .../System.Web.UI/DataSourceCacheExpiry.cs | 35 - .../System.Web.UI/DataSourceCapabilities.cs | 38 - .../System.Web.UI/DataSourceOperation.cs | 38 - .../FileLevelControlBuilderAttribute.cs | 83 - .../System.Web.UI/FilterableAttribute.cs | 100 - .../System.Web.UI/HtmlTextWriterAttribute.cs | 87 - .../System.Web.UI/HtmlTextWriterStyle.cs | 76 - .../System.Web.UI/HtmlTextWriterTag.cs | 130 - .../System.Web.UI/IAttributeAccessor.cs | 41 - .../System.Web.UI/IAutoFieldGenerator.cs | 44 - .../System.Web.UI/IBindableControl.cs | 44 - .../System.Web.UI/IBindableTemplate.cs | 40 - .../System.Web.UI/ICallbackEventHandler.cs | 40 - .../System.Web.UI/IControlBuilderAccessor.cs | 39 - .../System.Web.UI/IControlDesignerAccessor.cs | 44 - .../IDReferencePropertyAttribute.cs | 64 - .../System.Web.UI/IDataBindingsAccessor.cs | 41 - .../System.Web.UI/IDataItemContainer.cs | 41 - .../System.Web.UI/IDataKeysControl.cs | 36 - .../System.Web/System.Web.UI/IDataSource.cs | 42 - .../IDataSourceViewSchemaAccessor.cs | 39 - .../System.Web.UI/IExpressionsAccessor.cs | 40 - .../System.Web.UI/IFilterResolutionService.cs | 40 - .../System.Web.UI/IHierarchicalDataSource.cs | 41 - .../System.Web.UI/IHierarchicalEnumerable.cs | 38 - .../System.Web.UI/IHierarchyData.cs | 39 - .../System.Web.UI/INamingContainer.cs | 39 - .../System.Web.UI/INavigateUIData.cs | 40 - .../System.Web.UI/INonBindingContainer.cs | 55 - .../System.Web.UI/IParserAccessor.cs | 40 - .../System.Web.UI/IPostBackDataHandler.cs | 42 - .../System.Web.UI/IPostBackEventHandler.cs | 40 - .../System.Web.UI/IResourceUrlGenerator.cs | 39 - .../System.Web.UI/IStateFormatter.cs | 42 - .../System.Web/System.Web.UI/IStateManager.cs | 43 - .../System.Web/System.Web.UI/IStyleSheet.cs | 39 - .../System.Web/System.Web.UI/ITemplate.cs | 40 - .../System.Web.UI/IThemeResolutionService.cs | 41 - .../System.Web.UI/IUrlResolutionService.cs | 40 - .../IUserControlDesignerAccessor.cs | 38 - .../IUserControlTypeResolutionService.cs | 40 - .../System.Web/System.Web.UI/IValidator.cs | 42 - .../System.Web.UI/ImageClickEventHandler.cs | 37 - .../NonVisualControlAttribute.cs | 72 - .../System.Web.UI/PersistChildrenAttribute.cs | 92 - .../System.Web.UI/PersistenceMode.cs | 43 - .../SupportsEventValidationAttribute.cs | 43 - .../System.Web.UI/TemplateInstance.cs | 38 - .../TemplateInstanceAttribute.cs | 88 - .../System.Web.UI/ThemeableAttribute.cs | 92 - .../System.Web.UI/ViewStateEncryptionMode.cs | 39 - .../System.Web/System.Web.Util/HttpEncoder.cs | 2 +- .../System.Web.Util/IWebObjectFactory.cs | 37 - .../RequestValidationSource.cs | 41 - .../System.Web/System.Web.Util/UrlUtils.cs | 2 +- mcs/class/System.Web/System.Web.dll.sources | 728 ++-- .../System.Web/HeadersCollection.cs | 24 + .../System.Web/System.Web/HttpApplication.cs | 68 +- .../System.Web/HttpContextBase.cs | 0 .../System.Web/HttpContextWrapper.cs | 0 .../System.Web/HttpFileCollectionWrapper.cs | 0 .../System.Web/System.Web/HttpRequest.cs | 58 +- .../System.Web/HttpRequestWrapper.cs | 35 +- .../System.Web/HttpResponseWrapper.cs | 0 .../System.Web/HttpServerUtilityWrapper.cs | 0 .../System.Web/System.Web/IHtmlString.cs | 29 - .../System.Web/IHttpAsyncHandler.cs | 39 - .../System.Web/System.Web/IHttpHandler.cs | 37 - .../System.Web/IHttpHandlerFactory.cs | 40 - .../System.Web/System.Web/IHttpModule.cs | 35 - .../PreApplicationStartMethodAttribute.cs | 45 - .../System.Web/ReadEntityBodyMode.cs | 34 - .../System.Web/RequestNotification.cs | 49 - .../System.Web/RequestNotificationStatus.cs | 42 - .../System.Web/TraceContextEventArgs.cs | 49 - .../System.Web/TraceContextEventHandler.cs | 32 - .../UnvalidatedRequestValuesBase.cs | 90 - .../UnvalidatedRequestValuesWrapper.cs | 92 - .../System.Web/System.Web_test.dll.sources | 1 - .../FileResponseElementTest.cs | 2 - .../System.Web.Caching/HeaderElementTest.cs | 2 - .../MemoryResponseElementTest.cs | 2 - .../System.Web.Caching/OutputCacheTest.cs | 16 +- .../SqlCacheDependencyTest.cs | 2 - .../SubstitutionResponseElementTest.cs | 2 - .../BuildManagerTest.cs | 2 - .../BuildProviderTest.cs | 2 - .../RouteUrlExpressionBuilderTest.cs | 2 - .../MachineKeySectionTest.cs | 12 - .../MachineKeyValidationConverterTest.cs | 20 - .../System.Web.Security/MachineKeyTest.cs | 2 - .../HtmlFormTest.cs | 4 - .../HtmlInputButtonTest.cs | 5 - .../MenuAdapterTest.cs | 2 - .../BaseDataBoundControlTest.cs | 2 - .../BaseDataListTest.cs | 2 - .../BoundFieldTest.cs | 12 - .../ChangePasswordTest.cs | 2 - .../CheckBoxFieldTest.cs | 20 - .../CheckBoxListTest.cs | 51 - .../System.Web.UI.WebControls/CheckBoxTest.cs | 4 - .../System.Web.UI.WebControls/DataGridTest.cs | 2255 ++++++++++++ .../DataGridTest.cs.REMOVED.git-id | 1 - .../System.Web.UI.WebControls/DataKeyTest.cs | 2 - .../DataListItemTest.cs | 16 - .../System.Web.UI.WebControls/DataListTest.cs | 2 - .../DataSourceControlTest.cs | 4 - .../DetailsViewTest.cs.REMOVED.git-id | 2 +- .../EditCommandColumnTest.cs | 12 - .../System.Web.UI.WebControls/FormViewTest.cs | 2628 ++++++++++++++ .../FormViewTest.cs.REMOVED.git-id | 1 - .../GridViewTest.cs.REMOVED.git-id | 2 +- .../HyperLinkTest.cs | 12 - .../ImageButtonTest.cs | 4 - .../ImageFieldTest.cs | 8 - .../System.Web.UI.WebControls/ImageMapTest.cs | 32 - .../System.Web.UI.WebControls/ImageTest.cs | 13 - .../MasterPageTest.cs | 4 - .../MenuItemBindingTest.cs | 2 - .../System.Web.UI.WebControls/MenuTest.cs | 1786 ++++++++++ .../MenuTest.cs.REMOVED.git-id | 1 - .../ObjectDataSourceTest.cs | 4 - .../ObjectDataSourceViewTest.cs | 10 - .../RadioButtonListTest.cs | 4 - .../RepeatInfoTest.auto.2.0.cs.REMOVED.git-id | 1 - .../RepeatInfoTest.auto.4.0.cs.REMOVED.git-id | 2 +- .../RepeatInfoTest.cs | 5 - .../RouteParameterTest.cs | 2 - .../SqlDataSourceViewTest.cs | 2 - .../System.Web.UI.WebControls/TableTest.cs | 132 - .../System.Web.UI.WebControls/TextBoxTest.cs | 8 - .../System.Web.UI.WebControls/TreeNodeTest.cs | 27 - .../TreeViewTest.cs.REMOVED.git-id | 2 +- .../ValidationSummaryTest.cs | 2 - .../WizardStepBaseTest.cs | 8 +- .../System.Web.UI.WebControls/WizardTest.cs | 46 - .../XmlDataSourceTest.cs | 2 - .../Test/System.Web.UI/ControlTest.cs | 8 - .../DataKeyPropertyAttributeTest.cs | 2 - .../Test/System.Web.UI/LosFormatterTest.cs | 24 - .../Test/System.Web.Util/HttpEncoderTest.cs | 6 - .../MachineKeySectionUtilsTest.cs | 6 - .../System.Web.Util/RequestValidatorTest.cs | 2 - .../Test/System.Web/HttpApplicationTest.cs | 2 - .../Test/System.Web/HttpCookieTest.cs | 18 - .../Test/System.Web/HttpExceptionTest.cs | 2 - .../Test/System.Web/HttpRequestTest.cs | 24 + .../Test/System.Web/HttpResponseTest.cs | 4 - .../Test/System.Web/HttpUtilityTest.cs | 52 - .../NunitWeb/NunitWeb/WebTestLocal.cs | 4 - .../ApplicationPreStartMethods.cs | 2 - .../BuildManagerCacheFiles.cs | 2 - .../ControlRenderingCompatibilityVersion.cs | 2 - .../Control_GetUniqueIDRelativeTo.cs | 2 - .../DisabledAttributeRendering.cs | 2 - .../EnableFormsAuthentication.cs | 2 - .../GridViewShowHeaderWhenEmpty.cs | 2 - .../standalone-tests/GridViewSortingStyles.cs | 2 - .../Test/standalone-tests/Menu_4.0_List.cs | 2 - .../standalone-tests/OutputCacheProvider.cs | 2 - .../standalone-tests/PageMetaAttributes.cs | 2 - .../PageParserDefaultTypeProperties.cs | 2 - .../standalone-tests/RegisterBuildProvider.cs | 2 - .../Test/standalone-tests/RequestValidator.cs | 2 - .../RequestValidatorTestGenerated.cs | 3 +- .../Unhandled_Exception_Global_Asax.cs | 4 - .../WebControlsMustUseIsEnabled_Bug571715.cs | 4 - .../Test/standalone-tests/WebFormsRouting.cs | 2 - .../monotouch_runtime_System.Web.dll.sources | 1 - .../System.Web/net_4_0_System.Web.dll.sources | 89 - .../System.Web/net_4_5_System.Web.dll.sources | 13 - .../System.Windows.Forms/AsyncMethodData.cs | 1 + .../System.Windows.Forms/ComboBox.cs | 2 +- .../System.Windows.Forms/ListBox.cs | 2 +- .../System.Windows.Forms/TextBox.cs | 4 +- .../ThemeWin32Classic.cs.REMOVED.git-id | 2 +- .../System.Windows.Forms/XEventQueue.cs | 74 +- .../System.Windows.Forms/XplatUICarbon.cs | 3 + .../System.Windows.Forms/XplatUIDriver.cs | 27 +- .../XplatUIX11.cs.REMOVED.git-id | 2 +- .../Test/System.Windows.Forms/TextBoxTest.cs | 2 +- .../ToolStripControlHostTest.cs | 4 +- .../Test/System.Windows.Forms/TrackBarTest.cs | 10 +- mcs/class/System.XML/Makefile | 6 +- .../LocalAppContextSwitches.cs | 7 + .../XmlTypeMapping.cs | 11 +- mcs/class/System.XML/System.Xml.dll.sources | 1 + .../XmlSerializerTestClasses.cs | 7 + .../XmlSerializerTests.cs.REMOVED.git-id | 2 +- .../System.XML/mobile_System.Xml.dll.sources | 3 +- .../monotouch_tv_System.Xml.dll.sources | 1 + ...onotouch_tv_runtime_System.Xml.dll.sources | 1 + ...touch_watch_runtime_System.Xml.dll.sources | 1 + mcs/class/System.Xaml/Makefile | 2 +- .../Test/System.Xaml/XamlObjectWriterTest.cs | 12 +- .../Test/System.Xaml/XamlXmlReaderTest.cs | 6 +- .../Test/System.Xaml/XamlXmlWriterTest.cs | 6 +- .../Test/System.Xml.Linq/ExtensionsTest.cs | 2 - mcs/class/System/Assembly/AssemblyInfo.cs | 6 + .../en/System.Net/WebRequest.xml | 7 +- .../en/ns-System.Security.Cryptography.xml | 2 +- mcs/class/System/Makefile | 46 +- .../Microsoft.CSharp/CSharpCodeCompiler.cs | 24 +- mcs/class/System/Mono.Http/NtlmClient.cs | 24 +- .../Mono.Net.Security/CallbackHelpers.cs | 137 + .../ChainValidationHelper.cs | 344 ++ .../Mono.Net.Security/IMonoSslStream.cs | 239 ++ .../Mono.Net.Security/IMonoTlsProvider.cs | 88 + .../Mono.Net.Security/LegacySslStream.cs | 603 ++++ .../MonoDefaultTlsProvider.cs | 115 + .../Mono.Net.Security/MonoSslStreamImpl.cs | 342 ++ .../Mono.Net.Security/MonoSslStreamWrapper.cs | 330 ++ .../MonoTlsProviderFactory.cs | 275 ++ .../Mono.Net.Security/MonoTlsProviderImpl.cs | 118 + .../MonoTlsProviderWrapper.cs | 102 + .../System/Mono.Net.Security/MonoTlsStream.cs | 134 + .../Mono.Net.Security/NoReflectionHelper.cs | 132 + .../SystemCertificateValidator.cs | 465 +++ mcs/class/System/ReferenceSources/Internal.cs | 80 + mcs/class/System/ReferenceSources/Logging.cs | 7 +- mcs/class/System/ReferenceSources/SR.cs | 3 + mcs/class/System/ReferenceSources/SR2.cs | 12 + .../ReferenceSources/SSPIConfiguration.cs | 53 + .../ReferenceSources/SSPISafeHandles.cs | 208 ++ .../System/ReferenceSources/SSPIWrapper.cs | 311 ++ .../System/ReferenceSources/SslStream.cs | 141 + .../System/ReferenceSources/_SecureChannel.cs | 41 + .../System/ReferenceSources/_SslState.cs | 141 + .../System/ReferenceSources/_SslStream.cs | 230 ++ .../CustomizableFileSettingsProvider.cs | 69 +- .../DefaultTraceListener.cs | 4 + .../System/System.Diagnostics/Process.cs | 839 ++--- .../System/System.Diagnostics/Stopwatch.cs | 2 + mcs/class/System/System.IO/DefaultWatcher.cs | 9 + mcs/class/System/System.IO/KeventWatcher.cs | 25 +- .../System/System.IO/MonoSyncFileStream.cs | 119 - mcs/class/System/System.Net.Cache/ChangeLog | 11 - .../System.Net.Cache/HttpCacheAgeControl.cs | 44 - .../System.Net.Cache/HttpRequestCacheLevel.cs | 47 - .../HttpRequestCachePolicy.cs | 140 - .../System.Net.Cache/RequestCacheLevel.cs | 45 - .../System.Net.Cache/RequestCachePolicy.cs | 76 - .../System/System.Net.Mail/Attachment.cs | 2 +- .../System/System.Net.Mail/MailMessage.cs | 58 +- .../System/System.Net.Mail/SmtpClient.cs | 84 +- .../System.Net.Mail/SmtpDeliveryFormat.cs} | 20 +- mcs/class/System/System.Net.Mime/ChangeLog | 90 - .../System.Net.Mime/ContentDisposition.cs | 253 -- .../System/System.Net.Mime/ContentType.cs | 235 -- .../System.Net.Mime/DispositionTypeNames.cs | 38 - .../System/System.Net.Mime/MediaTypeNames.cs | 56 - .../System.Net.Mime/TransferEncoding.cs | 40 - .../GatewayIPAddressInformationCollection.cs | 2 + .../IPAddressCollection.cs | 2 + .../IPAddressInformationCollection.cs | 2 + .../IPGlobalProperties.cs | 6 + .../IPGlobalStatistics.cs | 4 +- .../IPInterfaceProperties.cs | 2 + .../IPv4InterfaceProperties.cs | 2 + .../IPv4InterfaceStatistics.cs | 2 + .../IPv6InterfaceProperties.cs | 3 +- .../IcmpV4Statistics.cs | 2 + .../IcmpV6Statistics.cs | 2 + ...MulticastIPAddressInformationCollection.cs | 2 + .../NetworkInterface.cs | 53 +- .../System.Net.NetworkInformation/Ping.cs | 25 +- .../TcpStatistics.cs | 3 +- .../UdpStatistics.cs | 2 + .../UnicastIPAddressInformation.cs | 2 + .../UnicastIPAddressInformationCollection.cs | 2 + .../AuthenticatedStream.cs | 90 - .../AuthenticationLevel.cs | 42 - .../System.Net.Security/EncryptionPolicy.cs} | 22 +- .../LocalCertificateSelectionCallback.cs | 6 +- .../System.Net.Security/ProtectionLevel.cs | 41 - .../RemoteCertificateValidationCallback.cs | 7 +- .../System.Net.Security/SslPolicyErrors.cs | 3 +- .../System/System.Net.Security/SslStream.cs | 856 ++--- .../System.Net.Sockets/AddressFamily.cs | 70 - .../System.Net.Sockets/IOControlCode.cs | 70 - .../System.Net.Sockets/IPPacketInformation.cs | 95 - .../System.Net.Sockets/IPv6MulticastOption.cs | 82 - .../System/System.Net.Sockets/LingerOption.cs | 63 - .../System.Net.Sockets/MulticastOption.cs | 98 - .../System.Net.Sockets/NetworkStream.cs | 430 --- .../System.Net.Sockets/ProtocolFamily.cs | 68 - .../System/System.Net.Sockets/ProtocolType.cs | 116 - .../System.Net.Sockets/SafeSocketHandle.cs | 4 + .../System/System.Net.Sockets/SelectMode.cs | 54 - mcs/class/System/System.Net.Sockets/Socket.cs | 3125 ---------------- .../Socket.cs.REMOVED.git-id | 1 + .../System.Net.Sockets/SocketAsyncCallback.cs | 32 - .../SocketAsyncEventArgs.cs | 302 +- .../System.Net.Sockets/SocketAsyncResult.cs | 208 +- .../System.Net.Sockets/SocketAsyncWorker.cs | 397 --- .../System/System.Net.Sockets/SocketError.cs | 83 - .../System.Net.Sockets/SocketException.cs | 80 - .../System/System.Net.Sockets/SocketFlags.cs | 49 - .../System.Net.Sockets/SocketInformation.cs | 61 - .../SocketInformationOptions.cs | 43 - .../System.Net.Sockets/SocketOperation.cs | 2 - .../System.Net.Sockets/SocketOptionLevel.cs | 62 - .../System.Net.Sockets/SocketShutdown.cs | 54 - .../System/System.Net.Sockets/SocketType.cs | 66 - .../System.Net.Sockets/TransmitFileOptions.cs | 44 - .../System.Net.Sockets/UdpReceiveResult.cs | 78 - mcs/class/System/System.Net/ChunkStream.cs | 10 +- .../System/System.Net/EndPointListener.cs | 42 +- .../System/System.Net/EndPointManager.cs | 2 +- mcs/class/System/System.Net/FtpWebRequest.cs | 36 +- mcs/class/System/System.Net/HttpConnection.cs | 116 +- mcs/class/System/System.Net/HttpListener.cs | 76 +- .../System/System.Net/HttpListenerRequest.cs | 16 +- .../System/System.Net/HttpListenerResponse.cs | 113 +- .../System.Net/HttpListenerTimeoutManager.cs} | 19 +- mcs/class/System/System.Net/HttpUtility.cs | 1451 -------- mcs/class/System/System.Net/HttpWebRequest.cs | 64 +- mcs/class/System/System.Net/IPAddress.cs | 45 +- mcs/class/System/System.Net/MacProxy.cs | 3 +- .../System/System.Net/SecurityProtocolType.cs | 4 +- mcs/class/System/System.Net/ServicePoint.cs | 56 +- .../System/System.Net/ServicePointManager.cs | 438 +-- mcs/class/System/System.Net/WebConnection.cs | 118 +- .../System/System.Net/WebConnectionStream.cs | 18 +- .../System/System.Net/WebHeaderCollection.cs | 8 +- mcs/class/System/System.Net/WebRequest.cs | 19 +- mcs/class/System/System.Net/WebUtility.cs | 90 - .../System.Runtime.InteropServices/ChangeLog | 9 - .../DefaultParameterValueAttribute.cs | 51 - .../HandleCollector.cs | 98 - .../ConfigUtil.cs | 2 +- .../ExtendedProtectionPolicyElement.cs | 2 +- .../ServiceNameElement.cs | 2 +- .../ServiceNameElementCollection.cs | 2 +- .../OSX509Certificates.cs | 77 +- .../PublicKey.cs | 10 +- .../X500DistinguishedName.cs | 8 +- .../X509BasicConstraintsExtension.cs | 6 +- .../X509Certificate2.cs | 53 +- .../X509Chain.cs | 6 +- .../X509EnhancedKeyUsageExtension.cs | 6 +- .../X509ExtensionCollection.cs | 8 +- .../X509KeyUsageExtension.cs | 6 +- .../X509Store.cs | 6 +- .../X509SubjectKeyIdentifierExtension.cs | 8 +- .../AsnEncodedData.cs | 8 +- .../System.Security.Cryptography/OidGroup.cs} | 31 +- mcs/class/System/System.dll.sources | 145 +- mcs/class/System/System/AndroidPlatform.cs | 6 +- mcs/class/System/System/IOSelector.cs | 164 + mcs/class/System/System/Uri.cs | 20 +- mcs/class/System/System/UriComponents.cs | 53 - mcs/class/System/System/UriFormat.cs | 37 - mcs/class/System/System/UriFormatException.cs | 70 - mcs/class/System/System/UriHostNameType.cs | 62 - mcs/class/System/System/UriIdnScope.cs | 39 - mcs/class/System/System/UriKind.cs | 37 - mcs/class/System/System/UriParseComponents.cs | 8 + mcs/class/System/System/UriPartial.cs | 42 - mcs/class/System/System_test.dll.sources | 2 +- .../CSharpCodeProviderTest.cs | 19 + .../BlockingCollectionTests.cs | 2 - .../CollectionStressTestHelper.cs | 2 - .../ConcurrentBagTests.cs | 2 - .../ParallelTestHelper.cs | 2 - .../SortedSetTest.cs | 2 - .../CollectionChangedEventValidators.cs | 2 - .../ObservableCollectionTest.cs | 2 - .../ReadOnlyObservableCollectionTest.cs | 2 - .../AttributeCollectionTest.cs | 2 - .../CultureInfoConverterTest.cs | 2 - .../DateTimeOffsetConverterTests.cs | 2 +- .../PropertyDescriptorTests.cs | 4 +- .../TypeDescriptionProviderTest.cs | 2 - .../ApplicationSettingsBaseTest.cs | 70 +- .../ProcessStartInfoTest.cs | 4 + .../Test/System.Diagnostics/ProcessTest.cs | 98 +- .../DeflateStreamTest.cs | 2 - .../Test/System.Net.Mail/SmtpClientTest.cs | 46 + .../System.Net.Mime/ContentDispositionTest.cs | 5 +- .../NetworkInterfaceTest.cs | 22 +- .../Test/System.Net.Security/SslStreamTest.cs | 4 +- .../SocketTest.cs.REMOVED.git-id | 2 +- .../Test/System.Net.Sockets/TcpClientTest.cs | 10 +- .../Test/System.Net.Sockets/UdpClientTest.cs | 37 +- .../Test/System.Net/HttpListener2Test.cs | 22 + .../Test/System.Net/HttpListenerTest.cs | 58 +- .../HttpWebRequestTest.cs.REMOVED.git-id | 2 +- .../Test/System.Net/HttpWebResponseTest.cs | 128 +- .../System/Test/System.Net/IPAddressTest.cs | 56 +- .../Test/System.Net/ServicePointTest.cs | 31 + .../System/Test/System.Net/WebClientTest.cs | 10 +- .../System.Net/WebHeaderCollectionTest.cs | 13 +- .../Test/System.Net/WebPermissionTest.cs | 16 - .../System/Test/System.Net/WebUtilityTest.cs | 2 +- .../FrameworkNameTest.cs | 2 +- .../Test/System.Threading/BarrierTest.cs | 2 - .../System/Test/System/UriBuilderTest.cs | 4 - .../System/Test/System/UriPermutationsTest.cs | 4 +- mcs/class/System/Test/System/UriTest.cs | 53 +- mcs/class/System/Test/System/UriTest2.cs | 4 - mcs/class/System/Test/System/UriTest3.cs | 12 - mcs/class/System/mobile_System.dll.sources | 241 +- .../System/mobile_static_System.dll.sources | 75 - mcs/class/System/monodroid_System.dll.sources | 77 - mcs/class/System/monotouch_System.dll.sources | 75 - .../System/monotouch_tv_System.dll.sources | 1 + .../monotouch_tv_runtime_System.dll.sources | 1 + ...monotouch_watch_runtime_System.dll.sources | 1 + .../ConnectionEventArgsTests.cs | 2 - .../Test/WebMatrix.Data/DatabaseTests.cs | 2 - .../Test/WebMatrix.Data/DynamicRecordTests.cs | 2 - .../System.IO.Packaging/PackagePart.cs | 3 +- .../System.IO.Packaging/PackagePartTest.cs | 14 + .../DateTimeValueSerializerTest.cs | 4 - .../ValueSerializerTest.cs | 2 - mcs/class/corlib/Assembly/AssemblyInfo.cs | 17 +- mcs/class/corlib/Makefile | 22 +- mcs/class/corlib/Mono/Runtime.cs | 7 +- .../ReferenceSources/AppContextSwitches.cs | 5 + mcs/class/corlib/ReferenceSources/Array.cs | 1 + mcs/class/corlib/ReferenceSources/Buffer.cs | 38 + .../corlib/ReferenceSources/CLRConfig.cs | 6 +- .../corlib/ReferenceSources/JitHelpers.cs | 2 +- .../corlib/ReferenceSources/RuntimeType.cs | 2 + mcs/class/corlib/ReferenceSources/TextInfo.cs | 271 +- .../corlib/ReferenceSources/win32native.cs | 5 + .../EventAttribute.cs | 3 + .../System.Diagnostics.Tracing/EventSource.cs | 146 +- .../EventSourceSettings.cs} | 22 +- .../corlib/System.Diagnostics/StackTrace.cs | 4 + .../System.Globalization/CultureInfo.cs | 9 +- mcs/class/corlib/System.IO/FileStream.cs | 18 +- mcs/class/corlib/System.IO/MonoIO.cs | 10 +- mcs/class/corlib/System.IO/Path.cs | 6 +- .../ConstructorBuilder.cs | 9 + .../System.Reflection.Emit/ILGenerator.cs | 79 +- .../System.Reflection.Emit/MethodBuilder.cs | 8 + .../System.Reflection.Emit/ModuleBuilder.cs | 141 +- .../System.Reflection.Emit/TypeBuilder.cs | 31 +- .../ExceptionHandlingClauseOptions.cs | 44 - .../ApplicationActivator.cs | 26 + .../SafeHandle.cs | 36 +- .../Context.cs | 1 + .../RemotingServices.cs | 4 + .../CompatibilitySwitch.cs | 5 + .../NativeObjectSecurity.cs | 20 + .../X509Certificate.cs | 187 +- .../X509Certificate20.cs | 110 +- .../X509CertificateImpl.cs | 148 + .../X509CertificateImplMono.cs | 179 + .../X509Helper.cs | 214 ++ .../corlib/System.Security/SecurityState.cs | 8 + mcs/class/corlib/System.Threading/Monitor.cs | 7 +- mcs/class/corlib/System.Threading/Thread.cs | 51 + .../System/AppContext.cs} | 22 +- mcs/class/corlib/System/AppDomain.cs | 73 + .../corlib/System/AppDomainInitializer.cs | 4 + mcs/class/corlib/System/AppDomainManager.cs | 52 + mcs/class/corlib/System/AppDomainSetup.cs | 11 + mcs/class/corlib/System/Array.cs | 27 +- mcs/class/corlib/System/Console.cs | 3 +- mcs/class/corlib/System/Delegate.cs | 2 +- mcs/class/corlib/System/Environment.cs | 8 +- mcs/class/corlib/System/Exception.cs | 3 +- mcs/class/corlib/System/Math.cs | 504 --- mcs/class/corlib/System/MonoType.cs | 3 + mcs/class/corlib/System/MulticastDelegate.cs | 13 + .../corlib/System/TimeZoneInfo.Android.cs | 2 +- .../corlib/System/TimeZoneInfo.MonoTouch.cs | 2 +- mcs/class/corlib/System/TimeZoneInfo.cs | 91 +- mcs/class/corlib/System/TypeIdentifier.cs | 234 ++ mcs/class/corlib/System/TypeSpec.cs | 314 +- .../RegistryKeyTest.cs.REMOVED.git-id | 2 +- .../CollectionStressTestHelper.cs | 2 - .../ConcurrentDictionaryTests.cs | 2 - .../ConcurrentQueueTests.cs | 2 - .../ConcurrentStackTests.cs | 2 - .../ParallelConcurrentQueueTests.cs | 2 - .../ParallelConcurrentStackTests.cs | 2 - .../PartitionerTests.cs | 2 - .../ComparerTest.cs | 19 - .../System.Collections.Generic/ListTest.cs | 22 - .../StructuralComparisonsTest.cs | 2 - .../ContractAssertTest.cs | 2 - .../ContractAssumeTest.cs | 2 - .../ContractCollectionMethodsTest.cs | 2 - .../ContractHelperTest.cs | 2 - .../ContractMarkerMethodsTest.cs | 2 - .../ContractMustUseRewriterTest.cs | 2 - .../Helpers/RunAgainstReferenceAttribute.cs | 2 - .../Helpers/TestContractBase.cs | 2 - .../Test/System.Diagnostics/StackFrameCas.cs | 2 - .../Test/System.Diagnostics/StackTraceTest.cs | 2 + .../System.Globalization/CultureInfoTest.cs | 121 +- .../DateTimeFormatInfoTest.cs | 4 +- .../Test/System.Globalization/TextInfoTest.cs | 2 +- .../IsolatedStorageFileStreamTest.cs | 2 - .../IsolatedStorageFileTest.cs | 24 - .../IsolatedStorageTest.cs | 2 - .../Test/System.IO/DirectoryInfoTest.cs | 2 - .../corlib/Test/System.IO/DirectoryTest.cs | 4 - .../corlib/Test/System.IO/FileStreamTest.cs | 72 +- .../corlib/Test/System.IO/MemoryStreamTest.cs | 101 +- mcs/class/corlib/Test/System.IO/PathTest.cs | 4 - .../AssemblyBuilderTest.cs | 48 +- .../DerivedTypesTest.cs | 21 - .../System.Reflection.Emit/EnumBuilderTest.cs | 2 - .../GenericTypeParameterBuilderTest.cs | 10 - .../MethodBuilderTestIL.cs | 154 + .../ModuleBuilderTest.cs | 66 + .../System.Reflection/AssemblyNameTest.cs | 37 +- .../Test/System.Reflection/AssemblyTest.cs | 128 +- .../Test/System.Reflection/MethodInfoTest.cs | 45 +- .../System.Reflection/MonoGenericClassTest.cs | 92 +- .../System.Reflection/ParameterInfoTest.cs | 2 - .../System.Reflection/PropertyInfoTest.cs | 16 +- .../System.Resources/ResourceWriterTest.cs | 2 - .../ConditionalWeakTableTest.cs | 2 - .../RuntimeHelpersTest.cs | 10 + .../MarshalTest.cs | 2 + .../CallContextTest.cs | 4 - .../BinaryFormatterTest.cs | 2 - .../SerializationBinderTest.cs | 2 - .../SerializationInfoTest.cs | 4 - .../TargetFrameworkAttributeTest.cs | 2 - .../ObjectSecurity_TTest.cs | 2 - .../X509CapiTest.cs | 2 + .../CspParametersTest.cs | 2 +- .../RijndaelManagedTest.cs | 26 - .../System.Security.Policy/EvidenceTest.cs | 17 - .../Test/System.Security/SecurityStateTest.cs | 2 + .../Test/System.Text/StringBuilderTest.cs | 2 - .../ParallelTestHelper.cs | 2 - .../System.Threading.Tasks/ParallelTests.cs | 2 - .../TaskCompletionSourceTests.cs | 2 - .../System.Threading.Tasks/TaskFactoryTest.cs | 2 - .../TaskFactoryTest_T.cs | 2 - .../TaskSchedulerTest.cs | 2 - .../Test/System.Threading.Tasks/TaskTest.cs | 2 - .../System.Threading.Tasks/Task_T_Test.cs | 2 - .../CancellationTokenSourceTest.cs | 8 +- .../CancellationTokenTests.cs | 2 - .../System.Threading/CountdownEventTests.cs | 2 - .../System.Threading/LazyInitializerTest.cs | 2 - .../ManualResetEventSlimTests.cs | 2 - .../Test/System.Threading/MonitorTest.cs | 2 - .../corlib/Test/System.Threading/MutexTest.cs | 9 + .../System.Threading/SemaphoreSlimTests.cs | 2 - .../Test/System.Threading/SpinLockTests.cs | 2 - .../corlib/Test/System.Threading/ThreadCas.cs | 8 +- .../Test/System.Threading/ThreadLocalTests.cs | 5 +- .../Test/System.Threading/ThreadPoolTest.cs | 4 +- .../Test/System.Threading/ThreadTest.cs | 120 +- .../corlib/Test/System.Threading/TimerTest.cs | 175 +- .../Test/System/AggregateExceptionTests.cs | 2 - mcs/class/corlib/Test/System/AppDomainCas.cs | 4 + .../Test/System/AppDomainManagerTest.cs | 2 + .../corlib/Test/System/AppDomainSetupTest.cs | 4 + mcs/class/corlib/Test/System/ArrayTest.cs | 29 +- mcs/class/corlib/Test/System/AttributeTest.cs | 2 + mcs/class/corlib/Test/System/BufferTest.cs | 13 + .../corlib/Test/System/CharCategoryTest.cs | 675 ---- mcs/class/corlib/Test/System/CharTest.cs | 6 + .../Test/System/DateTimeOffsetTestCoreFx.cs | 143 + mcs/class/corlib/Test/System/DateTimeTest.cs | 40 +- mcs/class/corlib/Test/System/EnumTest.cs | 40 +- .../corlib/Test/System/EnvironmentCas.cs | 4 +- mcs/class/corlib/Test/System/ExceptionCas.cs | 2 - mcs/class/corlib/Test/System/GuidTest.cs | 12 - mcs/class/corlib/Test/System/MathTest.cs | 166 +- .../corlib/Test/System/StringComparerTest.cs | 14 + .../Test/System/StringTest.cs.REMOVED.git-id | 2 +- mcs/class/corlib/Test/System/TimeSpanTest.cs | 27 - .../corlib/Test/System/TimeZoneInfoTest.cs | 114 +- mcs/class/corlib/Test/System/TupleTest.cs | 2 - .../Test/System/TypeTest.cs.REMOVED.git-id | 2 +- mcs/class/corlib/Test/System/VersionTest.cs | 2 - mcs/class/corlib/coreclr/AsyncLocal.cs | 123 + .../DisablePrivateReflectionAttribute.cs | 17 + mcs/class/corlib/coreclr/EncodingProvider.cs | 136 + mcs/class/corlib/coreclr/FormattableString.cs | 80 + .../coreclr/FormattableStringFactory.cs | 57 + .../corlib/coreclr/WaitHandleExtensions.cs | 45 + mcs/class/corlib/corlib.dll.sources | 35 +- mcs/class/corlib/corlib_test.dll.sources | 2 + .../corlib/monotouch_tv_corlib.dll.sources | 1 + .../monotouch_tv_runtime_corlib.dll.sources | 1 + ...monotouch_watch_runtime_corlib.dll.sources | 1 + ...dll.sources => net_4_x_corlib.dll.sources} | 0 .../monolite/Mono.Security.dll.REMOVED.git-id | 2 +- .../System.Configuration.dll.REMOVED.git-id | 2 +- .../monolite/System.Core.dll.REMOVED.git-id | 2 +- .../System.Security.dll.REMOVED.git-id | 2 +- .../monolite/System.Xml.dll.REMOVED.git-id | 2 +- .../lib/monolite/System.dll.REMOVED.git-id | 2 +- .../lib/monolite/basic.exe.REMOVED.git-id | 2 +- .../lib/monolite/mscorlib.dll.REMOVED.git-id | 2 +- mcs/class/monodoc/Monodoc.Ecma/EcmaDesc.cs | 56 +- .../monodoc/Test/Monodoc.Ecma/EcmaUrlTests.cs | 396 ++- mcs/class/reference-assemblies/Makefile | 26 +- .../SocketResponder.cs | 100 +- mcs/docs/Makefile | 5 + mcs/docs/compiler.txt | 2 +- mcs/errors/Makefile | 4 +- mcs/errors/cs0051-3.cs | 17 + mcs/errors/cs0208-18.cs | 17 + mcs/errors/cs0403-4.cs | 10 + mcs/errors/cs0619-41.cs | 18 + mcs/errors/cs0619-58.cs | 25 + mcs/errors/cs0841-6.cs | 20 + mcs/errors/cs1570-10.cs | 2 +- mcs/errors/cs1570-11.cs | 2 +- mcs/errors/cs1570-12.cs | 2 +- mcs/errors/cs1570-2.cs | 4 +- mcs/errors/cs1570-3.cs | 4 +- mcs/errors/cs1570-4.cs | 4 +- mcs/errors/cs1570-5.cs | 4 +- mcs/errors/cs1570-6.cs | 2 +- mcs/errors/cs1570-7.cs | 2 +- mcs/errors/cs1570-8.cs | 2 +- mcs/errors/cs1570-9.cs | 2 +- mcs/errors/cs1570.cs | 2 +- mcs/errors/cs1705-2.cs | 2 +- mcs/errors/cs1705.cs | 2 +- mcs/errors/cs1904.cs | 4 +- mcs/errors/cs7064.cs | 10 + mcs/errors/cs8075.cs | 19 + mcs/errors/cs9671.cs | 8 + ...wn-issues-net_4_5 => known-issues-net_4_x} | 0 mcs/ilasm/parser/ILParser.jay.REMOVED.git-id | 2 +- mcs/ilasm/scanner/ILTables.cs | 3 + mcs/jay/jay.vcxproj | 9 +- mcs/mcs/Makefile | 12 + mcs/mcs/anonymous.cs | 24 +- mcs/mcs/assembly.cs | 46 +- mcs/mcs/assign.cs | 2 - mcs/mcs/attribute.cs | 18 +- mcs/mcs/class.cs.REMOVED.git-id | 2 +- mcs/mcs/codegen.cs | 24 +- mcs/mcs/const.cs | 6 + mcs/mcs/cs-parser.jay.REMOVED.git-id | 2 +- mcs/mcs/cs-tokenizer.cs | 3 +- mcs/mcs/decl.cs | 27 +- mcs/mcs/delegate.cs | 2 + mcs/mcs/doc.cs | 19 +- mcs/mcs/driver.cs | 4 + mcs/mcs/dynamic.cs | 160 +- mcs/mcs/ecore.cs.REMOVED.git-id | 2 +- mcs/mcs/eval.cs | 20 +- mcs/mcs/expression.cs.REMOVED.git-id | 2 +- mcs/mcs/generic.cs | 93 +- mcs/mcs/ikvm.cs | 66 +- mcs/mcs/import.cs | 15 + mcs/mcs/lambda.cs | 10 +- mcs/mcs/location.cs | 4 - mcs/mcs/membercache.cs | 2 +- mcs/mcs/method.cs | 14 +- mcs/mcs/namespace.cs | 25 +- mcs/mcs/nullable.cs | 24 +- mcs/mcs/parameter.cs | 3 + mcs/mcs/property.cs | 7 +- mcs/mcs/settings.cs | 14 +- mcs/mcs/statement.cs.REMOVED.git-id | 2 +- mcs/mcs/support.cs | 71 - mcs/mcs/typespec.cs | 5 + .../ConsoleRunner/nunit-console/ConsoleUi.cs | 4 +- .../nunit-console/EventCollector.cs | 2 + .../NUnitCore/core/BabysitterSupport.cs | 111 + mcs/nunit24/NUnitCore/core/TestCase.cs | 11 + .../NUnitCore/core/nunit.core.dll.csproj | 5 + .../NUnitCore/core/nunit.core.dll.sources | 1 + .../core/nunit.core.dll_VS2005.csproj | 3 + mcs/tests/Makefile | 6 +- mcs/tests/dtest-062.cs | 18 + mcs/tests/dtest-063.cs | 15 + mcs/tests/dtest-null-operator-01.cs | 57 + mcs/tests/gtest-284.cs | 2 - mcs/tests/gtest-409.cs | 5 + mcs/tests/gtest-540.cs | 13 + mcs/tests/gtest-584.cs | 2 +- mcs/tests/gtest-633.cs | 18 + mcs/tests/gtest-634.cs | 27 + mcs/tests/gtest-635.cs | 27 + mcs/tests/gtest-636.cs | 37 + mcs/tests/gtest-exmethod-23.cs | 2 +- ...wn-issues-net_4_5 => known-issues-net_4_x} | 0 mcs/tests/test-513.cs | 22 +- mcs/tests/test-643.cs | 13 +- mcs/tests/test-695.cs | 2 +- mcs/tests/test-814.cs | 2 +- mcs/tests/test-928.cs | 29 + mcs/tests/test-929.cs | 17 + mcs/tests/test-930.cs | 63 + mcs/tests/test-931.cs | 20 + mcs/tests/test-932.cs | 18 + mcs/tests/test-async-76.cs | 2 +- mcs/tests/test-async-81.cs | 21 + mcs/tests/test-interpolation-02.cs | 41 +- mcs/tests/test-null-operator-19.cs | 26 + mcs/tests/test-null-operator-21.cs | 17 + mcs/tests/test-null-operator-22.cs | 33 + mcs/tests/test-null-operator-23.cs | 20 + mcs/tests/test-xml-073-ref.xml | 15 + mcs/tests/test-xml-073.cs | 13 + mcs/tests/test-xml-074-ref.xml | 17 + mcs/tests/test-xml-074.cs | 16 + mcs/tests/ver-il-net_4_5.xml.REMOVED.git-id | 1 - mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id | 1 + mcs/tools/Makefile | 3 +- mcs/tools/corcompare/Makefile | 7 +- mcs/tools/corcompare/Util.cs | 107 + mcs/tools/corcompare/WellFormedXmlWriter.cs | 5 - mcs/tools/corcompare/mono-api-info.cs | 891 +++-- mcs/tools/csharp/getline.cs | 476 ++- mcs/tools/csharp/repl.cs | 48 +- mcs/tools/ikdasm/ikdasm.exe.sources | 1 + .../linker-analyzer/ConsoleDependencyGraph.cs | 146 + .../LinkerAnalyzerCore/DependencyGraph.cs | 118 + mcs/tools/linker-analyzer/Main.cs | 86 + mcs/tools/linker-analyzer/Makefile | 7 + .../linkeranalyzer.exe.sources | 5 + mcs/tools/linker/Descriptors/mscorlib.xml | 1 + .../linker/Mono.Linker.Steps/BlacklistStep.cs | 39 +- .../linker/Mono.Linker.Steps/MarkStep.cs | 14 +- .../linker/Mono.Linker.Steps/OutputStep.cs | 3 + .../ResolveFromAssemblyStep.cs | 16 +- .../Mono.Linker.Steps/ResolveFromXmlStep.cs | 17 +- .../linker/Mono.Linker.Steps/SweepStep.cs | 2 +- mcs/tools/linker/Mono.Linker/Annotations.cs | 88 + mcs/tools/linker/Mono.Linker/Pipeline.cs | 2 + mcs/tools/macpack/LOADER | 8 + mcs/tools/mdoc/Makefile | 91 +- mcs/tools/mdoc/Mono.Documentation/mdoc.cs | 2 +- .../monodocer.cs.REMOVED.git-id | 2 +- .../mdoc/Mono.Documentation/preserver.cs | 3 + .../MyFramework.MyNamespace/MyClass.xml | 32 + .../MyFramework.MyNamespace/MyClass.xml | 32 + .../MyOtherClass.xml | 2 +- .../MyFramework.MyNamespace/MyClass.xml | 40 +- .../TypeOnlyInClassic.xml | 31 + .../MyFramework.MyNamespace/MyClass.xml | 160 + .../MyFramework.MyNamespace/OnlyInMulti.xml | 40 + .../index.xml | 53 + .../ns-MyFramework.MyNamespace.xml | 6 + .../MyFramework.MyNamespace/MyClass.xml | 160 + .../MyFramework.MyNamespace/OnlyInMulti.xml | 40 + .../Test/en.expected-dropns-multi/index.xml | 53 + .../ns-MyFramework.MyNamespace.xml | 6 + .../MyNamespace/MyClass.xml | 141 + .../MyNamespace/MyEnum.xml | 59 + .../MyNamespace/MyEnumAttribute.xml | 63 + .../MyNamespace/MyFlagEnumAttribute.xml | 63 + .../ObjCRuntime/Platform.xml | 568 +++ .../Test/en.expected-enumerations/index.xml | 28 + .../ns-MyNamespace.xml | 6 + .../ns-ObjCRuntime.xml | 6 + .../Mono.DocTest.Generic/GenericBase`1.xml | 90 +- .../Mono.DocTest/Widget.xml | 90 +- .../Mono.DocTest.Generic/Extensions.xml | 8 +- .../Mono.DocTest.Generic/GenericBase`1.xml | 90 +- .../Mono.DocTest/Color.xml | 4 +- .../Mono.DocTest/DocAttribute.xml | 4 +- .../Mono.DocTest/Widget.xml | 90 +- .../System/Environment.xml | 4 +- .../Test/en.expected.importslashdoc/index.xml | 8 +- .../Mono.DocTest.Generic/GenericBase`1.xml | 90 +- .../en.expected.since/Mono.DocTest/Widget.xml | 90 +- .../Mono.DocTest.Generic/GenericBase`1.xml | 90 +- .../Test/en.expected/Mono.DocTest/Widget.xml | 90 +- .../Mono.DocTest.Generic/Extensions.html | 16 +- .../Mono.DocTest.Generic/IFoo`1.html | 2 +- .../Mono.DocTest.Generic/MyList`1.html | 6 +- .../Mono.DocTest.Generic/MyList`2.html | 8 +- .../html.expected/Mono.DocTest/Color.html | 4 +- .../Mono.DocTest/DocAttribute.html | 4 +- .../html.expected/System/Environment.html | 4 +- .../Test/msxdoc-expected.importslashdoc.xml | 1587 --------- ...expected.importslashdoc.xml.REMOVED.git-id | 1 + mcs/tools/mkbundle/mkbundle.cs | 321 +- mcs/tools/mono-symbolicate/Makefile | 10 +- mcs/tools/monop/Makefile | 2 +- mcs/tools/monop/outline.cs | 2 +- mcs/tools/resgen/Makefile | 2 +- mcs/tools/resgen/monoresgen.cs | 113 +- mcs/tools/security/cert-sync.cs | 19 +- mcs/tools/security/makecert.cs | 11 +- mcs/tools/security/signcode.cs | 2 +- mcs/tools/xbuild/Makefile | 13 + .../xbuild/data/12.0/Microsoft.CSharp.targets | 2 +- .../xbuild/data/12.0/Microsoft.Common.targets | 22 +- .../xbuild/data/12.0/Microsoft.Common.tasks | 1 + .../xbuild/data/14.0/Microsoft.CSharp.targets | 2 +- .../xbuild/data/14.0/Microsoft.Common.targets | 28 +- .../xbuild/data/14.0/Microsoft.Common.tasks | 1 + .../xbuild/data/2.0/Microsoft.CSharp.targets | 2 +- .../xbuild/data/2.0/Microsoft.Common.targets | 18 +- .../xbuild/data/3.5/Microsoft.CSharp.targets | 2 +- .../xbuild/data/3.5/Microsoft.Common.targets | 18 +- .../xbuild/data/4.0/Microsoft.CSharp.targets | 2 +- .../xbuild/data/4.0/Microsoft.Common.targets | 18 +- .../xbuild/data/4.0/Microsoft.Common.tasks | 1 + mcs/tools/xbuild/frameworks/net_2.0.xml | 2 +- mcs/tools/xbuild/frameworks/net_3.0.xml | 2 +- mcs/tools/xbuild/frameworks/net_3.5.xml | 2 +- mcs/tools/xbuild/frameworks/net_4.0.xml | 2 +- .../xbuild/frameworks/net_4.0_client.xml | 2 +- mcs/tools/xbuild/frameworks/net_4.5.1.xml | 2 +- mcs/tools/xbuild/frameworks/net_4.5.2.xml | 3 + mcs/tools/xbuild/frameworks/net_4.5.xml | 2 +- mcs/tools/xbuild/frameworks/net_4.6.1.xml | 3 + mcs/tools/xbuild/frameworks/net_4.6.xml | 3 + mcs/tools/xbuild/xbuild_test.make | 4 +- mono/Makefile.in | 6 +- mono/arch/Makefile.in | 6 +- mono/arch/amd64/Makefile.in | 6 +- mono/arch/arm/Makefile.in | 6 +- mono/arch/arm/arm-codegen.h | 12 +- mono/arch/arm64/Makefile.in | 6 +- mono/arch/ia64/Makefile.in | 6 +- mono/arch/mips/Makefile.in | 6 +- mono/arch/ppc/Makefile.in | 6 +- mono/arch/s390x/Makefile.in | 6 +- mono/arch/s390x/s390x-codegen.h | 540 ++- mono/arch/sparc/Makefile.in | 6 +- mono/arch/x86/Makefile.in | 6 +- mono/benchmark/Makefile.in | 6 +- mono/cil/Makefile.in | 6 +- mono/cil/cil-opcodes.xml | 2 + mono/cil/opcode.def | 1 + mono/dis/Makefile.in | 6 +- mono/dis/dis-cil.c | 2 +- mono/dis/dump.c | 8 +- mono/dis/get.c.REMOVED.git-id | 2 +- mono/dis/main.c | 30 +- mono/io-layer/Makefile.am | 6 +- mono/io-layer/Makefile.in | 44 +- mono/io-layer/collection.c | 131 - mono/io-layer/collection.h | 27 - mono/io-layer/error.c | 1 + mono/io-layer/event-private.h | 2 - mono/io-layer/events.c | 58 +- mono/io-layer/handles-private.h | 29 +- mono/io-layer/handles.c | 527 +-- mono/io-layer/io-portability.c | 2 - mono/io-layer/io-trace.h | 18 + mono/io-layer/io.c.REMOVED.git-id | 2 +- mono/io-layer/io.h | 3 +- mono/io-layer/locking.c | 24 +- mono/io-layer/messages.c.REMOVED.git-id | 2 +- mono/io-layer/misc-private.h | 19 - mono/io-layer/misc.c | 30 - mono/io-layer/mutexes.c | 79 +- mono/io-layer/posix.c | 16 +- mono/io-layer/process-private.h | 2 + mono/io-layer/processes.c | 197 +- mono/io-layer/processes.h | 4 +- mono/io-layer/semaphores.c | 52 +- mono/io-layer/shared.c | 850 +---- mono/io-layer/shared.h | 20 - mono/io-layer/sockets.c | 86 +- mono/io-layer/sockets.h | 2 +- mono/io-layer/thread-private.h | 11 - mono/io-layer/threads.h | 15 +- mono/io-layer/versioninfo.c | 78 +- mono/io-layer/wait.c | 156 +- mono/io-layer/wapi-private.h | 14 +- mono/io-layer/wapi-remap.h | 6 +- mono/io-layer/wapi.h | 2 - mono/io-layer/wapi_glob.c | 7 +- mono/io-layer/wthreads.c | 543 ++- mono/metadata/Makefile.am | 12 +- mono/metadata/Makefile.in.REMOVED.git-id | 2 +- mono/metadata/abi-details.h | 5 +- mono/metadata/appdomain.c | 132 +- mono/metadata/assembly.c | 165 +- mono/metadata/attach.c | 12 +- mono/metadata/boehm-gc.c | 528 ++- mono/metadata/char-conversions.h | 421 --- mono/metadata/class-internals.h | 143 +- mono/metadata/class.c.REMOVED.git-id | 2 +- mono/metadata/cominterop.c | 81 +- mono/metadata/console-null.c | 2 +- mono/metadata/console-unix.c | 16 +- mono/metadata/console-win32.c | 2 +- mono/metadata/coree.c | 2 + .../culture-info-tables.h.REMOVED.git-id | 2 +- mono/metadata/debug-helpers.c | 93 +- mono/metadata/debug-mono-ppdb.c | 215 +- mono/metadata/debug-mono-symfile.c | 22 +- mono/metadata/domain-internals.h | 45 +- mono/metadata/domain.c | 133 +- mono/metadata/exception.c | 5 +- mono/metadata/file-io.c | 188 +- mono/metadata/file-io.h | 15 +- mono/metadata/file-mmap-posix.c | 30 +- mono/metadata/filewatcher.c | 61 + mono/metadata/filewatcher.h | 2 + .../{gc-internal.h => gc-internals.h} | 47 +- mono/metadata/gc-stats.c | 2 +- mono/metadata/gc.c | 559 +-- mono/metadata/handle-private.h | 24 + mono/metadata/handle.c | 227 ++ mono/metadata/handle.h | 132 + mono/metadata/icall-def.h | 40 +- mono/metadata/icall.c.REMOVED.git-id | 2 +- mono/metadata/image-internals.h | 12 + mono/metadata/image.c | 399 ++- mono/metadata/jit-info.c | 68 +- mono/metadata/loader.c | 141 +- mono/metadata/locales.c | 154 +- mono/metadata/lock-tracer.c | 20 +- mono/metadata/lock-tracer.h | 40 +- mono/metadata/marshal.c.REMOVED.git-id | 2 +- mono/metadata/marshal.h | 50 +- mono/metadata/mempool.c | 223 +- mono/metadata/mempool.h | 3 - mono/metadata/metadata-internals.h | 151 +- .../metadata/metadata-verify.c.REMOVED.git-id | 2 +- mono/metadata/metadata.c.REMOVED.git-id | 2 +- mono/metadata/method-builder.c | 30 +- mono/metadata/monitor.c | 900 +++-- mono/metadata/monitor.h | 61 +- mono/metadata/mono-basic-block.c | 4 +- mono/metadata/mono-config.c | 40 +- mono/metadata/mono-debug.c | 40 +- mono/metadata/mono-debug.h | 3 + mono/metadata/mono-gc.h | 33 + mono/metadata/mono-hash.c | 69 +- mono/metadata/mono-hash.h | 17 +- mono/metadata/mono-perfcounters.c | 49 +- mono/metadata/mono-ptr-array.h | 16 +- mono/metadata/mono-route.h | 2 +- mono/metadata/mono-security.c | 10 +- mono/metadata/null-gc.c | 14 +- mono/metadata/number-ms.c | 2 - mono/metadata/object-internals.h | 23 +- mono/metadata/object-offsets.h | 11 + mono/metadata/object.c.REMOVED.git-id | 2 +- mono/metadata/opcodes.c | 12 +- mono/metadata/pedump.c | 24 +- mono/metadata/process.c | 69 +- mono/metadata/process.h | 2 - mono/metadata/profiler.c | 22 +- mono/metadata/reflection-internals.h | 15 +- mono/metadata/reflection.c.REMOVED.git-id | 2 +- mono/metadata/remoting.c | 80 +- mono/metadata/row-indexes.h | 1 + mono/metadata/security-core-clr.c | 72 +- mono/metadata/seq-points-data.c | 6 +- mono/metadata/seq-points-data.h | 2 +- ...dge-internal.h => sgen-bridge-internals.h} | 6 +- mono/metadata/sgen-bridge.c | 43 +- mono/metadata/sgen-bridge.h | 44 + mono/metadata/sgen-client-mono.h | 42 +- mono/metadata/sgen-mono.c | 249 +- mono/metadata/sgen-new-bridge.c | 78 +- mono/metadata/sgen-old-bridge.c | 48 +- mono/metadata/sgen-os-coop.c | 81 + mono/metadata/sgen-os-mach.c | 5 +- mono/metadata/sgen-os-posix.c | 6 +- mono/metadata/sgen-os-win32.c | 40 +- mono/metadata/sgen-stw.c | 12 +- mono/metadata/sgen-tarjan-bridge.c | 54 +- mono/metadata/sgen-toggleref.c | 10 +- mono/metadata/socket-io.c | 982 ++++-- mono/metadata/socket-io.h | 35 +- mono/metadata/string-icalls.c | 2 +- mono/metadata/sysmath.c | 288 +- mono/metadata/sysmath.h | 53 +- mono/metadata/threadpool-ms-io-poll.c | 6 +- mono/metadata/threadpool-ms-io.c | 282 +- mono/metadata/threadpool-ms-io.h | 14 +- mono/metadata/threadpool-ms.c | 350 +- mono/metadata/threads-types.h | 15 +- mono/metadata/threads.c.REMOVED.git-id | 2 +- mono/metadata/threads.h | 3 + mono/metadata/verify.c.REMOVED.git-id | 2 +- mono/mini/Makefile.am | 102 +- mono/mini/Makefile.am.in | 102 +- mono/mini/Makefile.in.REMOVED.git-id | 2 +- mono/mini/TestDriver.cs | 62 + mono/mini/abcremoval.c | 20 +- mono/mini/alias-analysis.c | 14 +- mono/mini/aot-compiler.c.REMOVED.git-id | 2 +- mono/mini/aot-compiler.h | 25 + mono/mini/aot-runtime.c.REMOVED.git-id | 2 +- mono/mini/aot-tests.cs | 156 +- mono/mini/arch-stubs.c | 81 + mono/mini/arrays.cs | 4 +- mono/mini/basic-calls.cs | 4 +- mono/mini/basic-float.cs | 4 +- mono/mini/basic-long.cs | 4 +- mono/mini/basic-math.cs | 4 +- mono/mini/basic.cs | 103 +- mono/mini/branch-opts.c | 21 +- mono/mini/cfold.c | 13 + mono/mini/cpu-arm.md | 16 +- mono/mini/cpu-arm64.md | 1 + mono/mini/cpu-ia64.md | 1 + mono/mini/cpu-mips.md | 2 + mono/mini/cpu-ppc.md | 6 +- mono/mini/cpu-ppc64.md | 2 + mono/mini/cpu-s390x.md | 7 +- mono/mini/cpu-sparc.md | 2 + mono/mini/cpu-x86.md | 2 +- mono/mini/debug-mini.c | 6 +- mono/mini/debugger-agent.c.REMOVED.git-id | 2 +- mono/mini/decompose.c | 148 +- mono/mini/devirtualization.cs | 2 +- mono/mini/dominators.c | 6 +- mono/mini/driver.c | 225 +- mono/mini/dwarfwriter.c | 71 +- mono/mini/emitnunit.pl | 2 +- mono/mini/exceptions-amd64.c | 212 +- mono/mini/exceptions-arm.c | 11 +- mono/mini/exceptions-ia64.c | 11 +- mono/mini/exceptions-mips.c | 11 +- mono/mini/exceptions-ppc.c | 26 +- mono/mini/exceptions-s390x.c | 9 +- mono/mini/exceptions-sparc.c | 11 +- mono/mini/exceptions-x86.c | 42 +- mono/mini/exceptions.cs | 39 +- mono/mini/gc-test.cs | 2 +- mono/mini/generics.cs | 53 +- mono/mini/genmdesc.c | 4 +- mono/mini/graph.c | 2 +- mono/mini/gshared.cs | 21 +- mono/mini/helpers.c | 2 +- mono/mini/{iltests.il.in => iltests.il} | 22 + mono/mini/image-writer.c | 14 +- mono/mini/ir-emit.h | 18 +- mono/mini/jit-icalls.c | 385 +- mono/mini/jit-icalls.h | 21 +- mono/mini/jit.h | 6 +- mono/mini/linear-scan.c | 16 +- mono/mini/liveness.c | 32 +- mono/mini/llvm-jit.cpp | 581 +++ mono/mini/llvm-runtime.cpp | 21 + mono/mini/llvm-runtime.h | 25 + mono/mini/local-propagation.c | 16 +- mono/mini/main.c | 77 +- mono/mini/method-to-ir.c.REMOVED.git-id | 2 +- mono/mini/mini-amd64.c.REMOVED.git-id | 2 +- mono/mini/mini-amd64.h | 28 +- mono/mini/mini-arm-tls.S | 129 + mono/mini/mini-arm-tls.h | 19 + mono/mini/mini-arm.c.REMOVED.git-id | 2 +- mono/mini/mini-arm.h | 20 +- mono/mini/mini-codegen.c | 36 +- mono/mini/mini-darwin.c | 21 +- mono/mini/mini-exceptions.c | 710 +++- mono/mini/mini-gc.c | 21 +- mono/mini/mini-generic-sharing.c | 3136 ----------------- .../mini-generic-sharing.c.REMOVED.git-id | 1 + mono/mini/mini-ia64.c.REMOVED.git-id | 2 +- mono/mini/mini-llvm-cpp.cpp | 549 +-- mono/mini/mini-llvm-cpp.h | 18 + mono/mini/mini-llvm-loaded.c | 17 +- mono/mini/mini-llvm.c.REMOVED.git-id | 2 +- mono/mini/mini-llvm.h | 24 + mono/mini/mini-mips.c.REMOVED.git-id | 2 +- mono/mini/mini-ops.h | 19 +- mono/mini/mini-posix.c | 89 +- mono/mini/mini-ppc.c.REMOVED.git-id | 2 +- mono/mini/mini-ppc.h | 77 +- mono/mini/mini-runtime.c.REMOVED.git-id | 2 +- mono/mini/mini-s390x.c.REMOVED.git-id | 2 +- mono/mini/mini-s390x.h | 10 +- mono/mini/mini-sparc.c.REMOVED.git-id | 2 +- mono/mini/mini-trampolines.c | 562 ++- mono/mini/mini-unwind.h | 5 + mono/mini/mini-windows.c | 8 +- mono/mini/mini-x86.c.REMOVED.git-id | 2 +- mono/mini/mini-x86.h | 21 +- mono/mini/mini.c.REMOVED.git-id | 2 +- mono/mini/mini.h.REMOVED.git-id | 2 +- mono/mini/objects.cs | 118 +- mono/mini/patch-info.h | 8 +- mono/mini/seq-points.c | 26 +- mono/mini/seq-points.h | 3 - mono/mini/simd-intrinsics.c | 4 +- mono/mini/ssa.c | 95 +- mono/mini/tasklets.c | 40 +- mono/mini/tasklets.h | 2 +- mono/mini/test_op_il_seq_point.sh | 50 +- .../mini/test_op_il_seq_point_headerfooter.sh | 47 +- mono/mini/trace.c | 86 +- mono/mini/tramp-amd64.c | 587 +-- mono/mini/tramp-arm.c | 99 +- mono/mini/tramp-ia64.c | 68 +- mono/mini/tramp-mips.c | 45 +- mono/mini/tramp-ppc.c | 33 +- mono/mini/tramp-s390x.c | 382 +- mono/mini/tramp-sparc.c | 30 +- mono/mini/tramp-x86.c | 602 +--- mono/mini/unwind.c | 40 +- mono/mini/version.h | 2 +- mono/mini/xdebug.c | 2 +- mono/profiler/Makefile.am | 16 +- mono/profiler/Makefile.in | 28 +- mono/profiler/decode.c.REMOVED.git-id | 2 +- mono/profiler/mono-profiler-aot.c | 2 +- mono/profiler/mono-profiler-iomap.c | 22 +- mono/profiler/perf_event.h | 1147 ------ mono/profiler/proflog.c.REMOVED.git-id | 2 +- mono/profiler/proflog.h | 6 +- mono/profiler/ptestrunner.pl | 57 + mono/sgen/Makefile.am | 1 + mono/sgen/Makefile.in | 27 +- mono/sgen/gc-internal-agnostic.h | 41 + mono/sgen/sgen-alloc.c | 23 +- mono/sgen/sgen-archdep.h | 4 +- mono/sgen/sgen-cardtable.c | 19 +- mono/sgen/sgen-client.h | 16 +- mono/sgen/sgen-conf.h | 11 + mono/sgen/sgen-copy-object.h | 10 +- mono/sgen/sgen-debug.c | 64 +- mono/sgen/sgen-descriptor.c | 4 +- mono/sgen/sgen-fin-weak-hash.c | 221 +- mono/sgen/sgen-gc.c.REMOVED.git-id | 2 +- mono/sgen/sgen-gc.h | 114 +- mono/sgen/sgen-gchandles.c | 639 ++++ mono/sgen/sgen-gray.c | 8 +- mono/sgen/sgen-hash-table.c | 4 +- mono/sgen/sgen-hash-table.h | 8 +- mono/sgen/sgen-internal.c | 2 +- mono/sgen/sgen-los.c | 54 +- mono/sgen/sgen-marksweep-drain-gray-stack.h | 80 +- .../sgen-marksweep-scan-object-concurrent.h | 66 +- mono/sgen/sgen-marksweep.c | 183 +- mono/sgen/sgen-memory-governor.c | 28 +- mono/sgen/sgen-minor-scan-object.h | 6 +- mono/sgen/sgen-nursery-allocator.c | 26 +- mono/sgen/sgen-pinning-stats.c | 10 +- mono/sgen/sgen-pinning.c | 2 +- mono/sgen/sgen-pointer-queue.c | 2 +- mono/sgen/sgen-protocol-def.h | 64 +- mono/sgen/sgen-protocol.c | 16 +- mono/sgen/sgen-protocol.h | 9 +- mono/sgen/sgen-split-nursery.c | 14 +- mono/sgen/sgen-thread-pool.c | 56 +- mono/sgen/sgen-workers.c | 144 +- mono/sgen/sgen-workers.h | 8 +- mono/tests/Makefile.am | 88 +- mono/tests/Makefile.in | 95 +- mono/tests/appdomain-loader.cs | 11 + mono/tests/appdomain-tester.cs | 33 + mono/tests/assembly-load-stress.cs | 2 +- mono/tests/assemblyresolve/Makefile.am | 4 +- mono/tests/assemblyresolve/Makefile.in | 9 +- mono/tests/bug-36848-a.cs | 12 + mono/tests/bug-36848.cs | 52 + mono/tests/calliGenericTest.il | 32 + mono/tests/dynamic-method-stack-traces.cs | 86 + mono/tests/enum.cs | 179 +- mono/tests/finalizer-wait.cs | 81 +- mono/tests/gc-descriptors/Makefile.am | 4 +- mono/tests/gc-descriptors/Makefile.in | 9 +- mono/tests/libtest.c.REMOVED.git-id | 2 +- mono/tests/load-exceptions.cs | 10 + mono/tests/load-missing.il | 10 + mono/tests/monitor-resurrection.cs | 18 +- mono/tests/pinvoke2.cs | 42 + mono/tests/pinvoke3.cs | 27 + mono/tests/pinvoke_ppcc.cs | 1050 ++++++ mono/tests/pinvoke_ppcd.cs | 402 +++ mono/tests/pinvoke_ppcf.cs | 379 ++ mono/tests/pinvoke_ppci.cs | 191 + mono/tests/pinvoke_ppcs.cs | 397 +++ mono/tests/sgen-bridge-major-fragmentation.cs | 13 +- mono/tests/sgen-domain-unload-2.cs | 15 +- mono/tests/sgen-new-threads-dont-join-stw.cs | 17 +- mono/tests/shared-generic-synchronized.2.cs | 9 +- mono/tests/synchronized.cs | 9 +- mono/tests/test-driver | 3 +- mono/tests/test-runner.cs | 437 +-- mono/tests/test-tls.cs | 43 + mono/tests/thread-static-init.cs | 42 +- mono/unit-tests/Makefile.am | 20 +- mono/unit-tests/Makefile.in | 97 +- mono/unit-tests/test-conc-hashtable.c | 85 +- mono/unit-tests/test-memfuncs.c | 6 +- mono/unit-tests/test-mono-handle.c | 62 + mono/unit-tests/test-mono-linked-list-set.c | 4 +- mono/unit-tests/test-sgen-qsort.c | 2 +- mono/utils/Makefile.am | 25 +- mono/utils/Makefile.in | 116 +- mono/utils/atomic.c | 1 - mono/utils/bsearch.c | 2 +- mono/utils/checked-build.c | 595 ++++ mono/utils/checked-build.h | 172 + mono/utils/gc_wrapper.h | 1 + mono/utils/hazard-pointer.c | 12 +- mono/utils/mach-support-amd64.c | 25 + mono/utils/mach-support-arm.c | 65 +- mono/utils/mach-support-arm64.c | 178 + mono/utils/mach-support-unknown.c | 5 + mono/utils/mach-support-x86.c | 25 +- mono/utils/mach-support.h | 2 + mono/utils/memfuncs.c | 2 +- mono/utils/mono-codeman.c | 12 +- mono/utils/mono-compiler.h | 13 +- mono/utils/mono-conc-hashtable.c | 38 +- mono/utils/mono-conc-hashtable.h | 6 +- mono/utils/mono-context.c | 56 +- mono/utils/mono-context.h | 154 +- mono/utils/mono-coop-mutex.h | 128 + mono/utils/mono-coop-semaphore.h | 69 + mono/utils/mono-counters.c | 32 +- mono/utils/mono-hwcap-arm.c | 2 - mono/utils/mono-hwcap-arm.h | 1 - mono/utils/mono-linked-list-set.h | 2 +- ...ger-internal.h => mono-logger-internals.h} | 42 +- mono/utils/mono-logger.c | 66 +- ...-mmap-internal.h => mono-mmap-internals.h} | 2 +- mono/utils/mono-mmap.c | 2 +- mono/utils/mono-mutex.c | 186 - mono/utils/mono-once.h | 17 + mono/utils/{mono-mutex.h => mono-os-mutex.h} | 302 +- mono/utils/mono-os-semaphore.h | 277 ++ mono/utils/mono-proclib.c | 2 +- mono/utils/mono-semaphore.c | 172 - mono/utils/mono-semaphore.h | 63 - mono/utils/mono-sigcontext.h | 2 +- mono/utils/mono-stack-unwinding.h | 6 +- mono/utils/mono-threads-api.h | 69 + mono/utils/mono-threads-coop.c | 275 +- mono/utils/mono-threads-coop.h | 98 +- mono/utils/mono-threads-linux.c | 2 +- mono/utils/mono-threads-mach-abort-syscall.c | 80 + mono/utils/mono-threads-mach.c | 68 +- mono/utils/mono-threads-posix-abort-syscall.c | 44 + mono/utils/mono-threads-posix-signals.c | 315 ++ mono/utils/mono-threads-posix-signals.h | 31 + mono/utils/mono-threads-posix.c | 347 +- mono/utils/mono-threads-state-machine.c | 31 +- .../mono-threads-windows-abort-syscall.c | 49 + mono/utils/mono-threads-windows.c | 67 +- mono/utils/mono-threads.c | 595 +++- mono/utils/mono-threads.h | 125 +- mono/utils/networking-posix.c | 5 +- mono/utils/valgrind.h.REMOVED.git-id | 2 +- msvc/Makefile.in | 6 +- msvc/eglib.vcxproj | 8 +- msvc/genmdesc.vcxproj | 30 +- msvc/libgc.vcxproj | 8 +- msvc/libmono.vcxproj | 177 +- msvc/libmonoruntime.vcxproj | 20 +- msvc/libmonoutils.vcxproj | 27 +- msvc/libtest.vcxproj | 38 +- msvc/mono.def | 85 +- msvc/mono.sln | 47 +- msvc/mono.vcxproj | 44 +- msvc/monodiet.vcxproj | 209 -- msvc/monodis.vcxproj | 51 +- msvc/monograph.vcxproj | 46 +- msvc/monoposixhelper.vcxproj | 35 +- msvc/pedump.vcxproj | 73 +- msvc/profiler-codeanalyst.vcxproj | 180 - msvc/profiler-cov.vcxproj | 173 - msvc/profiler-logging.vcxproj | 165 - msvc/test-invoke.vcxproj | 28 +- msvc/test-metadata.vcxproj | 28 +- msvc/test_eglib.vcxproj | 28 +- msvc/teste.vcxproj | 28 +- msvc/winsetup.bat | 1 + po/Makefile.in | 6 +- po/mcs/de.gmo | Bin 5406 -> 5406 bytes po/mcs/de.po.REMOVED.git-id | 2 +- po/mcs/es.gmo | Bin 16329 -> 16329 bytes po/mcs/es.po.REMOVED.git-id | 2 +- po/mcs/ja.gmo | Bin 20863 -> 20863 bytes po/mcs/ja.po.REMOVED.git-id | 2 +- po/mcs/mcs.pot | 960 ++--- po/mcs/pt_BR.gmo | Bin 73161 -> 73161 bytes po/mcs/pt_BR.po.REMOVED.git-id | 2 +- runtime/Makefile.am | 20 +- runtime/Makefile.in | 25 +- runtime/mono-wrapper.in | 3 +- samples/Makefile.in | 6 +- scripts/Makefile.am | 4 +- scripts/Makefile.in | 12 +- scripts/mono-find-provides.in | 4 +- scripts/mono-find-requires.in | 2 + scripts/xbuild.in | 2 +- support/Makefile.am | 5 +- support/Makefile.in | 35 +- support/map.c.REMOVED.git-id | 2 +- support/map.h.REMOVED.git-id | 2 +- support/mph.h | 13 +- support/serial.c | 10 +- support/signal.c | 214 +- support/stdlib.c | 7 + support/sys-socket.c | 140 + support/sys-stat.c | 6 +- support/zlib-helper.c | 2 +- tools/Makefile.in | 6 +- tools/locale-builder/DateTimeFormatEntry.cs | 5 - tools/locale-builder/Driver.cs | 28 +- tools/locale-builder/Makefile.in | 6 +- .../locale-builder/Patterns.cs.REMOVED.git-id | 2 +- tools/monograph/Makefile.in | 6 +- tools/sgen/Makefile.in | 6 +- tools/sgen/sgen-grep-binprot.c | 18 +- winconfig.h | 20 +- 4097 files changed, 122406 insertions(+), 82300 deletions(-) create mode 100644 acceptance-tests/Makefile.am.REMOVED.git-id create mode 100644 acceptance-tests/Makefile.in.REMOVED.git-id create mode 100644 acceptance-tests/README.md create mode 100644 acceptance-tests/SUBMODULES.json create mode 100644 acceptance-tests/versions.mk create mode 100755 acceptance-tests/versions.py create mode 100644 code_of_conduct.md create mode 100644 data/lldb/monobt.py create mode 100644 eglib/src/Makefile.in delete mode 100644 eglib/src/Makefile.in.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Accessibility.dll create mode 100644 external/binary-reference-assemblies/v4.5/Commons.Xml.Relaxng.dll create mode 100644 external/binary-reference-assemblies/v4.5/CustomMarshalers.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Collections.Concurrent.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Collections.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ComponentModel.Annotations.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ComponentModel.EventBasedAsync.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ComponentModel.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Contracts.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Debug.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tools.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tracing.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Dynamic.Runtime.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Globalization.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.IO.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Linq.Expressions.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Linq.Parallel.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Linq.Queryable.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Linq.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Net.NetworkInformation.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Net.Primitives.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Net.Requests.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ObjectModel.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.ILGeneration.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.Lightweight.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Extensions.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Primitives.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Reflection.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Resources.ResourceManager.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Extensions.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.InteropServices.WindowsRuntime.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.InteropServices.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Numerics.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Json.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Primitives.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Xml.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Runtime.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Security.Principal.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Duplex.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Http.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.NetTcp.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Primitives.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Security.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Text.Encoding.Extensions.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Text.Encoding.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Text.RegularExpressions.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.Parallel.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Threading.Timer.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Threading.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Xml.ReaderWriter.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Xml.XDocument.dll create mode 100644 external/binary-reference-assemblies/v4.5/Facades/System.Xml.XmlSerializer.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.CJK.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.MidEast.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.Other.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.Rare.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.West.dll create mode 100644 external/binary-reference-assemblies/v4.5/I18N.dll create mode 100644 external/binary-reference-assemblies/v4.5/IBM.Data.DB2.dll create mode 100644 external/binary-reference-assemblies/v4.5/ICSharpCode.SharpZipLib.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Build.Engine.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Build.Framework.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Build.Tasks.v4.0.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Build.Utilities.v4.0.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Build.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.CSharp.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.VisualC.dll create mode 100644 external/binary-reference-assemblies/v4.5/Microsoft.Web.Infrastructure.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.C5.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.CSharp.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Cairo.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Cecil.Mdb.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Cecil.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.CodeContracts.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.CompilerServices.SymbolWriter.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Data.Sqlite.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Data.Tds.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Debugger.Soft.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Http.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Management.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Messaging.RabbitMQ.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Messaging.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Options.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Parallel.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Posix.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Security.Win32.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Security.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Simd.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.Tasklets.dll create mode 100644 external/binary-reference-assemblies/v4.5/Mono.WebBrowser.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/Mono.XBuild.Tasks.dll create mode 100644 external/binary-reference-assemblies/v4.5/Novell.Directory.Ldap.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/PEAPI.dll create mode 100644 external/binary-reference-assemblies/v4.5/RabbitMQ.Client.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/SMDiagnostics.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ComponentModel.Composition.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.ComponentModel.DataAnnotations.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Configuration.Install.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Configuration.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Core.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.DataSetExtensions.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.Entity.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.Linq.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.OracleClient.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.Services.Client.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.Services.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Data.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Design.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.DirectoryServices.Protocols.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.DirectoryServices.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Drawing.Design.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Drawing.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Dynamic.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.EnterpriseServices.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.IO.Compression.FileSystem.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.IO.Compression.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.IdentityModel.Selectors.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.IdentityModel.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Json.Microsoft.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Json.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Management.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Messaging.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Net.Http.Formatting.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Net.Http.WebRequest.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Net.Http.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Net.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Numerics.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Core.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Debugger.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Experimental.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Interfaces.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Linq.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Observable.Aliases.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.PlatformServices.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Providers.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Runtime.Remoting.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Forms.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Threading.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Runtime.Caching.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Runtime.DurableInstancing.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Runtime.Remoting.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.Formatters.Soap.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Security.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.Activation.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.Discovery.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.Internals.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.Routing.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.Web.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceModel.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.ServiceProcess.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Threading.Tasks.Dataflow.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Transactions.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Abstractions.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.ApplicationServices.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.DynamicData.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Extensions.Design.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Extensions.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Http.SelfHost.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Http.WebHost.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Http.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Mvc.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Razor.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Routing.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.Services.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.WebPages.Deployment.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.WebPages.Razor.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.WebPages.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Web.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Windows.Forms.DataVisualization.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Windows.Forms.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.Windows.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Xaml.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Xml.Linq.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Xml.Serialization.dll create mode 100644 external/binary-reference-assemblies/v4.5/System.Xml.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/System.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/SystemWebTestShim.dll create mode 100644 external/binary-reference-assemblies/v4.5/WebMatrix.Data.dll create mode 100644 external/binary-reference-assemblies/v4.5/WindowsBase.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/cscompmgd.dll create mode 100644 external/binary-reference-assemblies/v4.5/monodoc.dll.REMOVED.git-id create mode 100644 external/binary-reference-assemblies/v4.5/mscorlib.dll.REMOVED.git-id create mode 100644 external/ikdasm/TableDumper.cs rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/AssemblyInfo.cs (90%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/SR.Designer.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ArgumentIdentifierTrimConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/AssignDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CancellationScopeDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewInterface.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewModel.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBoxIsEnabledConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseLabelVisibilityConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CatchDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ComboBoxHelper.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CompensableActivityDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ConnectionPointType.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DelegateArgumentsValueEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DesignerMetadata.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DisplayNameConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DoWhileDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooser.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooserViewModel.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyToTooltipConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemShowExpandedMultiValueConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemWrapper.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpressionToExpressionTextConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericForEachWithBodyFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericParallelForEachWithBodyFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/PickWithTwoBranchesFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/StateMachineWithInitialStateFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FakeRoot.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs (99%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionLabelFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchCaseEditorDialog.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDefaultLinkFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLabelFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLink.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkCasePropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkMultiValueConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartConnectionPointsAdorner.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Container.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Helpers.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChangeReactions.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChanges.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.xaml.cs.REMOVED.git-id (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesignerCommands.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAdorner.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAutomationPeer.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartFreeFormPanel.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartResizeGrip.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartSizeFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ForEachDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FreeFormPanelUtilities.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericFlowSwitchHelper.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericTypeArgumentConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextMaxWidthConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IFlowSwitch.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IfElseDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InteropDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateValidationFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeMethodDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsLastSelectedItemConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsStateRootDesignerConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/LocationChangedEventArgs.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MaxValueConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MorphHelpers.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NoPersistScopeDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NotConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelSeparator.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickBranchDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocator.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocatorFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PropertyNames.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/RegisterMetadataDelayedWorker.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ReorderableListEditor.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SelectedPropertyNameChangedEventArgs.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SequenceDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartNode.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartSymbol.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateConnectionPointToolTip.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.CompositeView.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChangeReactions.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChanges.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.Utilities.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.xaml.cs.REMOVED.git-id (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerResizeGrip.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateLinkButtonToolTipConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineConnetionPointsAdorner.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineFreeFormPanel.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocator.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocatorFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchTryCatchDesignerHelper.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/DesignerStyleDictionary.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/EditorCategoryTemplateDictionary.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/StringResourceDictionary.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransactionScopeDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionReorderChange.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TryCatchDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/VerticalConnector.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WhileDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WriteLineDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityDesignerHelper.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityXRefPropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/ArgumentCollectionPropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesignerOptions.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDialog.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionPropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ActivityXRefConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingEditor.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingPropertyValueEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentButtonTitleConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentCorrelationTypeExpander.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentDialogViewModel.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveMessageContentSearchableStringConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveParametersContentSearchableStringConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendMessageContentSearchableStringConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendParametersContentSearchableStringConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/XPathMessageQuerySearchableStringConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelatesOnValueEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationDataDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerValueEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationScopeDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/EndpointDesigner.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/ReceiveAndSendReplyFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/SendAndReceiveReplyFactory.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/InitializeCorrelationDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQueryEditor.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQuerySetDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessagingContentPropertyEditorResources.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentDialog.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentPropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyValidationFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentDialog.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentPropertyEditor.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyDesigner.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyValidationFeature.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ServiceContractImporter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TransactedReceiveScope.xaml.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TypeToTreeConverter.cs (100%) rename external/referencesource/{System.Activities.Presentation => }/System.Activities.Core.Presentation/System/ServiceModel/Presentation/ServiceDesigner.xaml.cs (100%) create mode 100644 external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/CategoryContainerCommands.cs create mode 100644 external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/ExtensibilityMetadataHelper.cs create mode 100644 external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/PropertyContainerPopupHelper.cs create mode 100644 external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppContextDefaultValues.Default.cs create mode 100644 external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppSettings.cs create mode 100644 external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/LocalAppContextSwitches.cs create mode 100644 external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/AppContextDefaultValues.cs create mode 100644 external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/LocalAppContext.cs create mode 100644 external/referencesource/System.Configuration/System/Configuration/FipsAwareEncryptedXml.cs create mode 100644 external/referencesource/System.Core/Microsoft/Scripting/Ast/IDynamicExpression.cs create mode 100644 external/referencesource/System.Core/System/IO/Pipes/IOCancellationHelper.cs create mode 100644 external/referencesource/System.Core/System/Security/Cryptography/RsaCng.cs create mode 100644 external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/ECDsaCertificateExtensions.cs create mode 100644 external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/RSACertificateExtensions.cs create mode 100644 external/referencesource/System.Data/System/Data/Common/SqlEventSource.cs create mode 100644 external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs create mode 100644 external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Algorithm.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256EncryptionKey.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Factory.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcAlgorithm.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcFactory.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithm.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactory.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactoryList.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionType.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlClientSymmetricKey.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCertificateStoreProvider.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCngProvider.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCspProvider.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionKeyStoreProvider.cs delete mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs.REMOVED.git-id delete mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs.REMOVED.git-id create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlSecurityUtility.cs create mode 100644 external/referencesource/System.Data/System/Data/SqlClient/SqlSymmetricKeyCache.cs create mode 100644 external/referencesource/System.IdentityModel/InternalApis/Clr/inc/AppContextDefaultValues.cs create mode 100644 external/referencesource/System.IdentityModel/InternalApis/Clr/inc/LocalAppContext.cs create mode 100644 external/referencesource/System.IdentityModel/System/AppContextDefaultValues.cs create mode 100644 external/referencesource/System.IdentityModel/System/IdentityModel/LocalAppContextSwitches.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/HashCodeHelper.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/JITIntrinsicAttribute.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Matrix3x2.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Matrix4x4.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Plane.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Quaternion.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector2.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector2_Intrinsics.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector3.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector3_Intrinsics.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector4.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector4_Intrinsics.cs create mode 100644 external/referencesource/System.Numerics/System/Numerics/Vector_Operations.cs create mode 100644 external/referencesource/System.ServiceModel/InternalApis/Clr/inc/AppContextDefaultValues.cs create mode 100644 external/referencesource/System.ServiceModel/InternalApis/Clr/inc/LocalAppContext.cs create mode 100644 external/referencesource/System.ServiceModel/System/ServiceModel/AppContextDefaultValues.Default.cs create mode 100644 external/referencesource/System.ServiceModel/System/ServiceModel/LocalAppContextSwitches.cs create mode 100644 external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAppSettings.cs create mode 100644 external/referencesource/System.ServiceModel/System/ServiceModel/StringUtil.cs create mode 100644 external/referencesource/System.Web/Hosting/TlsTokenBindingInfo.cs create mode 100644 external/referencesource/System.Web/ITlsTokenBindingInfo.cs create mode 100644 external/referencesource/System.Web/IntraPartitionAPIs/xsp/PerfCounterEnum.cs create mode 100644 external/referencesource/System.Web/UI/WebControls/SelectResult.cs create mode 100644 external/referencesource/System.Web/Util/HeapAllocHandle.cs create mode 100644 external/referencesource/System.Web/Util/RegexUtil.cs create mode 100644 external/referencesource/System.Web/Util/TlsTokenBindingHandle.cs create mode 100644 external/referencesource/System.Workflow.Runtime/Common/Shared/DigestComparer.cs create mode 100644 external/referencesource/System.Xml/InternalApis/Clr/inc/AppContextDefaultValues.cs create mode 100644 external/referencesource/System.Xml/InternalApis/Clr/inc/LocalAppContext.cs create mode 100644 external/referencesource/System.Xml/System/Xml/Core/AppContextDefaultValues.Defaults.cs create mode 100644 external/referencesource/System.Xml/System/Xml/Core/LocalAppContextSwitches.cs create mode 100644 external/referencesource/System/InternalApis/Clr/inc/AppContextDefaultValues.cs create mode 100644 external/referencesource/System/InternalApis/Clr/inc/LocalAppContext.cs create mode 100644 external/referencesource/System/net/System/IriHelper.cs create mode 100644 external/referencesource/System/net/System/Net/NetRegistryConfiguration.cs create mode 100644 external/referencesource/System/net/System/Net/_AuthenticationManager2.cs create mode 100644 external/referencesource/System/net/System/Net/_AuthenticationManagerBase.cs create mode 100644 external/referencesource/System/net/System/Net/_AuthenticationManagerDefault.cs create mode 100644 external/referencesource/System/net/System/Net/_IAuthenticationManager.cs create mode 100644 external/referencesource/System/net/System/Net/_PrefixLookup.cs create mode 100644 external/referencesource/System/security/system/security/Authentication/ExtendedProtection/TokenBinding.cs create mode 100644 external/referencesource/System/sys/AppContextDefaultValues.Defaults.cs create mode 100644 external/referencesource/System/sys/LocalAppContextSwitches.cs create mode 100644 external/referencesource/XamlBuildTask/Microsoft/Build/Tasks/Xaml/XamlBuildTaskLeaseLifetimeHelper.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContext.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContextDefaultValues.Defaults.Central.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContextDefaultValues.Defaults.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContextDefaultValues.DesktopOverrides.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContextDefaultValues.cs create mode 100644 external/referencesource/mscorlib/system/AppContext/AppContextSwitches.cs create mode 100644 external/referencesource/mscorlib/system/AppDomainSetup.cs create mode 100644 external/referencesource/mscorlib/system/FormattableString.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/StubEnvironment.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/ArrayTypeInfo.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/ConcurrentSet.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/ConcurrentSetItem.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/DataCollector.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EmptyStruct.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EnumHelper.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EnumerableTypeInfo.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventDataAttribute.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventFieldAttribute.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventFieldFormat.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventIgnoreAttribute.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventPayload.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventSourceActivity.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/EventSourceOptions.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/FieldMetadata.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/InvokeTypeInfo.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/NameInfo.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/PropertyAccessor.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/PropertyAnalysis.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/SimpleEventTypes.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/SimpleTypeInfos.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/Statics.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingDataCollector.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingDataType.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingEventSource.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingEventTraits.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingEventTypes.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingMetadataCollector.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingTypeInfo.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TraceLoggingTypeInfo_T.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/TraceLogging/TypeAnalysis.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/activitytracker.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/eventactivityoptions.cs create mode 100644 external/referencesource/mscorlib/system/diagnostics/eventing/eventsource.cs.REMOVED.git-id create mode 100644 external/referencesource/mscorlib/system/globalization/CalendricalCalculationsHelper.cs create mode 100644 external/referencesource/mscorlib/system/paramsarray.cs create mode 100644 external/referencesource/mscorlib/system/runtime/compilerservices/FormattableStringFactory.cs create mode 100644 external/referencesource/mscorlib/system/runtime/compilerservices/disableprivatereflectionattribute.cs create mode 100644 external/referencesource/mscorlib/system/runtime/versioning/NonVersionableAttribute.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/HashAlgorithmName.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/RSAEncryptionPadding.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/RSAEncryptionPaddingMode.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/RSASignaturePadding.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/RSASignaturePaddingMode.cs create mode 100644 external/referencesource/mscorlib/system/security/cryptography/capinative.cs create mode 100644 external/referencesource/mscorlib/system/text/encodingprovider.cs create mode 100644 external/referencesource/mscorlib/system/threading/asynclocal.cs create mode 100644 external/referencesource/mscorlib/system/threading/waithandleExtensions.cs rename mcs/build/profiles/{net_4_5.make => net_4_x.make} (68%) create mode 100644 mcs/class/Facades/Microsoft.Win32.Primitives/AssemblyInfo.cs create mode 100644 mcs/class/Facades/Microsoft.Win32.Primitives/Makefile create mode 100644 mcs/class/Facades/Microsoft.Win32.Primitives/Microsoft.Win32.Primitives.dll.sources rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/IDataflowBlock.cs => Facades/Microsoft.Win32.Primitives/TypeForwarders.cs} (81%) create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry.AccessControl/AssemblyInfo.cs create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry.AccessControl/Makefile create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry.AccessControl/Microsoft.Win32.Registry.AccessControl.dll.sources create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry.AccessControl/TypeForwarders.cs create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry/AssemblyInfo.cs create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry/Makefile create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry/Microsoft.Win32.Registry.dll.sources create mode 100644 mcs/class/Facades/Microsoft.Win32.Registry/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.AppContext/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.AppContext/Makefile create mode 100644 mcs/class/Facades/System.AppContext/System.AppContext.dll.sources create mode 100644 mcs/class/Facades/System.AppContext/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Collections.NonGeneric/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Collections.NonGeneric/Makefile create mode 100644 mcs/class/Facades/System.Collections.NonGeneric/System.Collections.NonGeneric.dll.sources create mode 100644 mcs/class/Facades/System.Collections.NonGeneric/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Collections.Specialized/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Collections.Specialized/Makefile create mode 100644 mcs/class/Facades/System.Collections.Specialized/System.Collections.Specialized.dll.sources create mode 100644 mcs/class/Facades/System.Collections.Specialized/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.ComponentModel.Primitives/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.ComponentModel.Primitives/Makefile create mode 100644 mcs/class/Facades/System.ComponentModel.Primitives/System.ComponentModel.Primitives.dll.sources create mode 100644 mcs/class/Facades/System.ComponentModel.Primitives/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.ComponentModel.TypeConverter/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.ComponentModel.TypeConverter/Makefile create mode 100644 mcs/class/Facades/System.ComponentModel.TypeConverter/System.ComponentModel.TypeConverter.dll.sources create mode 100644 mcs/class/Facades/System.ComponentModel.TypeConverter/TypeForwarders.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/DataflowLinkOptions.cs => Facades/System.Console/AssemblyInfo.cs} (57%) create mode 100644 mcs/class/Facades/System.Console/Makefile create mode 100644 mcs/class/Facades/System.Console/System.Console.dll.sources create mode 100644 mcs/class/Facades/System.Console/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Data.Common/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Data.Common/Makefile create mode 100644 mcs/class/Facades/System.Data.Common/System.Data.Common.dll.sources create mode 100644 mcs/class/Facades/System.Data.Common/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Data.SqlClient/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Data.SqlClient/Makefile create mode 100644 mcs/class/Facades/System.Data.SqlClient/System.Data.SqlClient.dll.sources create mode 100644 mcs/class/Facades/System.Data.SqlClient/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.FileVersionInfo/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.FileVersionInfo/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.FileVersionInfo/System.Diagnostics.FileVersionInfo.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.FileVersionInfo/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.PerformanceCounter/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.PerformanceCounter/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.PerformanceCounter/System.Diagnostics.PerformanceCounter.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.PerformanceCounter/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.Process/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.Process/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.Process/System.Diagnostics.Process.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.Process/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.StackTrace/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.StackTrace/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.StackTrace/System.Diagnostics.StackTrace.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.StackTrace/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TextWriterTraceListener/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TextWriterTraceListener/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.TextWriterTraceListener/System.Diagnostics.TextWriterTraceListener.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.TextWriterTraceListener/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TraceEvent/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TraceEvent/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.TraceEvent/System.Diagnostics.TraceEvent.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.TraceEvent/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TraceSource/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Diagnostics.TraceSource/Makefile create mode 100644 mcs/class/Facades/System.Diagnostics.TraceSource/System.Diagnostics.TraceSource.dll.sources create mode 100644 mcs/class/Facades/System.Diagnostics.TraceSource/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Globalization.Calendars/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Globalization.Calendars/Makefile create mode 100644 mcs/class/Facades/System.Globalization.Calendars/System.Globalization.Calendars.dll.sources create mode 100644 mcs/class/Facades/System.Globalization.Calendars/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Globalization.Extensions/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Globalization.Extensions/Makefile create mode 100644 mcs/class/Facades/System.Globalization.Extensions/System.Globalization.Extensions.dll.sources create mode 100644 mcs/class/Facades/System.Globalization.Extensions/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.Compression.ZipFile/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.Compression.ZipFile/Makefile create mode 100644 mcs/class/Facades/System.IO.Compression.ZipFile/System.IO.Compression.ZipFile.dll.sources create mode 100644 mcs/class/Facades/System.IO.Compression.ZipFile/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.AccessControl/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.AccessControl/Makefile create mode 100644 mcs/class/Facades/System.IO.FileSystem.AccessControl/System.IO.FileSystem.AccessControl.dll.sources create mode 100644 mcs/class/Facades/System.IO.FileSystem.AccessControl/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.DriveInfo/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.DriveInfo/Makefile create mode 100644 mcs/class/Facades/System.IO.FileSystem.DriveInfo/System.IO.FileSystem.DriveInfo.dll.sources create mode 100644 mcs/class/Facades/System.IO.FileSystem.DriveInfo/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.Primitives/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.Primitives/Makefile create mode 100644 mcs/class/Facades/System.IO.FileSystem.Primitives/System.IO.FileSystem.Primitives.dll.sources create mode 100644 mcs/class/Facades/System.IO.FileSystem.Primitives/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.Watcher/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem.Watcher/Makefile create mode 100644 mcs/class/Facades/System.IO.FileSystem.Watcher/System.IO.FileSystem.Watcher.dll.sources create mode 100644 mcs/class/Facades/System.IO.FileSystem.Watcher/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.FileSystem/Makefile create mode 100644 mcs/class/Facades/System.IO.FileSystem/System.IO.FileSystem.dll.sources create mode 100644 mcs/class/Facades/System.IO.FileSystem/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.IsolatedStorage/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.IsolatedStorage/Makefile create mode 100644 mcs/class/Facades/System.IO.IsolatedStorage/System.IO.IsolatedStorage.dll.sources create mode 100644 mcs/class/Facades/System.IO.IsolatedStorage/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.MemoryMappedFiles/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.MemoryMappedFiles/Makefile create mode 100644 mcs/class/Facades/System.IO.MemoryMappedFiles/System.IO.MemoryMappedFiles.dll.sources create mode 100644 mcs/class/Facades/System.IO.MemoryMappedFiles/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.Pipes/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.Pipes/Makefile create mode 100644 mcs/class/Facades/System.IO.Pipes/System.IO.Pipes.dll.sources create mode 100644 mcs/class/Facades/System.IO.Pipes/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.IO.UnmanagedMemoryStream/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.IO.UnmanagedMemoryStream/Makefile create mode 100644 mcs/class/Facades/System.IO.UnmanagedMemoryStream/System.IO.UnmanagedMemoryStream.dll.sources create mode 100644 mcs/class/Facades/System.IO.UnmanagedMemoryStream/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.AuthenticationManager/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.AuthenticationManager/Makefile create mode 100644 mcs/class/Facades/System.Net.AuthenticationManager/System.Net.AuthenticationManager.dll.sources create mode 100644 mcs/class/Facades/System.Net.AuthenticationManager/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Cache/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Cache/Makefile create mode 100644 mcs/class/Facades/System.Net.Cache/System.Net.Cache.dll.sources create mode 100644 mcs/class/Facades/System.Net.Cache/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Http.WebRequestHandler/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Http.WebRequestHandler/Makefile create mode 100644 mcs/class/Facades/System.Net.Http.WebRequestHandler/System.Net.Http.WebRequestHandler.dll.sources create mode 100644 mcs/class/Facades/System.Net.Http.WebRequestHandler/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.HttpListener/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.HttpListener/Makefile create mode 100644 mcs/class/Facades/System.Net.HttpListener/System.Net.HttpListener.dll.sources create mode 100644 mcs/class/Facades/System.Net.HttpListener/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Mail/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Mail/Makefile create mode 100644 mcs/class/Facades/System.Net.Mail/System.Net.Mail.dll.sources create mode 100644 mcs/class/Facades/System.Net.Mail/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.NameResolution/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.NameResolution/Makefile create mode 100644 mcs/class/Facades/System.Net.NameResolution/System.Net.NameResolution.dll.sources create mode 100644 mcs/class/Facades/System.Net.NameResolution/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Security/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Security/Makefile create mode 100644 mcs/class/Facades/System.Net.Security/System.Net.Security.dll.sources create mode 100644 mcs/class/Facades/System.Net.Security/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.ServicePoint/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.ServicePoint/Makefile create mode 100644 mcs/class/Facades/System.Net.ServicePoint/System.Net.ServicePoint.dll.sources create mode 100644 mcs/class/Facades/System.Net.ServicePoint/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Sockets/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Sockets/Makefile create mode 100644 mcs/class/Facades/System.Net.Sockets/System.Net.Sockets.dll.sources create mode 100644 mcs/class/Facades/System.Net.Sockets/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.Utilities/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.Utilities/Makefile create mode 100644 mcs/class/Facades/System.Net.Utilities/System.Net.Utilities.dll.sources create mode 100644 mcs/class/Facades/System.Net.Utilities/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.WebHeaderCollection/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.WebHeaderCollection/Makefile create mode 100644 mcs/class/Facades/System.Net.WebHeaderCollection/System.Net.WebHeaderCollection.dll.sources create mode 100644 mcs/class/Facades/System.Net.WebHeaderCollection/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.WebSockets.Client/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.WebSockets.Client/Makefile create mode 100644 mcs/class/Facades/System.Net.WebSockets.Client/System.Net.WebSockets.Client.dll.sources create mode 100644 mcs/class/Facades/System.Net.WebSockets.Client/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Net.WebSockets/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Net.WebSockets/Makefile create mode 100644 mcs/class/Facades/System.Net.WebSockets/System.Net.WebSockets.dll.sources create mode 100644 mcs/class/Facades/System.Net.WebSockets/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Private.CoreLib.InteropServices/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Private.CoreLib.InteropServices/Makefile create mode 100644 mcs/class/Facades/System.Private.CoreLib.InteropServices/System.Private.CoreLib.InteropServices.dll.sources create mode 100644 mcs/class/Facades/System.Private.CoreLib.InteropServices/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Private.CoreLib.Threading/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Private.CoreLib.Threading/Makefile create mode 100644 mcs/class/Facades/System.Private.CoreLib.Threading/System.Private.CoreLib.Threading.dll.sources create mode 100644 mcs/class/Facades/System.Private.CoreLib.Threading/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Reflection.TypeExtensions/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Reflection.TypeExtensions/Makefile create mode 100644 mcs/class/Facades/System.Reflection.TypeExtensions/System.Reflection.TypeExtensions.dll.sources create mode 100644 mcs/class/Facades/System.Reflection.TypeExtensions/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Resources.ReaderWriter/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Resources.ReaderWriter/Makefile create mode 100644 mcs/class/Facades/System.Resources.ReaderWriter/System.Resources.ReaderWriter.dll.sources create mode 100644 mcs/class/Facades/System.Resources.ReaderWriter/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Runtime.CompilerServices.VisualC/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Runtime.CompilerServices.VisualC/Makefile create mode 100644 mcs/class/Facades/System.Runtime.CompilerServices.VisualC/System.Runtime.CompilerServices.VisualC.dll.sources create mode 100644 mcs/class/Facades/System.Runtime.CompilerServices.VisualC/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Runtime.Handles/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Runtime.Handles/Makefile create mode 100644 mcs/class/Facades/System.Runtime.Handles/System.Runtime.Handles.dll.sources create mode 100644 mcs/class/Facades/System.Runtime.Handles/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.AccessControl/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.AccessControl/Makefile create mode 100644 mcs/class/Facades/System.Security.AccessControl/System.Security.AccessControl.dll.sources create mode 100644 mcs/class/Facades/System.Security.AccessControl/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Claims/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Claims/Makefile create mode 100644 mcs/class/Facades/System.Security.Claims/System.Security.Claims.dll.sources create mode 100644 mcs/class/Facades/System.Security.Claims/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.DeriveBytes/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.DeriveBytes/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.DeriveBytes/System.Security.Cryptography.DeriveBytes.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.DeriveBytes/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encoding/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encoding/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encoding/System.Security.Cryptography.Encoding.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encoding/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.Aes/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.Aes/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.Aes/System.Security.Cryptography.Encryption.Aes.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.Aes/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman/System.Security.Cryptography.Encryption.ECDiffieHellman.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman/TypeForwarders.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/GroupingDataflowBlockOptions.cs => Facades/System.Security.Cryptography.Encryption.ECDsa/AssemblyInfo.cs} (55%) create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDsa/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDsa/System.Security.Cryptography.Encryption.ECDsa.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption.ECDsa/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption/System.Security.Cryptography.Encryption.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Encryption/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing.Algorithms/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing.Algorithms/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing.Algorithms/System.Security.Cryptography.Hashing.Algorithms.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing.Algorithms/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing/System.Security.Cryptography.Hashing.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.Hashing/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.ProtectedData/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.ProtectedData/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.ProtectedData/System.Security.Cryptography.ProtectedData.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.ProtectedData/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.RSA/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.RSA/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.RSA/System.Security.Cryptography.RSA.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.RSA/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.RandomNumberGenerator/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.RandomNumberGenerator/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.RandomNumberGenerator/System.Security.Cryptography.RandomNumberGenerator.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.RandomNumberGenerator/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.X509Certificates/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Cryptography.X509Certificates/Makefile create mode 100644 mcs/class/Facades/System.Security.Cryptography.X509Certificates/System.Security.Cryptography.X509Certificates.dll.sources create mode 100644 mcs/class/Facades/System.Security.Cryptography.X509Certificates/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.Principal.Windows/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.Principal.Windows/Makefile create mode 100644 mcs/class/Facades/System.Security.Principal.Windows/System.Security.Principal.Windows.dll.sources create mode 100644 mcs/class/Facades/System.Security.Principal.Windows/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Security.SecureString/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Security.SecureString/Makefile create mode 100644 mcs/class/Facades/System.Security.SecureString/System.Security.SecureString.dll.sources create mode 100644 mcs/class/Facades/System.Security.SecureString/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.ServiceModel.Duplex/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.ServiceModel.Duplex/Makefile create mode 100644 mcs/class/Facades/System.ServiceModel.Duplex/System.ServiceModel.Duplex.dll.sources create mode 100644 mcs/class/Facades/System.ServiceModel.Duplex/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.ServiceModel.NetTcp/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.ServiceModel.NetTcp/Makefile create mode 100644 mcs/class/Facades/System.ServiceModel.NetTcp/System.ServiceModel.NetTcp.dll.sources create mode 100644 mcs/class/Facades/System.ServiceModel.NetTcp/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.ServiceProcess.ServiceController/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.ServiceProcess.ServiceController/Makefile create mode 100644 mcs/class/Facades/System.ServiceProcess.ServiceController/System.ServiceProcess.ServiceController.dll.sources create mode 100644 mcs/class/Facades/System.ServiceProcess.ServiceController/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Threading.AccessControl/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Threading.AccessControl/Makefile create mode 100644 mcs/class/Facades/System.Threading.AccessControl/System.Threading.AccessControl.dll.sources create mode 100644 mcs/class/Facades/System.Threading.AccessControl/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Threading.Overlapped/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Threading.Overlapped/Makefile create mode 100644 mcs/class/Facades/System.Threading.Overlapped/System.Threading.Overlapped.dll.sources create mode 100644 mcs/class/Facades/System.Threading.Overlapped/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Threading.Thread/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Threading.Thread/Makefile create mode 100644 mcs/class/Facades/System.Threading.Thread/System.Threading.Thread.dll.sources create mode 100644 mcs/class/Facades/System.Threading.Thread/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Threading.ThreadPool/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Threading.ThreadPool/Makefile create mode 100644 mcs/class/Facades/System.Threading.ThreadPool/System.Threading.ThreadPool.dll.sources create mode 100644 mcs/class/Facades/System.Threading.ThreadPool/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Xml.XPath.XDocument/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Xml.XPath.XDocument/Makefile create mode 100644 mcs/class/Facades/System.Xml.XPath.XDocument/System.Xml.XPath.XDocument.dll.sources create mode 100644 mcs/class/Facades/System.Xml.XPath.XDocument/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Xml.XPath/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Xml.XPath/Makefile create mode 100644 mcs/class/Facades/System.Xml.XPath/System.Xml.XPath.dll.sources create mode 100644 mcs/class/Facades/System.Xml.XPath/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Xml.XmlDocument/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Xml.XmlDocument/Makefile create mode 100644 mcs/class/Facades/System.Xml.XmlDocument/System.Xml.XmlDocument.dll.sources create mode 100644 mcs/class/Facades/System.Xml.XmlDocument/TypeForwarders.cs create mode 100644 mcs/class/Facades/System.Xml.Xsl.Primitives/AssemblyInfo.cs create mode 100644 mcs/class/Facades/System.Xml.Xsl.Primitives/Makefile create mode 100644 mcs/class/Facades/System.Xml.Xsl.Primitives/System.Xml.Xsl.Primitives.dll.sources rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/IReceivableSourceBlock.cs => Facades/System.Xml.Xsl.Primitives/TypeForwarders.cs} (72%) create mode 100644 mcs/class/Facades/subdirs.make create mode 100644 mcs/class/Microsoft.Build.Tasks/Microsoft.Build.Tasks/XmlPeek.cs create mode 100644 mcs/class/Mono.CSharp/monotouch_tv_Mono.CSharp.dll.sources create mode 100644 mcs/class/Mono.Posix/Test/Mono.Unix.Native/SocketTest.cs create mode 100644 mcs/class/Mono.Security.Providers.DotNet/Makefile create mode 100644 mcs/class/Mono.Security.Providers.DotNet/Mono.Security.Providers.DotNet.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.DotNet/Mono.Security.Providers.DotNet/DotNetSslStreamImpl.cs create mode 100644 mcs/class/Mono.Security.Providers.DotNet/Mono.Security.Providers.DotNet/DotNetTlsProvider.cs create mode 100644 mcs/class/Mono.Security.Providers.DotNet/Properties/AssemblyInfo.cs create mode 100644 mcs/class/Mono.Security.Providers.DotNet/README.md create mode 100644 mcs/class/Mono.Security.Providers.NewSystemSource/Makefile create mode 100644 mcs/class/Mono.Security.Providers.NewSystemSource/Mono.Security.Providers.NewSystemSource.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.NewSystemSource/Properties/AssemblyInfo.cs create mode 100644 mcs/class/Mono.Security.Providers.NewSystemSource/README.md create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Makefile create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/ITlsConfiguration.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ExecutionDataflowBlockOptions.cs => Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/ITlsContext.cs} (55%) create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/MonoNewTlsStream.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/MonoNewTlsStreamFactory.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/NewTlsProvider.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/TlsContextWrapper.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Mono.Security.Providers.NewTls/TlsProviderFactory.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/Properties/AssemblyInfo.cs create mode 100644 mcs/class/Mono.Security.Providers.NewTls/mobile_Mono.Security.Providers.NewTls.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.NewTls/mobile_static_Mono.Security.Providers.NewTls.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.OldTls/Makefile create mode 100644 mcs/class/Mono.Security.Providers.OldTls/Mono.Security.Providers.OldTls.dll.sources create mode 100644 mcs/class/Mono.Security.Providers.OldTls/Mono.Security.Providers.OldTls/OldTlsProvider.cs create mode 100644 mcs/class/Mono.Security.Providers.OldTls/Properties/AssemblyInfo.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/Alert.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/BufferOffsetSize.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/CertificateValidationHelper.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ITargetBlock.cs => Mono.Security/Mono.Security.Interface/CipherAlgorithmType.cs} (74%) create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/CipherSuiteCode.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/ExchangeAlgorithmType.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/HashAlgorithmType.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/IBufferOffsetSize.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/IMonoSslStream.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/IMonoTlsContext.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/DataflowMessageStatus.cs => Mono.Security/Mono.Security.Interface/IMonoTlsEventSink.cs} (79%) rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ObserverDataflowBlock.cs => Mono.Security/Mono.Security.Interface/MonoTlsConnectionInfo.cs} (62%) create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsProvider.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsProviderFactory.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsSettings.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/README.md rename mcs/class/{System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializerSettings.cs => Mono.Security/Mono.Security.Interface/SecretParameters.cs} (61%) rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/DataflowMessageHeader.cs => Mono.Security/Mono.Security.Interface/SecureBuffer.cs} (52%) create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/TlsBuffer.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/TlsException.cs create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/TlsMultiBuffer.cs rename mcs/class/{System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/IPropagatorBlock.cs => Mono.Security/Mono.Security.Interface/TlsProtocolCode.cs} (79%) create mode 100644 mcs/class/Mono.Security/Mono.Security.Interface/TlsProtocols.cs create mode 100644 mcs/class/Mono.Security/mobile_Mono.Security.dll.sources create mode 100644 mcs/class/Mono.Security/mobile_static_Mono.Security.dll.sources create mode 100644 mcs/class/Mono.Security/monodroid_Mono.Security.dll.sources create mode 100644 mcs/class/Mono.Security/monotouch_tv_Mono.Security.dll.sources delete mode 100644 mcs/class/RabbitMQ.Client/src/client/net_2_0_RabbitMQ.Client.dll.sources delete mode 100644 mcs/class/RabbitMQ.Client/src/client/net_4_0_RabbitMQ.Client.dll.sources delete mode 100644 mcs/class/RabbitMQ.Client/src/client/net_4_5_RabbitMQ.Client.dll.sources create mode 100644 mcs/class/System.Core/monotouch_tv_System.Core.dll.sources create mode 100644 mcs/class/System.Core/monotouch_tv_runtime_System.Core.dll.sources create mode 100644 mcs/class/System.Core/monotouch_watch_runtime_System.Core.dll.sources rename mcs/class/System.Core/{net_4_5_System.Core.dll.sources => net_4_x_System.Core.dll.sources} (88%) delete mode 100644 mcs/class/System.Data.Services.Client/Client/AssemblyAttributes.cs delete mode 100644 mcs/class/System.Data.Services.Client/mobile_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/mobile_static_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/monodroid_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/monotouch_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/monotouch_watch_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/net_2_0_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/net_4_0_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/net_4_5_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/xammac_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services.Client/xammac_net_4_5_System.Data.Services.Client.dll.sources delete mode 100644 mcs/class/System.Data.Services/net_4_0_System.Data.Services.dll.sources delete mode 100644 mcs/class/System.Data.Services/net_4_5_System.Data.Services.dll.sources create mode 100644 mcs/class/System.Data/Microsoft.SqlServer.Server/SqlDataRecord.cs create mode 100644 mcs/class/System.Data/ReferenceSources/Res.cs delete mode 100644 mcs/class/System.Data/ReferenceSources/Res.cs.REMOVED.git-id rename mcs/class/System.Data/{app_test_net_4_5.config => app_test_net_4_x.config} (100%) create mode 100644 mcs/class/System.Data/monotouch_tv_System.Data.dll.sources rename mcs/class/System.Data/{net_4_5_System.Data.dll.sources => net_4_x_System.Data.dll.sources} (96%) create mode 100644 mcs/class/System.DirectoryServices/System.DirectoryServices.ActiveDirectory/ActiveDirectoryObjectNotFoundException.cs rename mcs/class/{System.ServiceModel.Web/System.Runtime.Serialization.Json => System.Json/System.Json}/JavaScriptReader.cs (100%) rename mcs/class/{System.Web.Routing/System.Web.Routing/VirtualPathData.cs => System.Numerics.Vectors/Assembly/AssemblyInfo.cs} (52%) create mode 100644 mcs/class/System.Numerics.Vectors/Makefile rename mcs/class/{System.Web.Abstractions/net_4_0_System.Web.Abstractions.dll.sources => System.Numerics.Vectors/System.Numerics.Vectors.dll.sources} (57%) rename mcs/class/{System.ServiceModel.Web => System.Runtime.Serialization}/Test/System.Runtime.Serialization.Json/ChangeLog (100%) rename mcs/class/{System.ServiceModel.Web => System.Runtime.Serialization}/Test/System.Runtime.Serialization.Json/DataContractJsonSerializerTest.cs (97%) rename mcs/class/{System.ServiceModel.Web => System.Runtime.Serialization}/Test/System.Runtime.Serialization.Json/JsonReaderTest.cs (100%) rename mcs/class/{System.ServiceModel.Web => System.Runtime.Serialization}/Test/System.Runtime.Serialization.Json/JsonWriterTest.cs (100%) create mode 100644 mcs/class/System.Runtime.Serialization/monotouch_tv_System.Runtime.Serialization.dll.sources rename mcs/class/System.Runtime.Serialization/{net_4_5_System.Runtime.Serialization.dll.sources => net_4_x_System.Runtime.Serialization.dll.sources} (100%) create mode 100644 mcs/class/System.ServiceModel.Internals/MobileStubs.cs create mode 100644 mcs/class/System.ServiceModel.Internals/mobile_System.ServiceModel.Internals.dll.sources create mode 100644 mcs/class/System.ServiceModel.Internals/monotouch_System.ServiceModel.Internals.dll.sources create mode 100644 mcs/class/System.ServiceModel.Internals/monotouch_tv_System.ServiceModel.Internals.dll.sources create mode 100644 mcs/class/System.ServiceModel.Internals/monotouch_watch_System.ServiceModel.Internals.dll.sources create mode 100644 mcs/class/System.ServiceModel.Internals/xammac_System.ServiceModel.Internals.dll.sources delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/ChangeLog delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/DataContractJsonSerializer.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/IXmlJsonReaderInitializer.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/IXmlJsonWriterInitializer.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JavaScriptObjectDeserializer.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonReader.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonReaderWriterFactory.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonSerializationReader.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonSerializationWriter.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/JsonWriter.cs delete mode 100644 mcs/class/System.ServiceModel.Web/System.Runtime.Serialization.Json/TypeMap.cs delete mode 100644 mcs/class/System.ServiceModel.Web/common_System.ServiceModel.Web.dll.sources create mode 100644 mcs/class/System.ServiceModel.Web/monotouch_tv_System.ServiceModel.Web.dll.sources delete mode 100644 mcs/class/System.ServiceModel.Web/net_2_0_System.ServiceModel.Web.dll.sources delete mode 100644 mcs/class/System.ServiceModel.Web/net_4_0_System.ServiceModel.Web.dll.sources delete mode 100644 mcs/class/System.ServiceModel.Web/net_4_5_System.ServiceModel.Web.dll.sources create mode 100644 mcs/class/System.ServiceModel/monotouch_tv_System.ServiceModel.dll.sources delete mode 100644 mcs/class/System.ServiceModel/net_4_0_System.ServiceModel.dll.sources delete mode 100644 mcs/class/System.ServiceModel/net_4_5_System.ServiceModel.dll.sources create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/DataflowBlock.cs.REMOVED.git-id create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/DataflowBlockOptions.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/DataflowLinkOptions.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/DataflowMessageHeader.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/DataflowMessageStatus.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/IDataflowBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/IPropagatorBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/IReceivableSourceBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/ISourceBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Base/ITargetBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/ActionBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/BatchBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/BatchedJoinBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/BroadcastBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/BufferBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/JoinBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/TransformBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/TransformManyBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Blocks/WriteOnceBlock.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/ActionOnDispose.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/Common.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/EnumerableDebugView.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/IDebuggerDisplay.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/ImmutableList.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/Padding.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/ProducerConsumerQueues.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/QueuedMap.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/ReorderingBuffer.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/SourceCore.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/SpscTargetCore.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/TargetCore.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/TargetRegistry.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/CoreFxSources/Internal/Threading.cs create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/README.md create mode 100644 mcs/class/System.Threading.Tasks.Dataflow/SR.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ActionBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/AsyncExecutingMessageBox.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BatchedJoinBlock`3.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BroadcastBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BroadcastOutgoingQueue.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/BufferBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ChooserBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/CompletionHelper.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/DataflowBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/DataflowBlockOptions.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ExecutingMessageBox.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ExecutingMessageBoxBase.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ISourceBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinBlock`3.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/JoinTarget.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/MessageBox.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/NameHelper.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/NullTargetBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ObservableDataflowBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/OutgoingQueue.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/OutgoingQueueBase.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/OutputAvailableBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/PassingMessageBox.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/PredicateBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/PropagatorWrapperBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/ReceiveBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/SendBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/TargetCollection.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/TransformBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/TransformManyBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/System.Threading.Tasks.Dataflow/WriteOnceBlock.cs delete mode 100644 mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/CompletionHelperTest.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/ChangeLog delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpApplicationStateBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpApplicationStateWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpBrowserCapabilitiesBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpBrowserCapabilitiesWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpCachePolicyBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpCachePolicyWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpFileCollectionBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpPostedFileBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpPostedFileWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpRequestBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpResponseBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpServerUtilityBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpSessionStateBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpSessionStateWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpStaticObjectsCollectionBase.cs delete mode 100644 mcs/class/System.Web.Abstractions/System.Web/HttpStaticObjectsCollectionWrapper.cs delete mode 100644 mcs/class/System.Web.Abstractions/net_4_5_System.Web.Abstractions.dll.sources delete mode 100644 mcs/class/System.Web.ApplicationServices/monotouch_runtime_System.Web.ApplicationServices.dll.sources delete mode 100644 mcs/class/System.Web.ApplicationServices/net_4_0_System.Web.ApplicationServices.dll.sources delete mode 100644 mcs/class/System.Web.ApplicationServices/net_4_5_System.Web.ApplicationServices.dll.sources delete mode 100644 mcs/class/System.Web.DynamicData/Test/WebPages/web.config.2.0 delete mode 100644 mcs/class/System.Web.DynamicData/Test/WebPages/web.config.4.5 rename mcs/class/System.Web.DynamicData/Test/WebPages/{web.config.4.0 => web.config.4.x} (99%) delete mode 100644 mcs/class/System.Web.Extensions/Test/resources/profile.config.2.0 delete mode 100644 mcs/class/System.Web.Extensions/Test/resources/profile.config.4.5 rename mcs/class/System.Web.Extensions/Test/resources/{profile.config.4.0 => profile.config.4.x} (89%) delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/IRouteConstraint.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/IRouteHandler.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/RequestContext.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/RouteBase.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/RouteDirection.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/RouteTable.cs delete mode 100644 mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionary.cs delete mode 100644 mcs/class/System.Web.Routing/net_4_0_System.Web.Routing.dll.sources delete mode 100644 mcs/class/System.Web.Routing/net_4_5_System.Web.Routing.dll.sources delete mode 100644 mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SocketResponder.cs create mode 100644 mcs/class/System.Web.Services/monotouch_tv_System.Web.Services.dll.sources create mode 100644 mcs/class/System.Web/ReferenceSources/SR.cs.REMOVED.git-id delete mode 100644 mcs/class/System.Web/System.Web.Caching/IOutputCacheEntry.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesTo.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesToAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/DesignTimeResourceProviderFactoryAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/ExpressionEditorAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/ExpressionPrefixAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesTo.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesToAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/IAssemblyPostProcessor.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs delete mode 100644 mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/AdapterDictionary.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/AuthenticationMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/AuthorizationRuleAction.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsRedirectMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/FormsAuthPasswordFormat.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/FormsProtectionEnum.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPath.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPathFactory.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/IRemoteWebConfigurationHostServer.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyCompatibilityMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyValidation.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/PagesEnableSessionState.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComAuthenticationLevel.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComImpersonationLevel.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelLogLevel.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/SerializationMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/SystemWebCachingSectionGroup.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/TraceDisplayMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/WebApplicationLevel.cs delete mode 100644 mcs/class/System.Web/System.Web.Configuration_2.0/XhtmlConformanceMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Hosting/IApplicationHost.cs delete mode 100644 mcs/class/System.Web/System.Web.Hosting/IRegisteredObject.cs delete mode 100644 mcs/class/System.Web/System.Web.Profile/ProfileEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.Profile/ProfileEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.Profile/ProfileGroupBase.cs rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/HttpMethodConstraint.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/PatternParser.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/PatternToken.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/PatternTokenType.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/Route.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/RouteCollection.cs (99%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/RouteData.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/RouteValueDictionaryExtensions.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/StopRoutingHandler.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/UrlRoutingHandler.cs (100%) rename mcs/class/{System.Web.Routing => System.Web}/System.Web.Routing/UrlRoutingModule.cs (100%) delete mode 100644 mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/RoleManagerEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/RoleManagerEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.SessionState_2.0/IReadOnlySessionState.cs delete mode 100644 mcs/class/System.Web/System.Web.SessionState_2.0/IRequiresSessionState.cs delete mode 100644 mcs/class/System.Web/System.Web.SessionState_2.0/SessionStateBehavior.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.Adapters/WmlPostFieldType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITrackingPersonalizable.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITransformerConfigurationControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IVersioningPersonalizable.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebEditable.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPart.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartField.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartHttpHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartParameters.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartRow.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartTable.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeState.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PersonalizationScope.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartExportMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartHelpMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/AdCreatedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/AutoCompleteType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/BorderStyle.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumnType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ButtonType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/CalendarSelectionMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/CommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/CommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ContentDirection.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataBoundControlMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataControlCellType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowState.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DayNameFormat.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DayRenderEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeleteEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeletedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdateEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdatedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FirstDayOfWeek.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FontSize.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeleteEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeletedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdateEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdatedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridLines.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeleteEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeletedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdateEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdatedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/HorizontalAlign.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/HotSpotMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IButtonControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ICallbackContainer.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ICompositeControlDesignerAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundItemControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundListControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IFieldControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IPersistedSelector.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/IRepeatInfoUser.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ImageAlign.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ListItemType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ListSelectionMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/LiteralMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/LoginFailureAction.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/LogoutAction.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MenuEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MenuEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MenuRenderingMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/NextPrevFormat.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/Orientation.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/PagerButtons.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/PagerMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/PagerPosition.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/PathDirection.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeatDirection.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeatLayout.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SendMailErrorEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ServerValidateEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SortDirection.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TableCaptionAlign.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TableHeaderScope.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TableRowSection.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TextAlign.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TextBoxMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeSelectAction.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/TreeViewImageSet.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/UnitType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ValidationCompareOperator.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ValidationDataType.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ValidationSummaryDisplayMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/ValidatorDisplay.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/VerticalAlign.cs delete mode 100644 mcs/class/System.Web/System.Web.UI.WebControls/WebColorConverter.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ClientIDMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ConflictOptions.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ConstructorNeedsTagAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ControlBuilderAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/CssClassPropertyAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/DataBindingHandlerAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/DataKeyPropertyAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/DataSourceCacheExpiry.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/DataSourceCapabilities.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/DataSourceOperation.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/FileLevelControlBuilderAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/FilterableAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/HtmlTextWriterAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/HtmlTextWriterStyle.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/HtmlTextWriterTag.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IAttributeAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IAutoFieldGenerator.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IBindableControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IBindableTemplate.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ICallbackEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IControlBuilderAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IControlDesignerAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDReferencePropertyAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDataBindingsAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDataItemContainer.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDataKeysControl.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDataSource.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IDataSourceViewSchemaAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IExpressionsAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IFilterResolutionService.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IHierarchicalDataSource.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IHierarchicalEnumerable.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IHierarchyData.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/INamingContainer.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/INavigateUIData.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/INonBindingContainer.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IParserAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IPostBackDataHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IPostBackEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IResourceUrlGenerator.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IStateFormatter.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IStateManager.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IStyleSheet.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ITemplate.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IThemeResolutionService.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IUrlResolutionService.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IUserControlDesignerAccessor.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IUserControlTypeResolutionService.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/IValidator.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ImageClickEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/PersistChildrenAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/PersistenceMode.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/SupportsEventValidationAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/TemplateInstance.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/TemplateInstanceAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ThemeableAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web.UI/ViewStateEncryptionMode.cs delete mode 100644 mcs/class/System.Web/System.Web.Util/IWebObjectFactory.cs delete mode 100644 mcs/class/System.Web/System.Web.Util/RequestValidationSource.cs rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpContextBase.cs (100%) rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpContextWrapper.cs (100%) rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpFileCollectionWrapper.cs (100%) rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpRequestWrapper.cs (87%) rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpResponseWrapper.cs (100%) rename mcs/class/{System.Web.Abstractions => System.Web}/System.Web/HttpServerUtilityWrapper.cs (100%) delete mode 100644 mcs/class/System.Web/System.Web/IHtmlString.cs delete mode 100644 mcs/class/System.Web/System.Web/IHttpAsyncHandler.cs delete mode 100644 mcs/class/System.Web/System.Web/IHttpHandler.cs delete mode 100644 mcs/class/System.Web/System.Web/IHttpHandlerFactory.cs delete mode 100644 mcs/class/System.Web/System.Web/IHttpModule.cs delete mode 100644 mcs/class/System.Web/System.Web/PreApplicationStartMethodAttribute.cs delete mode 100644 mcs/class/System.Web/System.Web/ReadEntityBodyMode.cs delete mode 100644 mcs/class/System.Web/System.Web/RequestNotification.cs delete mode 100644 mcs/class/System.Web/System.Web/RequestNotificationStatus.cs delete mode 100644 mcs/class/System.Web/System.Web/TraceContextEventArgs.cs delete mode 100644 mcs/class/System.Web/System.Web/TraceContextEventHandler.cs delete mode 100644 mcs/class/System.Web/System.Web/UnvalidatedRequestValuesBase.cs delete mode 100644 mcs/class/System.Web/System.Web/UnvalidatedRequestValuesWrapper.cs create mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs delete mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs.REMOVED.git-id create mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs delete mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs.REMOVED.git-id create mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs delete mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs.REMOVED.git-id delete mode 100644 mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.2.0.cs.REMOVED.git-id delete mode 100644 mcs/class/System.Web/monotouch_runtime_System.Web.dll.sources delete mode 100644 mcs/class/System.Web/net_4_0_System.Web.dll.sources delete mode 100644 mcs/class/System.Web/net_4_5_System.Web.dll.sources create mode 100644 mcs/class/System.XML/ReferenceSources/LocalAppContextSwitches.cs create mode 100644 mcs/class/System.XML/monotouch_tv_System.Xml.dll.sources create mode 100644 mcs/class/System.XML/monotouch_tv_runtime_System.Xml.dll.sources create mode 100644 mcs/class/System.XML/monotouch_watch_runtime_System.Xml.dll.sources create mode 100644 mcs/class/System/Mono.Net.Security/CallbackHelpers.cs create mode 100644 mcs/class/System/Mono.Net.Security/ChainValidationHelper.cs create mode 100644 mcs/class/System/Mono.Net.Security/IMonoSslStream.cs create mode 100644 mcs/class/System/Mono.Net.Security/IMonoTlsProvider.cs create mode 100644 mcs/class/System/Mono.Net.Security/LegacySslStream.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoDefaultTlsProvider.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoSslStreamImpl.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoSslStreamWrapper.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoTlsProviderFactory.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoTlsProviderImpl.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoTlsProviderWrapper.cs create mode 100644 mcs/class/System/Mono.Net.Security/MonoTlsStream.cs create mode 100644 mcs/class/System/Mono.Net.Security/NoReflectionHelper.cs create mode 100644 mcs/class/System/Mono.Net.Security/SystemCertificateValidator.cs create mode 100644 mcs/class/System/ReferenceSources/Internal.cs create mode 100644 mcs/class/System/ReferenceSources/SR2.cs create mode 100644 mcs/class/System/ReferenceSources/SSPIConfiguration.cs create mode 100644 mcs/class/System/ReferenceSources/SSPISafeHandles.cs create mode 100644 mcs/class/System/ReferenceSources/SSPIWrapper.cs create mode 100644 mcs/class/System/ReferenceSources/SslStream.cs create mode 100644 mcs/class/System/ReferenceSources/_SecureChannel.cs create mode 100644 mcs/class/System/ReferenceSources/_SslState.cs create mode 100644 mcs/class/System/ReferenceSources/_SslStream.cs delete mode 100644 mcs/class/System/System.IO/MonoSyncFileStream.cs delete mode 100644 mcs/class/System/System.Net.Cache/ChangeLog delete mode 100644 mcs/class/System/System.Net.Cache/HttpCacheAgeControl.cs delete mode 100644 mcs/class/System/System.Net.Cache/HttpRequestCacheLevel.cs delete mode 100644 mcs/class/System/System.Net.Cache/HttpRequestCachePolicy.cs delete mode 100644 mcs/class/System/System.Net.Cache/RequestCacheLevel.cs delete mode 100644 mcs/class/System/System.Net.Cache/RequestCachePolicy.cs rename mcs/class/{System.Web/System.Web.Caching/ResponseElement.cs => System/System.Net.Mail/SmtpDeliveryFormat.cs} (83%) delete mode 100644 mcs/class/System/System.Net.Mime/ChangeLog delete mode 100644 mcs/class/System/System.Net.Mime/ContentDisposition.cs delete mode 100644 mcs/class/System/System.Net.Mime/ContentType.cs delete mode 100644 mcs/class/System/System.Net.Mime/DispositionTypeNames.cs delete mode 100644 mcs/class/System/System.Net.Mime/MediaTypeNames.cs delete mode 100644 mcs/class/System/System.Net.Mime/TransferEncoding.cs delete mode 100644 mcs/class/System/System.Net.Security/AuthenticatedStream.cs delete mode 100644 mcs/class/System/System.Net.Security/AuthenticationLevel.cs rename mcs/class/{System.Web/System.Web.UI.WebControls/TitleFormat.cs => System/System.Net.Security/EncryptionPolicy.cs} (79%) delete mode 100644 mcs/class/System/System.Net.Security/ProtectionLevel.cs delete mode 100644 mcs/class/System/System.Net.Sockets/AddressFamily.cs delete mode 100644 mcs/class/System/System.Net.Sockets/IOControlCode.cs delete mode 100644 mcs/class/System/System.Net.Sockets/IPPacketInformation.cs delete mode 100644 mcs/class/System/System.Net.Sockets/IPv6MulticastOption.cs delete mode 100644 mcs/class/System/System.Net.Sockets/LingerOption.cs delete mode 100644 mcs/class/System/System.Net.Sockets/MulticastOption.cs delete mode 100644 mcs/class/System/System.Net.Sockets/NetworkStream.cs delete mode 100644 mcs/class/System/System.Net.Sockets/ProtocolFamily.cs delete mode 100644 mcs/class/System/System.Net.Sockets/ProtocolType.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SelectMode.cs delete mode 100644 mcs/class/System/System.Net.Sockets/Socket.cs create mode 100644 mcs/class/System/System.Net.Sockets/Socket.cs.REMOVED.git-id delete mode 100644 mcs/class/System/System.Net.Sockets/SocketAsyncCallback.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketAsyncWorker.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketError.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketException.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketFlags.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketInformation.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketInformationOptions.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketOptionLevel.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketShutdown.cs delete mode 100644 mcs/class/System/System.Net.Sockets/SocketType.cs delete mode 100644 mcs/class/System/System.Net.Sockets/TransmitFileOptions.cs delete mode 100644 mcs/class/System/System.Net.Sockets/UdpReceiveResult.cs rename mcs/class/{corlib/System.Diagnostics.Tracing/EventLevel.cs => System/System.Net/HttpListenerTimeoutManager.cs} (84%) delete mode 100644 mcs/class/System/System.Net/HttpUtility.cs delete mode 100644 mcs/class/System/System.Net/WebUtility.cs delete mode 100644 mcs/class/System/System.Runtime.InteropServices/ChangeLog delete mode 100644 mcs/class/System/System.Runtime.InteropServices/DefaultParameterValueAttribute.cs delete mode 100644 mcs/class/System/System.Runtime.InteropServices/HandleCollector.cs rename mcs/class/{corlib/System.Diagnostics.Tracing/EventKeywords.cs => System/System.Security.Cryptography/OidGroup.cs} (70%) create mode 100644 mcs/class/System/System/IOSelector.cs delete mode 100644 mcs/class/System/System/UriComponents.cs delete mode 100644 mcs/class/System/System/UriFormat.cs delete mode 100644 mcs/class/System/System/UriFormatException.cs delete mode 100644 mcs/class/System/System/UriHostNameType.cs delete mode 100644 mcs/class/System/System/UriIdnScope.cs delete mode 100644 mcs/class/System/System/UriKind.cs delete mode 100644 mcs/class/System/System/UriPartial.cs create mode 100644 mcs/class/System/monotouch_tv_System.dll.sources create mode 100644 mcs/class/System/monotouch_tv_runtime_System.dll.sources create mode 100644 mcs/class/System/monotouch_watch_runtime_System.dll.sources create mode 100644 mcs/class/corlib/ReferenceSources/AppContextSwitches.cs rename mcs/class/{System.Web/System.Web.UI.WebControls.WebParts/IWebActionable.cs => corlib/System.Diagnostics.Tracing/EventSourceSettings.cs} (77%) delete mode 100644 mcs/class/corlib/System.Reflection/ExceptionHandlingClauseOptions.cs create mode 100644 mcs/class/corlib/System.Security.Cryptography.X509Certificates/X509CertificateImpl.cs create mode 100644 mcs/class/corlib/System.Security.Cryptography.X509Certificates/X509CertificateImplMono.cs create mode 100644 mcs/class/corlib/System.Security.Cryptography.X509Certificates/X509Helper.cs rename mcs/class/{System.Web/System.Web.UI/ViewStateMode.cs => corlib/System/AppContext.cs} (85%) delete mode 100644 mcs/class/corlib/System/Math.cs create mode 100644 mcs/class/corlib/System/TypeIdentifier.cs create mode 100644 mcs/class/corlib/Test/System.Reflection.Emit/MethodBuilderTestIL.cs create mode 100644 mcs/class/corlib/Test/System/DateTimeOffsetTestCoreFx.cs create mode 100644 mcs/class/corlib/coreclr/AsyncLocal.cs create mode 100644 mcs/class/corlib/coreclr/DisablePrivateReflectionAttribute.cs create mode 100644 mcs/class/corlib/coreclr/EncodingProvider.cs create mode 100644 mcs/class/corlib/coreclr/FormattableString.cs create mode 100644 mcs/class/corlib/coreclr/FormattableStringFactory.cs create mode 100644 mcs/class/corlib/coreclr/WaitHandleExtensions.cs create mode 100644 mcs/class/corlib/monotouch_tv_corlib.dll.sources create mode 100644 mcs/class/corlib/monotouch_tv_runtime_corlib.dll.sources create mode 100644 mcs/class/corlib/monotouch_watch_runtime_corlib.dll.sources rename mcs/class/corlib/{net_4_5_corlib.dll.sources => net_4_x_corlib.dll.sources} (100%) rename mcs/class/{System/Test/System.Net => test-helpers}/SocketResponder.cs (62%) create mode 100644 mcs/errors/cs0051-3.cs create mode 100644 mcs/errors/cs0208-18.cs create mode 100644 mcs/errors/cs0403-4.cs create mode 100644 mcs/errors/cs0619-41.cs create mode 100644 mcs/errors/cs0619-58.cs create mode 100644 mcs/errors/cs0841-6.cs create mode 100644 mcs/errors/cs7064.cs create mode 100644 mcs/errors/cs8075.cs create mode 100644 mcs/errors/cs9671.cs rename mcs/errors/{known-issues-net_4_5 => known-issues-net_4_x} (100%) create mode 100644 mcs/nunit24/NUnitCore/core/BabysitterSupport.cs create mode 100644 mcs/tests/dtest-062.cs create mode 100644 mcs/tests/dtest-063.cs create mode 100644 mcs/tests/dtest-null-operator-01.cs create mode 100644 mcs/tests/gtest-633.cs create mode 100644 mcs/tests/gtest-634.cs create mode 100644 mcs/tests/gtest-635.cs create mode 100644 mcs/tests/gtest-636.cs rename mcs/tests/{known-issues-net_4_5 => known-issues-net_4_x} (100%) create mode 100644 mcs/tests/test-928.cs create mode 100644 mcs/tests/test-929.cs create mode 100644 mcs/tests/test-930.cs create mode 100644 mcs/tests/test-931.cs create mode 100644 mcs/tests/test-932.cs create mode 100644 mcs/tests/test-async-81.cs create mode 100644 mcs/tests/test-null-operator-19.cs create mode 100644 mcs/tests/test-null-operator-21.cs create mode 100644 mcs/tests/test-null-operator-22.cs create mode 100644 mcs/tests/test-null-operator-23.cs create mode 100644 mcs/tests/test-xml-073-ref.xml create mode 100644 mcs/tests/test-xml-073.cs create mode 100644 mcs/tests/test-xml-074-ref.xml create mode 100644 mcs/tests/test-xml-074.cs delete mode 100644 mcs/tests/ver-il-net_4_5.xml.REMOVED.git-id create mode 100644 mcs/tests/ver-il-net_4_x.xml.REMOVED.git-id create mode 100644 mcs/tools/linker-analyzer/ConsoleDependencyGraph.cs create mode 100644 mcs/tools/linker-analyzer/LinkerAnalyzerCore/DependencyGraph.cs create mode 100644 mcs/tools/linker-analyzer/Main.cs create mode 100644 mcs/tools/linker-analyzer/Makefile create mode 100644 mcs/tools/linker-analyzer/linkeranalyzer.exe.sources create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-delete/MyFramework.MyNamespace/TypeOnlyInClassic.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi-withexisting/MyFramework.MyNamespace/MyClass.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi-withexisting/MyFramework.MyNamespace/OnlyInMulti.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi-withexisting/index.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi-withexisting/ns-MyFramework.MyNamespace.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi/MyFramework.MyNamespace/MyClass.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi/MyFramework.MyNamespace/OnlyInMulti.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi/index.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-dropns-multi/ns-MyFramework.MyNamespace.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/MyNamespace/MyClass.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/MyNamespace/MyEnum.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/MyNamespace/MyEnumAttribute.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/MyNamespace/MyFlagEnumAttribute.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/ObjCRuntime/Platform.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/index.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/ns-MyNamespace.xml create mode 100644 mcs/tools/mdoc/Test/en.expected-enumerations/ns-ObjCRuntime.xml delete mode 100644 mcs/tools/mdoc/Test/msxdoc-expected.importslashdoc.xml create mode 100644 mcs/tools/mdoc/Test/msxdoc-expected.importslashdoc.xml.REMOVED.git-id create mode 100644 mcs/tools/xbuild/frameworks/net_4.5.2.xml create mode 100644 mcs/tools/xbuild/frameworks/net_4.6.1.xml create mode 100644 mcs/tools/xbuild/frameworks/net_4.6.xml delete mode 100644 mono/io-layer/collection.c delete mode 100644 mono/io-layer/collection.h create mode 100644 mono/io-layer/io-trace.h delete mode 100644 mono/io-layer/misc-private.h delete mode 100644 mono/io-layer/misc.c delete mode 100644 mono/metadata/char-conversions.h mode change 100755 => 100644 mono/metadata/domain.c rename mono/metadata/{gc-internal.h => gc-internals.h} (90%) create mode 100644 mono/metadata/handle-private.h create mode 100644 mono/metadata/handle.c create mode 100644 mono/metadata/handle.h create mode 100644 mono/metadata/image-internals.h rename mono/metadata/{sgen-bridge-internal.h => sgen-bridge-internals.h} (93%) create mode 100644 mono/metadata/sgen-os-coop.c create mode 100644 mono/mini/aot-compiler.h create mode 100644 mono/mini/arch-stubs.c rename mono/mini/{iltests.il.in => iltests.il} (99%) create mode 100644 mono/mini/llvm-jit.cpp create mode 100644 mono/mini/llvm-runtime.cpp create mode 100644 mono/mini/llvm-runtime.h create mode 100644 mono/mini/mini-arm-tls.S create mode 100644 mono/mini/mini-arm-tls.h delete mode 100644 mono/mini/mini-generic-sharing.c create mode 100644 mono/mini/mini-generic-sharing.c.REMOVED.git-id create mode 100644 mono/mini/mini-llvm.h delete mode 100644 mono/profiler/perf_event.h create mode 100644 mono/sgen/sgen-gchandles.c create mode 100644 mono/tests/appdomain-loader.cs create mode 100644 mono/tests/appdomain-tester.cs create mode 100644 mono/tests/bug-36848-a.cs create mode 100644 mono/tests/bug-36848.cs create mode 100644 mono/tests/calliGenericTest.il create mode 100644 mono/tests/dynamic-method-stack-traces.cs create mode 100644 mono/tests/pinvoke_ppcc.cs create mode 100644 mono/tests/pinvoke_ppcd.cs create mode 100644 mono/tests/pinvoke_ppcf.cs create mode 100644 mono/tests/pinvoke_ppci.cs create mode 100644 mono/tests/pinvoke_ppcs.cs create mode 100644 mono/tests/test-tls.cs create mode 100644 mono/unit-tests/test-mono-handle.c create mode 100644 mono/utils/checked-build.c create mode 100644 mono/utils/checked-build.h create mode 100644 mono/utils/mach-support-arm64.c create mode 100644 mono/utils/mono-coop-mutex.h create mode 100644 mono/utils/mono-coop-semaphore.h rename mono/utils/{mono-logger-internal.h => mono-logger-internals.h} (77%) rename mono/utils/{mono-mmap-internal.h => mono-mmap-internals.h} (94%) delete mode 100644 mono/utils/mono-mutex.c create mode 100644 mono/utils/mono-once.h rename mono/utils/{mono-mutex.h => mono-os-mutex.h} (54%) create mode 100644 mono/utils/mono-os-semaphore.h delete mode 100644 mono/utils/mono-semaphore.c delete mode 100644 mono/utils/mono-semaphore.h create mode 100644 mono/utils/mono-threads-api.h create mode 100644 mono/utils/mono-threads-mach-abort-syscall.c create mode 100644 mono/utils/mono-threads-posix-abort-syscall.c create mode 100644 mono/utils/mono-threads-posix-signals.c create mode 100644 mono/utils/mono-threads-posix-signals.h create mode 100644 mono/utils/mono-threads-windows-abort-syscall.c mode change 100755 => 100644 mono/utils/mono-threads-windows.c delete mode 100644 msvc/monodiet.vcxproj delete mode 100644 msvc/profiler-codeanalyst.vcxproj delete mode 100644 msvc/profiler-cov.vcxproj delete mode 100644 msvc/profiler-logging.vcxproj create mode 100644 support/sys-socket.c diff --git a/Makefile.am b/Makefile.am index 19f0cfbd79..d48ca3110e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,15 +5,15 @@ AM_CFLAGS = $(WERROR_CFLAGS) MONOTOUCH_SUBDIRS = $(libgc_dir) eglib/src mono if CROSS_COMPILING -SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) +SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) acceptance-tests # Keep in sync with SUBDIRS ## 'tools' is not normally built -DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs +DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs acceptance-tests else -SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) +SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) acceptance-tests # Keep in sync with SUBDIRS ## 'tools' is not normally built -DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs +DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs acceptance-tests endif all: update_submodules @@ -25,13 +25,14 @@ update_submodules: .PHONY: update_submodules EXTRA_DIST= \ - README.md \ - LICENSE \ - autogen.sh \ - mkinstalldirs \ - mono-uninstalled.pc.in \ - winconfig.h \ - external + README.md \ + LICENSE \ + autogen.sh \ + mkinstalldirs \ + mono-uninstalled.pc.in \ + winconfig.h \ + code_of_conduct.md \ + external DISTCHECK_CONFIGURE_FLAGS = EXTERNAL_MCS=false EXTERNAL_RUNTIME=false @@ -56,7 +57,7 @@ DISTCLEANFILES= mono-uninstalled.pc mcslib = $(mcs_topdir)/class/lib monolite = $(mcslib)/monolite mono_corlib_version = $(shell sed -n "s/\#define MONO_CORLIB_VERSION //p" $(srcdir)/mono/metadata/appdomain.c) -monolite_url = http://storage.bos.xamarin.com/mono-dist-master/latest/monolite-$(mono_corlib_version)-latest.tar.gz +monolite_url = http://download.mono-project.com/monolite/monolite-$(mono_corlib_version)-latest.tar.gz .PHONY: get-monolite-latest get-monolite-latest: -rm -fr $(mcslib)/monolite-* diff --git a/Makefile.in b/Makefile.in index 322c2eb5a6..04c7dd0eb0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -214,8 +214,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -231,9 +229,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -251,8 +249,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ @@ -413,21 +409,22 @@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 AM_CFLAGS = $(WERROR_CFLAGS) MONOTOUCH_SUBDIRS = $(libgc_dir) eglib/src mono -@CROSS_COMPILING_FALSE@SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) -@CROSS_COMPILING_TRUE@SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) +@CROSS_COMPILING_FALSE@SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) acceptance-tests +@CROSS_COMPILING_TRUE@SUBDIRS = po $(libgc_dir) eglib mono $(ikvm_native_dir) support data runtime scripts man samples msvc $(docs_dir) acceptance-tests # Keep in sync with SUBDIRS -@CROSS_COMPILING_FALSE@DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs +@CROSS_COMPILING_FALSE@DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs acceptance-tests # Keep in sync with SUBDIRS -@CROSS_COMPILING_TRUE@DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs +@CROSS_COMPILING_TRUE@DIST_SUBDIRS = m4 po $(libgc_dir) eglib mono ikvm-native support data runtime scripts man samples tools msvc docs acceptance-tests SUBMODULE_ERROR = 'Could not recursively update all git submodules. You may experience compilation problems if some submodules are out of date' EXTRA_DIST = \ - README.md \ - LICENSE \ - autogen.sh \ - mkinstalldirs \ - mono-uninstalled.pc.in \ - winconfig.h \ - external + README.md \ + LICENSE \ + autogen.sh \ + mkinstalldirs \ + mono-uninstalled.pc.in \ + winconfig.h \ + code_of_conduct.md \ + external DISTCHECK_CONFIGURE_FLAGS = EXTERNAL_MCS=false EXTERNAL_RUNTIME=false # Disable this for now because it is very slow and causes wrench to timeout: @@ -440,7 +437,7 @@ DISTCLEANFILES = mono-uninstalled.pc mcslib = $(mcs_topdir)/class/lib monolite = $(mcslib)/monolite mono_corlib_version = $(shell sed -n "s/\#define MONO_CORLIB_VERSION //p" $(srcdir)/mono/metadata/appdomain.c) -monolite_url = http://storage.bos.xamarin.com/mono-dist-master/latest/monolite-$(mono_corlib_version)-latest.tar.gz +monolite_url = http://download.mono-project.com/monolite/monolite-$(mono_corlib_version)-latest.tar.gz all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive diff --git a/README.md b/README.md index 1d44a52c3d..96559ab5c3 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ Community supported architectures: [8]: http://jenkins.mono-project.com/job/test-mono-mainline/label=debian-armhf/ [9]: https://ci.appveyor.com/api/projects/status/1e61ebdfpbiei58v/branch/master?svg=true [10]: https://ci.appveyor.com/project/ajlennon/mono-817/branch/master -[11]: http://jenkins.mono-project.com/job/test-mono-mainline-communityarchitectures/label=nealef-s390x-1/badge/icon -[12]: http://jenkins.mono-project.com/job/test-mono-mainline-communityarchitectures/label=nealef-s390x-1/ +[11]: https://jenkins.mono-project.com/job/z/label=centos-s390x/badge/icon +[12]: https://jenkins.mono-project.com/job/z/label=centos-s390x Compilation and Installation ============================ @@ -80,8 +80,7 @@ Testing and Installation You can run the mono and mcs test suites with the command: `make check`. Expect to find a few test suite failures. As a sanity check, you -can compare the failures you got with [https://wrench.mono-project.com/Wrench/](https://wrench.mono-project.com/Wrench/) -and [http://jenkins.mono-project.com/](http://jenkins.mono-project.com/). +can compare the failures you got with [https://jenkins.mono-project.com/](https://jenkins.mono-project.com/). You can now install mono with: `make install` @@ -497,4 +496,3 @@ to do at all), first edit `.gitmodules` to point to the new location, then: The desired output diff is a change in `.gitmodules` to reflect the change in the remote URL, and a change in / where you see the desired change in the commit hash. - diff --git a/acceptance-tests/Makefile.am.REMOVED.git-id b/acceptance-tests/Makefile.am.REMOVED.git-id new file mode 100644 index 0000000000..f308fe0742 --- /dev/null +++ b/acceptance-tests/Makefile.am.REMOVED.git-id @@ -0,0 +1 @@ +68b9ff90e7dc4c8e38686a067a75eb9365f9504b \ No newline at end of file diff --git a/acceptance-tests/Makefile.in.REMOVED.git-id b/acceptance-tests/Makefile.in.REMOVED.git-id new file mode 100644 index 0000000000..bae9d852b6 --- /dev/null +++ b/acceptance-tests/Makefile.in.REMOVED.git-id @@ -0,0 +1 @@ +e59629639b73555931e60aa95d850ac5dd3e4a5e \ No newline at end of file diff --git a/acceptance-tests/README.md b/acceptance-tests/README.md new file mode 100644 index 0000000000..3ca8102a22 --- /dev/null +++ b/acceptance-tests/README.md @@ -0,0 +1,14 @@ +This directory contains acceptance tests, handled by optional non git submodule based submodules. Run the tests via "make check-full" (there are also targets for individual test suites). + +The SUBMODULES.json file stores information about the submodules, and make targets are used to check out submodules, check their versions, and update the submodule information. + +By convention, submodules repositories are at the same level as the mono repository. + +Make targets available: + +make check- - Checks whenever is checked out and matches the version in the info file. +make reset- - Clones if neccesary and checks out the revision specified in the info file. +make bump- - Updates the revision stored in the info file for . +make bump-current- - Updates the revision stored in the info file for to the current revision. +make commit-bump- - Same as make bump-, but commits the change. +make commit-bump-current- - Same as make bump-current-, but commits the change. diff --git a/acceptance-tests/SUBMODULES.json b/acceptance-tests/SUBMODULES.json new file mode 100644 index 0000000000..e0335f40f7 --- /dev/null +++ b/acceptance-tests/SUBMODULES.json @@ -0,0 +1,26 @@ +[ + { + "name": "roslyn", + "url": "git://github.com/dotnet/roslyn.git", + "rev": "322bd5b2bbf07df6a67de35cbcb2365484412f70", + "remote-branch": "origin/master", + "branch": "master", + "directory": "roslyn" + }, + { + "name": "coreclr", + "url": "git://github.com/mono/coreclr.git", + "rev": "96cf61f96b42cf9d013e641609cb7787f6e3a71f", + "remote-branch": "origin/mono", + "branch": "mono", + "directory": "coreclr" + }, + { + "name": "ms-test-suite", + "url": "git@github.com:xamarin/ms-test-suite.git", + "rev": "8eb26bd72a38e2c78675db45b13e89237dbdf4f2", + "remote-branch": "origin/master", + "branch": "master", + "directory": "ms-test-suite" + } +] \ No newline at end of file diff --git a/acceptance-tests/versions.mk b/acceptance-tests/versions.mk new file mode 100644 index 0000000000..7864669b9e --- /dev/null +++ b/acceptance-tests/versions.mk @@ -0,0 +1,159 @@ +.PHONY: validate-versions reset-versions + +CONFIG=SUBMODULES.json + +# usage $(call ValidateVersionTemplate (name,MAKEFILE VAR,repo name)) +# usage $(call ValidateVersionTemplate (mono,MONO,mono)) + +define ValidateVersionTemplate +#$(eval REPOSITORY_$(2):=$(shell test -z $(3) && echo $(1) || echo "$(3)")) +#$(eval DIRECTORY_$(2):=$(shell python versions.py get-dir $(1))) +#$(eval DIRECTORY_$(2):=$(shell test -z $(DIRECTORY_$(2)) && echo $(1) || echo $(DIRECTORY_$(2)))) +#$(eval MODULE_$(2):=$(shell python versions.py get-url $(1))) +#$(eval NEEDED_$(2)_VERSION:=$(shell python versions.py get-rev $(1))) +#$(eval $(2)_BRANCH_AND_REMOTE:=$(shell python versions.py get-remote-branch $(1))) + +#$(eval $(2)_VERSION:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git rev-parse HEAD )) + +#$(eval NEEDED_$(2)_BRANCH:=$(word 2, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) +#$(eval NEEDED_$(2)_REMOTE:=$(word 1, $(subst /, ,$($(2)_BRANCH_AND_REMOTE)))) +#$(eval $(2)_BRANCH:=$$$$(shell cd $($(2)_PATH) 2>/dev/null && git symbolic-ref --short HEAD 2>/dev/null)) + +validate-$(1):: + @if test x$$(IGNORE_$(2)_VERSION) = "x"; then \ + if test ! -d $($(2)_PATH); then \ + if test x$$(RESET_VERSIONS) != "x"; then \ + $(MAKE) reset-$(1) || exit 1; \ + else \ + echo "Your $(1) checkout is missing, please run 'make reset-$(1)'"; \ + touch .validate-versions-failure; \ + fi; \ + else \ + if test "x$($(2)_VERSION)" != "x$(NEEDED_$(2)_VERSION)" ; then \ + if test x$$(RESET_VERSIONS) != "x"; then \ + $(MAKE) reset-$(1) || exit 1; \ + else \ + echo "Your $(1) version is out of date, please run 'make reset-$(1)' (found $($(2)_VERSION), expected $(NEEDED_$(2)_VERSION))"; \ + test -z "$(BUILD_REVISION)" || $(MAKE) test-$(1); \ + touch .validate-versions-failure; \ + fi; \ + elif test "x$($(2)_BRANCH)" != "x$(NEEDED_$(2)_BRANCH)" ; then \ + if test x$$(RESET_VERSIONS) != "x"; then \ + test -z "$(BUILD_REVISION)" || $(MAKE) test-$(1); \ + $(MAKE) reset-$(1) || exit 1; \ + else \ + echo "Your $(1) branch is out of date, please run 'make reset-$(1)' (found $($(2)_BRANCH), expected $(NEEDED_$(2)_BRANCH))"; \ + touch .validate-versions-failure; \ + fi; \ + fi; \ + fi; \ + fi + +test-$(1):: + @echo $(1) + @echo " REPOSITORY_$(2)=$(REPOSITORY_$(2))" + @echo " DIRECTORY_$(2)=$(DIRECTORY_$(2))" + @echo " MODULE_$(2)=$(MODULE_$(2))" + @echo " NEEDED_$(2)_VERSION=$(NEEDED_$(2)_VERSION)" + @echo " $(2)_VERSION=$($(2)_VERSION)" + @echo " $(2)_BRANCH_AND_REMOTE=$($(2)_BRANCH_AND_REMOTE)" + @echo " NEEDED_$(2)_BRANCH=$(NEEDED_$(2)_BRANCH)" + @echo " NEEDED_$(2)_REMOTE=$(NEEDED_$(2)_REMOTE)" + @echo " $(2)_BRANCH=$($(2)_BRANCH)" + @echo " $(2)_PATH=$($(2)_PATH) => $(abspath $($(2)_PATH))" + +reset-$(1):: + @if test -d $($(2)_PATH); then \ + if ! (cd $($(2)_PATH) && git show $(NEEDED_$(2)_VERSION) >/dev/null 2>&1 && git log -1 $(NEEDED_$(2)_REMOTE) >/dev/null 2>&1) ; then \ + echo "*** git fetch `basename $$($(2)_PATH)`" && (cd $($(2)_PATH) && git fetch); \ + fi; \ + else \ + echo "*** git clone $(MODULE_$(2)) --recursive $(DIRECTORY_$(2))" && (cd `dirname $($(2)_PATH)` && git clone $(MODULE_$(2)) --recursive $(DIRECTORY_$(2)) || exit 1 ); \ + fi + @if test x$$(IGNORE_$(2)_VERSION) = "x"; then \ + echo "*** [$(1)] git checkout -f" $(NEEDED_$(2)_BRANCH) && (cd $($(2)_PATH) ; git checkout -f $(NEEDED_$(2)_BRANCH) || git checkout -f -b $($(2)_BRANCH_AND_REMOTE)); \ + echo "*** [$(1)] git reset --hard $(NEEDED_$(2)_VERSION)" && (cd $($(2)_PATH) && git reset --hard $(NEEDED_$(2)_VERSION)); \ + fi + @echo "*** [$(1)] git submodule update --init --recursive" && (cd $($(2)_PATH) && git submodule update --init --recursive) + +print-$(1):: + @printf "*** %-16s %-45s %s (%s)\n" "$(DIRECTORY_$(2))" "$(MODULE_$(2))" "$(NEEDED_$(2)_VERSION)" "$(NEEDED_$(2)_BRANCH)" + +.PHONY: validate-$(1) reset-$(1) print-$(1) + +reset-versions:: reset-$(1) +validate-versions:: Validate-$(1) +print-versions:: print-$(1) + +endef + +$(eval $(call ValidateVersionTemplate,roslyn,ROSLYN)) +$(eval $(call ValidateVersionTemplate,coreclr,CORECLR)) +$(eval $(call ValidateVersionTemplate,ms-test-suite,MSTESTSUITE)) + +reset-versions:: + +validate-versions:: + @if test -e .validate-versions-failure; then \ + rm .validate-versions-failure; \ + echo One or more modules needs update; \ + exit 1; \ + else \ + echo All dependent modules up to date; \ + fi + +reset: + @$(MAKE) validate-versions RESET_VERSIONS=1 + +__bump-version-%: + @if [ "$(REV)" = "" ]; then echo "Usage: make bump-version-$* REV="; exit 1; fi + python versions.py set-rev $* $(REV) + @if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to pick up $(REV)." | git commit -F - $(CONFIG); fi + +__bump-branch-%: + @if [ "$(BRANCH)" = "" ]; then echo "Usage: make bump-branch-$* BRANCH= REMOTE_BRANCH="; exit 1; fi + @if [ "$(REMOTE_BRANCH)" == "" ]; then echo "Usage: make bump-branch-$* BRANCH= REMOTE_BRANCH="; exit 1; fi + python versions.py set-branch $* $(BRANCH) + python versions.py set-remote-branch $* $(REMOTE_BRANCH) + @if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to switch to $(BRANCH) $(REMOTE BRANCH)." | git commit -F - $(CONFIG); fi + +__bump-current-version-%: + REV=$(shell cd $(TOP)/../$* && git log -1 --pretty=format:%H); \ + python versions.py set-rev $* $$REV; \ + if [ "$(COMMIT)" = "1" ]; then echo "[acceptance-tests] Bump $* to pick up $$REV:" | git commit -F - $(CONFIG); fi + +# Bump the given submodule to the revision given by the REV make variable +# If COMMIT is 1, commit the change +bump-roslyn: __bump-version-roslyn +bump-coreclr: __bump-version-coreclr +bump-ms-test-suite: __bump-version-ms-test-suite + +# Bump the given submodule to the branch given by the BRANCH/REMOTE_BRANCH make variables +# If COMMIT is 1, commit the change +bump-branch-roslyn: __bump-branch-roslyn +bump-branch-coreclr: __bump-branch-coreclr +bump-branch-ms-test-suite: __bump-branch-ms-test-suite + +# Bump the given submodule to its current GIT version +# If COMMIT is 1, commit the change +bump-current-roslyn: __bump-current-version-roslyn +bump-current-coreclr: __bump-current-version-coreclr +bump-current-ms-test-suite: __bump-current-version-ms-test-suite + +commit-bump-roslyn: + $(MAKE) bump-roslyn COMMIT=1 + +commit-bump-coreclr: + $(MAKE) bump-coreclr COMMIT=1 + +commit-bump-ms-test-suite: + $(MAKE) bump-ms-test-suite COMMIT=1 + +commit-bump-current-roslyn: + $(MAKE) bump-current-roslyn COMMIT=1 + +commit-bump-current-coreclr: + $(MAKE) bump-current-coreclr COMMIT=1 + +commit-bump-current-ms-test-suite: + $(MAKE) bump-current-ms-test-suite COMMIT=1 diff --git a/acceptance-tests/versions.py b/acceptance-tests/versions.py new file mode 100755 index 0000000000..5fff4f18f3 --- /dev/null +++ b/acceptance-tests/versions.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +import sys +import json + +def find_module(submodules, name): + for item in submodules: + if item["name"] == name: + return item + + print "Not found" + sys.exit(1) + + +if len(sys.argv) < 2: + print "Usage: versions.py " + sys.exit(1) + +CONFIG_FILE = "SUBMODULES.json" +command = sys.argv[1] + +submodules = json.load(open(CONFIG_FILE)) + +if command == "get-rev": + mod = find_module(submodules, sys.argv[2]) + print mod["rev"] +elif command == "get-url": + mod = find_module(submodules, sys.argv[2]) + print mod["url"] +elif command == "get-dir": + mod = find_module(submodules, sys.argv[2]) + print mod["directory"] +elif command == "get-remote-branch": + mod = find_module(submodules, sys.argv[2]) + print mod["remote-branch"] +elif command == "set-rev": + mod = find_module(submodules, sys.argv[2]) + mod["rev"] = sys.argv[3] + json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2) +elif command == "set-branch": + mod = find_module(submodules, sys.argv[2]) + mod["branch"] = sys.argv[3] + json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2) +elif command == "set-remote-branch": + mod = find_module(submodules, sys.argv[2]) + mod["remote-branch"] = sys.argv[3] + json.dump(submodules, open(CONFIG_FILE, "w"), indent = 2) +elif command == "cat": + print json.dumps(submodules, indent = 2) +else: + print "Unknown command "" + command + ""." + sys.exit(1) diff --git a/code_of_conduct.md b/code_of_conduct.md new file mode 100644 index 0000000000..84bad191c3 --- /dev/null +++ b/code_of_conduct.md @@ -0,0 +1,50 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of +fostering an open and welcoming community, we pledge to respect all people who +contribute through reporting issues, posting feature requests, updating +documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery +* Personal attacks +* Trolling or insulting/derogatory comments +* Public or private harassment +* Publishing other's private information, such as physical or electronic + addresses, without explicit permission +* Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +By adopting this Code of Conduct, project maintainers commit themselves to +fairly and consistently applying these principles to every aspect of managing +this project. Project maintainers who do not follow or enforce the Code of +Conduct may be permanently removed from the project team. + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting a project maintainer at miguel@xamarin.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. Maintainers are +obligated to maintain confidentiality with regard to the reporter of an +incident. + + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 1.3.0, available at +[http://contributor-covenant.org/version/1/3/0/][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/3/0/ diff --git a/config.h.in b/config.h.in index d5a7d684d1..4706dedd1a 100644 --- a/config.h.in +++ b/config.h.in @@ -1,7 +1,7 @@ /* config.h.in. Generated from configure.ac by autoheader. */ -/* The architecture this is running on */ -#undef ARCHITECTURE +/* Enable checked build. */ +#undef CHECKED_BUILD /* GC description */ #undef DEFAULT_GC_NAME @@ -10,7 +10,7 @@ #undef DISABLED_FEATURES /* Disable AOT Compiler */ -#undef DISABLE_AOT_COMPILER +#undef DISABLE_AOT /* Disable support for multiple appdomains. */ #undef DISABLE_APPDOMAINS @@ -94,9 +94,6 @@ /* Disable Shadow Copy for AppDomains */ #undef DISABLE_SHADOW_COPY -/* Disable inter-process shared handles */ -#undef DISABLE_SHARED_HANDLES - /* Disable shared perfcounters. */ #undef DISABLE_SHARED_PERFCOUNTERS @@ -133,6 +130,9 @@ /* Enable the LLVM back end */ #undef ENABLE_LLVM +/* Runtime support code for llvm enabled */ +#undef ENABLE_LLVM_RUNTIME + /* Enable using `perf` for profiling on Linux */ #undef ENABLE_PERF_EVENTS @@ -260,6 +260,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_EXECINFO_H +/* Define to 1 if you have the `execv' function. */ +#undef HAVE_EXECV + +/* Define to 1 if you have the `execve' function. */ +#undef HAVE_EXECVE + /* Define to 1 if you have the `execvp' function. */ #undef HAVE_EXECVP @@ -272,6 +278,9 @@ /* Define to 1 if you have the `finite' function. */ #undef HAVE_FINITE +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + /* Define to 1 if you have the header file. */ #undef HAVE_FSTAB_H @@ -332,9 +341,6 @@ /* Define to 1 if you have the `getpriority' function. */ #undef HAVE_GETPRIORITY -/* Define if GetProcessId is available */ -#undef HAVE_GETPROCESSID - /* Have getprotobyname */ #undef HAVE_GETPROTOBYNAME @@ -413,6 +419,9 @@ /* isinf available */ #undef HAVE_ISINF +/* Define to 1 if you have the `kill' function. */ +#undef HAVE_KILL + /* Define to 1 if you have the `kqueue' function. */ #undef HAVE_KQUEUE @@ -470,6 +479,9 @@ /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP +/* Moving collector */ +#undef HAVE_MOVING_COLLECTOR + /* Define to 1 if you have the `mremap' function. */ #undef HAVE_MREMAP @@ -575,12 +587,6 @@ /* Define to 1 if you have the `remap_file_pages' function. */ #undef HAVE_REMAP_FILE_PAGES -/* Define to 1 if you have the `rint' function. */ -#undef HAVE_RINT - -/* Define to 1 if you have the `round' function. */ -#undef HAVE_ROUND - /* Define to 1 if you have the `sched_getcpu' function. */ #undef HAVE_SCHED_GETCPU @@ -632,6 +638,9 @@ /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION +/* Define to 1 if you have the `signal' function. */ +#undef HAVE_SIGNAL + /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H @@ -707,6 +716,9 @@ /* Define to 1 if `kp_proc' is a member of `struct kinfo_proc'. */ #undef HAVE_STRUCT_KINFO_PROC_KP_PROC +/* Define to 1 if the system has the type `struct linger'. */ +#undef HAVE_STRUCT_LINGER + /* Define to 1 if `pw_gecos' is a member of `struct passwd'. */ #undef HAVE_STRUCT_PASSWD_PW_GECOS @@ -806,9 +818,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_SEM_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SENDFILE_H @@ -896,6 +905,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H +/* Define to 1 if you have the header file. */ +#undef HAVE_UNWIND_H + /* Define to 1 if you have /usr/include/malloc.h. */ #undef HAVE_USR_INCLUDE_MALLOC_H @@ -945,6 +957,9 @@ */ #undef LT_OBJDIR +/* The architecture this is running on */ +#undef MONO_ARCHITECTURE + /* Enable the allocation and indexing of arrays greater than Int32.MaxValue */ #undef MONO_BIG_ARRAYS @@ -957,6 +972,9 @@ /* native types */ #undef MONO_NATIVE_TYPES +/* AOT cross offsets file */ +#undef MONO_OFFSETS_FILE + /* Reduce runtime requirements (and capabilities) */ #undef MONO_SMALL_CONFIG @@ -1071,6 +1089,9 @@ /* ... */ #undef TARGET_SPARC64 +/* The JIT/AOT targets WatchOS */ +#undef TARGET_WATCHOS + /* Target Platform is Win32 */ #undef TARGET_WIN32 diff --git a/configure.REMOVED.git-id b/configure.REMOVED.git-id index d7ae48f794..816b42a40b 100644 --- a/configure.REMOVED.git-id +++ b/configure.REMOVED.git-id @@ -1 +1 @@ -08afe9df2791baac02e8201b01cce1aca3beb124 \ No newline at end of file +79ba3854a41b122e90badfb88a8aba24b6abc54c \ No newline at end of file diff --git a/configure.ac.REMOVED.git-id b/configure.ac.REMOVED.git-id index 509df77bc6..19a455bed7 100644 --- a/configure.ac.REMOVED.git-id +++ b/configure.ac.REMOVED.git-id @@ -1 +1 @@ -4fa615ca8fe030cfede44041b86cf5bfc38aceaf \ No newline at end of file +568cb227ed520bd10d312bf4a66ccba0f772b016 \ No newline at end of file diff --git a/data/Makefile.am b/data/Makefile.am index 2cfd5202b6..b5b83fa69f 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -14,7 +14,8 @@ EXTRA_DIST = \ net_1_1/machine.config \ gdb/mono-gdb.py \ gdb/gdb-python.diff \ - lldb/mono.py + lldb/mono.py \ + lldb/monobt.py pkgconfigdir = $(libdir)/pkgconfig diff --git a/data/Makefile.in b/data/Makefile.in index a2916d81b5..53b44a0070 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -237,8 +237,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -254,9 +252,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -274,8 +272,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ @@ -447,7 +443,8 @@ EXTRA_DIST = \ net_1_1/machine.config \ gdb/mono-gdb.py \ gdb/gdb-python.diff \ - lldb/mono.py + lldb/mono.py \ + lldb/monobt.py pkgconfigdir = $(libdir)/pkgconfig @SUPPORT_SGEN_FALSE@SGENPCFILE = diff --git a/data/config.in b/data/config.in index b7601766e9..b4b7243ecf 100644 --- a/data/config.in +++ b/data/config.in @@ -10,7 +10,7 @@ - + diff --git a/data/gdb/mono-gdb.py b/data/gdb/mono-gdb.py index f4dcfe72c0..7d9eab5cb7 100644 --- a/data/gdb/mono-gdb.py +++ b/data/gdb/mono-gdb.py @@ -48,7 +48,7 @@ def stringify_class_name(ns, name): if ns == "": return name else: - return "%s.%s".format (ns, name) + return "{}.{}".format (ns, name) class ArrayPrinter: "Print a C# array" @@ -61,7 +61,7 @@ class ArrayPrinter: def to_string(self): obj = self.val.cast (gdb.lookup_type ("MonoArray").pointer ()).dereference () length = obj ['max_length'] - return "%s [%d]".format (stringify_class_name (self.class_ns, self.class_name [0:len(self.class_name) - 2]), int(length)) + return "{} [{}]".format (stringify_class_name (self.class_ns, self.class_name [0:len(self.class_name) - 2]), int(length)) class ObjectPrinter: "Print a C# object" @@ -91,7 +91,7 @@ class ObjectPrinter: return (field.name, self.obj [field.name]) except: # Superclass - return (field.name, self.obj.cast (gdb.lookup_type ("%s".format (field.name)))) + return (field.name, self.obj.cast (gdb.lookup_type ("{}".format (field.name)))) def children(self): # FIXME: It would be easier if gdb.Value would support iteration itself @@ -105,7 +105,7 @@ class ObjectPrinter: if class_name [-2:len(class_name)] == "[]": return {}.__iter__ () try: - gdb_type = gdb.lookup_type ("struct %s_%s".format (class_ns.replace (".", "_"), class_name)) + gdb_type = gdb.lookup_type ("struct {}_{}".format (class_ns.replace (".", "_"), class_name)) return self._iterator(obj.cast (gdb_type)) except: return {}.__iter__ () @@ -127,12 +127,12 @@ class ObjectPrinter: return ArrayPrinter (self.val,class_ns,class_name).to_string () if class_ns != "": try: - gdb_type = gdb.lookup_type ("struct %s.%s".format (class_ns, class_name)) + gdb_type = gdb.lookup_type ("struct {}.{}".format (class_ns, class_name)) except: # Maybe there is no debug info for that type - return "%s.%s".format (class_ns, class_name) + return "{}.{}".format (class_ns, class_name) #return obj.cast (gdb_type) - return "%s.%s".format (class_ns, class_name) + return "{}.{}".format (class_ns, class_name) return class_name except: print (sys.exc_info ()[0]) @@ -152,9 +152,9 @@ class MonoMethodPrinter: val = self.val.dereference () klass = val ["klass"].dereference () class_name = stringify_class_name (klass ["name_space"].string (), klass ["name"].string ()) - return "\"%s:%s ()\"".format (class_name, val ["name"].string ()) + return "\"{}:{} ()\"".format (class_name, val ["name"].string ()) # This returns more info but requires calling into the inferior - #return "\"%s\"".format (gdb.parse_and_eval ("mono_method_full_name (%s, 1)".format (str (int (self.val.cast (gdb.lookup_type ("guint64")))))).string ()) + #return "\"{}\"".format (gdb.parse_and_eval ("mono_method_full_name ({}, 1)".format (str (int (self.val.cast (gdb.lookup_type ("guint64")))))).string ()) class MonoClassPrinter: "Print a MonoClass structure" @@ -168,13 +168,13 @@ class MonoClassPrinter: klass = self.val.dereference () class_name = stringify_class_name (klass ["name_space"].string (), klass ["name"].string ()) if klass ["generic_class"].cast (gdb.lookup_type ("guint64")) != 0: - class_name = "%s<%s>".format (class_name, str (klass ["generic_class"]["context"]["class_inst"])) + class_name = "{}<{}>".format (class_name, str (klass ["generic_class"]["context"]["class_inst"])) if add_quotes: - return "\"%s\"".format (class_name) + return "\"{}\"".format (class_name) else: return class_name # This returns more info but requires calling into the inferior - #return "\"%s\"".format (gdb.parse_and_eval ("mono_type_full_name (&((MonoClass*)%s)->byval_arg)".format (str (int ((self.val).cast (gdb.lookup_type ("guint64"))))))) + #return "\"{}\"".format (gdb.parse_and_eval ("mono_type_full_name (&((MonoClass*){})->byval_arg)".format (str (int ((self.val).cast (gdb.lookup_type ("guint64"))))))) def to_string(self): try: @@ -222,7 +222,7 @@ class MonoGenericClassPrinter: method_inst_str = "" if int(method_inst.cast (gdb.lookup_type ("guint64"))) != 0: method_inst_str = str(method_inst) - return "%s, [%s], [%s]>".format (container_str, class_inst_str, method_inst_str) + return "{}, [{}], [{}]>".format (container_str, class_inst_str, method_inst_str) def to_string(self): try: @@ -252,9 +252,9 @@ class MonoTypePrinter: info = str(t ["data"]["generic_class"]) if info != "": - return "{%s, %s}".format (kind, info) + return "{{}, {}}".format (kind, info) else: - return "{%s}".format (kind) + return "{{}}".format (kind) except: #print (sys.exc_info ()[0]) #print (sys.exc_info ()[1]) @@ -283,7 +283,7 @@ class MonoMethodRgctxPrinter: if i > 0: inst_str = inst_str + ", " inst_str = inst_str + type_printer.to_string () - return "MRGCTX[%s, [%s]]".format (klass_printer.to_string(), inst_str) + return "MRGCTX[{}, [{}]]".format (klass_printer.to_string(), inst_str) class MonoVTablePrinter: "Print a MonoVTable structure" @@ -298,7 +298,7 @@ class MonoVTablePrinter: klass = vtable ["klass"] klass_printer = MonoClassPrinter (klass) - return "vtable(%s)".format (klass_printer.to_string ()) + return "vtable({})".format (klass_printer.to_string ()) def lookup_pretty_printer(val): t = str (val.type) diff --git a/data/lldb/monobt.py b/data/lldb/monobt.py new file mode 100644 index 0000000000..0e4713816d --- /dev/null +++ b/data/lldb/monobt.py @@ -0,0 +1,56 @@ +import lldb + +def print_frames(thread, num_frames, current_thread): + # TODO: Make output header similar to bt. + print '%c thread #%i' % ('*' if current_thread else ' ', thread.idx) + + if current_thread: + selected_frame = thread.GetSelectedFrame() + + for frame in thread.frames[:+num_frames]: + pc = str(frame.addr) + fmt = ' %c %s' + var = frame + if pc[0] == '0': + try: + framestr = frame.EvaluateExpression('(char*)mono_pmip((void*)%s)' % pc).summary[1:-1] + var = 'frame #%i: %s%s' % (frame.idx, pc, framestr) + except: + pass + + print fmt % ('*' if current_thread and frame.idx == selected_frame.idx else ' ', var) + +def monobt(debugger, command, result, dict): + opts = {'all_bt': False, 'num_frames': None} + + if command == 'all': + opts['all_bt'] = True + elif command.isdigit(): + opts['num_frames'] = int(command) + elif command != '': + print 'error: monobt [|all]' + return + + target = debugger.GetSelectedTarget() + process = target.process + + if not process.IsValid(): + print 'error: invalid process' + return + + if opts['all_bt']: + for thread in process.threads: + print_frames(thread, len(thread), process.selected_thread == thread) + print '' + else: + thread = process.selected_thread + num_frames = len(thread) if opts['num_frames'] is None else opts['num_frames'] + print_frames(thread, num_frames, True) + + return None + +def __lldb_init_module (debugger, dict): + # This initializer is being run from LLDB in the embedded command interpreter + # Add any commands contained in this module to LLDB + debugger.HandleCommand('command script add -f monobt.monobt monobt') + print '"monobt" command installed' \ No newline at end of file diff --git a/data/mono-nunit.pc.in b/data/mono-nunit.pc.in index 5f4e116ab2..64268cd8d9 100644 --- a/data/mono-nunit.pc.in +++ b/data/mono-nunit.pc.in @@ -6,4 +6,4 @@ libdir=${exec_prefix}/lib Name: Mono NUnit Description: Mono's version of NUnit Version: @VERSION@ -Libs: -r:${libdir}/mono/2.0/nunit.core.dll -r:${libdir}/mono/2.0/nunit.core.interfaces.dll -r:${libdir}/mono/2.0/nunit.core.extensions.dll -r:${libdir}/mono/2.0/nunit.framework.dll -r:${libdir}/mono/2.0/nunit.framework.extensions.dll -r:${libdir}/mono/2.0/nunit.mocks.dll -r:${libdir}/mono/2.0/nunit.util.dll -r:${libdir}/mono/2.0/nunit-console-runner.dll +Libs: -r:${libdir}/mono/4.5/nunit.core.dll -r:${libdir}/mono/4.5/nunit.core.interfaces.dll -r:${libdir}/mono/4.5/nunit.core.extensions.dll -r:${libdir}/mono/4.5/nunit.framework.dll -r:${libdir}/mono/4.5/nunit.framework.extensions.dll -r:${libdir}/mono/4.5/nunit.mocks.dll -r:${libdir}/mono/4.5/nunit.util.dll -r:${libdir}/mono/4.5/nunit-console-runner.dll diff --git a/data/net_2_0/Browsers/Makefile.in b/data/net_2_0/Browsers/Makefile.in index ece1326d2a..d95d1f34d7 100644 --- a/data/net_2_0/Browsers/Makefile.in +++ b/data/net_2_0/Browsers/Makefile.in @@ -159,8 +159,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -176,9 +174,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -196,8 +194,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/data/net_2_0/Makefile.in b/data/net_2_0/Makefile.in index bb9eb9dd2c..5bb8800fe7 100644 --- a/data/net_2_0/Makefile.in +++ b/data/net_2_0/Makefile.in @@ -219,8 +219,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -236,9 +234,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -256,8 +254,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/data/net_4_0/Browsers/Makefile.in b/data/net_4_0/Browsers/Makefile.in index 13a918abd0..67e1966c20 100644 --- a/data/net_4_0/Browsers/Makefile.in +++ b/data/net_4_0/Browsers/Makefile.in @@ -159,8 +159,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -176,9 +174,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -196,8 +194,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/data/net_4_0/Makefile.in b/data/net_4_0/Makefile.in index d112f186e0..06861e9b2a 100644 --- a/data/net_4_0/Makefile.in +++ b/data/net_4_0/Makefile.in @@ -219,8 +219,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -236,9 +234,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -256,8 +254,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/data/net_4_5/Browsers/Makefile.in b/data/net_4_5/Browsers/Makefile.in index 41a9ff0a99..78f56bf16c 100644 --- a/data/net_4_5/Browsers/Makefile.in +++ b/data/net_4_5/Browsers/Makefile.in @@ -159,8 +159,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -176,9 +174,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -196,8 +194,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/data/net_4_5/Makefile.in b/data/net_4_5/Makefile.in index 9d310ae0e0..979db7c049 100644 --- a/data/net_4_5/Makefile.in +++ b/data/net_4_5/Makefile.in @@ -219,8 +219,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -236,9 +234,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -256,8 +254,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ diff --git a/docs/Makefile.am b/docs/Makefile.am index 9c51442040..bb90f1f200 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -54,6 +54,10 @@ EXTRA_DIST = \ TODO \ unmanaged-calls +-include $(mcs_topdir)/build/config.make + +CLASS=$(mcs_topdir)/class/lib/$(DEFAULT_PROFILE) + dist-hook: $(mkdir_p) $(distdir)/sources $(mkdir_p) $(distdir)/svgs @@ -89,14 +93,14 @@ mono-file-formats.tree: $(srcdir)/docs.make $(srcdir)/Makefile.am $(srcdir)/depl deploy/.stamp: convert.exe Makefile.am $(mkdir_p) html runtimedir=`cd ../runtime && pwd`; export runtimedir; \ - MONO_PATH=../mcs/class/lib/net_4_5 perl $(srcdir)/exdoc -h $(srcdir) -t . $(srcdir)/../mono/*/*.c + MONO_PATH=$(CLASS) perl $(srcdir)/exdoc -h $(srcdir) -t . $(srcdir)/../mono/*/*.c touch $@ extract: deploy/.stamp convert.exe: convert.cs AgilityPack.dll - $(TOOL_MAKE) PROFILE=net_4_5 convert.exe + $(TOOL_MAKE) convert.exe AgilityPack.dll: - $(TOOL_MAKE) PROFILE=net_4_5 AgilityPack.dll + $(TOOL_MAKE) AgilityPack.dll diff --git a/docs/Makefile.in b/docs/Makefile.in index c25550175b..b4d74d28e7 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -159,8 +159,6 @@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOEHM_DEFINES = @BOEHM_DEFINES@ BUILD_EXEEXT = @BUILD_EXEEXT@ -BUILD_GLIB_CFLAGS = @BUILD_GLIB_CFLAGS@ -BUILD_GLIB_LIBS = @BUILD_GLIB_LIBS@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -176,9 +174,9 @@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ +DEFAULT_PROFILE = @DEFAULT_PROFILE@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ -DISABLE_SHARED_HANDLES = @DISABLE_SHARED_HANDLES@ DLLTOOL = @DLLTOOL@ DOLT_BASH = @DOLT_BASH@ DSYMUTIL = @DSYMUTIL@ @@ -196,8 +194,6 @@ GDKX11 = @GDKX11@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ -GMODULE_CFLAGS = @GMODULE_CFLAGS@ -GMODULE_LIBS = @GMODULE_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ @@ -410,6 +406,7 @@ EXTRA_DIST = \ TODO \ unmanaged-calls +CLASS = $(mcs_topdir)/class/lib/$(DEFAULT_PROFILE) TOOL_MAKE = $(MAKE) -f $(srcdir)/docs.make topdir=$(srcdir)/../mcs srcdir=$(srcdir) all: all-am @@ -630,6 +627,8 @@ uninstall-am: uninstall-sourcesDATA uninstall-am uninstall-sourcesDATA +-include $(mcs_topdir)/build/config.make + dist-hook: $(mkdir_p) $(distdir)/sources $(mkdir_p) $(distdir)/svgs @@ -663,16 +662,16 @@ mono-file-formats.tree: $(srcdir)/docs.make $(srcdir)/Makefile.am $(srcdir)/depl deploy/.stamp: convert.exe Makefile.am $(mkdir_p) html runtimedir=`cd ../runtime && pwd`; export runtimedir; \ - MONO_PATH=../mcs/class/lib/net_4_5 perl $(srcdir)/exdoc -h $(srcdir) -t . $(srcdir)/../mono/*/*.c + MONO_PATH=$(CLASS) perl $(srcdir)/exdoc -h $(srcdir) -t . $(srcdir)/../mono/*/*.c touch $@ extract: deploy/.stamp convert.exe: convert.cs AgilityPack.dll - $(TOOL_MAKE) PROFILE=net_4_5 convert.exe + $(TOOL_MAKE) convert.exe AgilityPack.dll: - $(TOOL_MAKE) PROFILE=net_4_5 AgilityPack.dll + $(TOOL_MAKE) AgilityPack.dll # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/docs/deploy/mono-api-class.html b/docs/deploy/mono-api-class.html index 8ae3defebf..c1cf37092d 100644 --- a/docs/deploy/mono-api-class.html +++ b/docs/deploy/mono-api-class.html @@ -105,8 +105,13 @@ mono_class_enum_basetype (MonoClass *klass)
mono_class_from_generic_parameter
-
Prototype: mono_class_from_generic_parameter
+
MonoClass* +mono_class_from_generic_parameter (MonoGenericParam *param, MonoImage *arg2 G_GNUC_UNUSED, gboolean arg3 G_GNUC_UNUSED) + +

+Parameters +

param:
Parameter to find/construct a class for.
arg2:
Is ignored.
arg3:
Is ignored.
@@ -245,7 +250,7 @@ mono_class_get_field_from_name (MonoClass *klass, const char *name)
mono_class_get_field
MonoClassField* -mono_class_get_field (MonoClass *class, guint32 field_token) +mono_class_get_field (MonoClass *klass, guint32 field_token)

@@ -579,7 +584,7 @@ mono_class_get_type (MonoClass *klass)

mono_class_init
gboolean -mono_class_init (MonoClass *class) +mono_class_init (MonoClass *klass)

@@ -788,7 +793,7 @@ mono_class_value_size (MonoClass *klass, guint32 *align)

mono_class_vtable
MonoVTable* -mono_class_vtable (MonoDomain *domain, MonoClass *class) +mono_class_vtable (MonoDomain *domain, MonoClass *klass)

diff --git a/docs/deploy/mono-api-domains.html b/docs/deploy/mono-api-domains.html index 3966740020..5c8738e31a 100644 --- a/docs/deploy/mono-api-domains.html +++ b/docs/deploy/mono-api-domains.html @@ -72,8 +72,8 @@ gboolean mono_domain_finalize guint32 timeout) ; - -MonoDomain* mono_domain_get_by_id (gint32 domainid) ; +MonoDomain* mono_domain_get_by_id (gint32 domainid) ; + MonoDomain* mono_domain_get (); gboolean mono_domain_has_type_resolve (MonoDomain *domain); @@ -165,13 +165,6 @@ mono_domain_finalize (MonoDomain *domain, guint32 timeout)

mono_domain_get_by_id
-
Prototype: mono_domain_get_by_id
-

- -

-
-
mono_domain_get_id
-
MonoDomain* mono_domain_get_by_id (gint32 domainid) @@ -180,9 +173,16 @@ mono_domain_get_by_id (gint32 domainid) Parameters
domainid:
the ID
Returns -
the a domain for a specific domain id. +
the domain for a specific domain id.
+
+
+
mono_domain_get_id
+ +
Prototype: mono_domain_get_id
+

+

mono_domain_get
diff --git a/docs/deploy/mono-api-gchandle.html b/docs/deploy/mono-api-gchandle.html index 84b9fc22dd..e7527462fc 100644 --- a/docs/deploy/mono-api-gchandle.html +++ b/docs/deploy/mono-api-gchandle.html @@ -55,12 +55,12 @@

Synopsys

-guint32 mono_gchandle_new (MonoObject *obj, - gboolean pinned); -guint32 mono_gchandle_new_weakref (MonoObject *obj, - gboolean track_resurrection); -MonoObject* mono_gchandle_get_target (guint32 gchandle); -void mono_gchandle_free (guint32 gchandle); +guint32 mono_gchandle_new (GCObject *obj, + gboolean pinned); +guint32 mono_gchandle_new_weakref (GCObject *obj, + gboolean track_resurrection); +GCObject* mono_gchandle_get_target (guint32 gchandle); +void mono_gchandle_free (guint32 gchandle);
@@ -149,7 +149,7 @@ static MonoObject* o = NULL;
mono_gchandle_new
guint32 -mono_gchandle_new (MonoObject *obj, gboolean pinned) +mono_gchandle_new (GCObject *obj, gboolean pinned)

@@ -178,7 +178,7 @@ mono_gchandle_new (MonoObject *obj, gboolean pinned)

mono_gchandle_new_weakref
guint32 -mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection) +mono_gchandle_new_weakref (GCObject *obj, gboolean track_resurrection)

@@ -208,7 +208,7 @@ mono_gchandle_new_weakref (MonoObject *obj, gboolean track_resurrection)

mono_gchandle_get_target
-
MonoObject* +
GCObject* mono_gchandle_get_target (guint32 gchandle)
diff --git a/docs/deploy/mono-api-image.html b/docs/deploy/mono-api-image.html index cbb8f2dfa9..e3c854a18d 100644 --- a/docs/deploy/mono-api-image.html +++ b/docs/deploy/mono-api-image.html @@ -350,13 +350,13 @@ mono_image_loaded (const char *name)

Parameters -

name:
name of the image to load
+
name:
path or assembly name of the image to load
Returns
the loaded MonoImage, or NULL on failure.
Remarks

- This routine ensures that the given image is loaded. + This routine verifies that the given image is loaded. Reflection-only loads do not count.

diff --git a/docs/deploy/mono-api-metadata.html b/docs/deploy/mono-api-metadata.html index 39d59d5d88..b6b243b3b1 100644 --- a/docs/deploy/mono-api-metadata.html +++ b/docs/deploy/mono-api-metadata.html @@ -1198,7 +1198,7 @@ mono_metadata_parse_param (MonoImage *m, const char *ptr, const char **rptr)
mono_metadata_parse_type
static MonoType* -mono_metadata_parse_type_internal (MonoImage *m, MonoGenericContainer *container, MonoParseTypeMode mode, +mono_metadata_parse_type_internal (MonoImage *m, MonoGenericContainer *container, short opt_attrs, gboolean transient, const char *ptr, const char **rptr)
diff --git a/docs/deploy/mono-api-object.html b/docs/deploy/mono-api-object.html index 42dd693fb8..2eb33909b5 100644 --- a/docs/deploy/mono-api-object.html +++ b/docs/deploy/mono-api-object.html @@ -110,7 +110,7 @@ MonoObject* mono_object_castclass_mb MonoClass *klass); guint mono_object_get_size (MonoObject* o); MonoObject* mono_value_box (MonoDomain *domain, - MonoClass *class, + MonoClass *klass, gpointer value); @@ -177,18 +177,18 @@ const char* mono_event_get_name MonoClass* mono_event_get_parent (MonoEvent *event); MonoMethod* mono_event_get_raise_method (MonoEvent *event); MonoMethod* mono_event_get_remove_method (MonoEvent *event); -gpointer mono_load_remote_field (MonoObject *this, +gpointer mono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer *res); -MonoObject* mono_load_remote_field_new (MonoObject *this, +MonoObject* mono_load_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field); -void mono_store_remote_field (MonoObject *this, +void mono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer val); -void mono_store_remote_field_new (MonoObject *this, +void mono_store_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, MonoObject *arg); @@ -449,7 +449,7 @@ mono_object_get_size (MonoObject* o)
mono_value_box
MonoObject* -mono_value_box (MonoDomain *domain, MonoClass *class, gpointer value) +mono_value_box (MonoDomain *domain, MonoClass *klass, gpointer value)

@@ -1072,7 +1072,7 @@ mono_event_get_remove_method (MonoEvent *event)

mono_load_remote_field
gpointer -mono_load_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer *res) +mono_load_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer *res)

@@ -1094,7 +1094,7 @@ mono_load_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *fiel

mono_load_remote_field_new
MonoObject* -mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *field) +mono_load_remote_field_new (MonoObject *this_obj, MonoClass *klass, MonoClassField *field)

@@ -1109,16 +1109,16 @@ mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *

mono_store_remote_field
void -mono_store_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer val) +mono_store_remote_field (MonoObject *this_obj, MonoClass *klass, MonoClassField *field, gpointer val)

Parameters -

this:
pointer to an object
klass:
klass of the object containing field
field:
the field to load
val:
the value/object to store
+
this_obj:
pointer to an object
klass:
klass of the object containing field
field:
the field to load
val:
the value/object to store
Remarks

This method is called by the runtime on attempts to store fields of - transparent proxy objects. this points to such TP, klass is the class of + transparent proxy objects. this_obj points to such TP, klass is the class of the object containing field. val is the new value to store in field.

diff --git a/docs/deploy/mono-api-utils.html b/docs/deploy/mono-api-utils.html index c0f236e038..c2a7dcddeb 100644 --- a/docs/deploy/mono-api-utils.html +++ b/docs/deploy/mono-api-utils.html @@ -483,7 +483,7 @@ mono_mempool_alloc (MonoMemPool *pool, guint size)

Parameters -

pool:
the momory pool to use
size:
size of the momory block
+
pool:
the memory pool to use
size:
size of the memory block
Returns
the address of a newly allocated memory block.
@@ -540,7 +540,10 @@ mono_mempool_stats (MonoMemPool *pool)
pool:
the momory pool we need stats for
Remarks

- Print a few stats about the mempool + Print a few stats about the mempool: + - Total memory allocated (malloced) by mem pool + - Number of chunks/blocks memory is allocated in + - How much memory is available to dispense before a new malloc must occur?

diff --git a/docs/deploy/mono-api-wapi.html b/docs/deploy/mono-api-wapi.html index 778f9f9731..3053e26557 100644 --- a/docs/deploy/mono-api-wapi.html +++ b/docs/deploy/mono-api-wapi.html @@ -170,7 +170,7 @@
gpointer CreateFile(const gunichar2 *name, guint32 fileaccess, guint32 sharemode, WapiSecurityAttributes *security, guint32 createmode, guint32 attrs, - gpointer template G_GNUC_UNUSED) + gpointer template_ G_GNUC_UNUSED)

@@ -461,20 +461,8 @@

GetCurrentThreadId
-
gsize -GetCurrentThreadId (void) - -
+
Prototype: GetCurrentThreadId

-Remarks -

- Looks up the thread ID of the current thread. This ID can be - passed to OpenThread() to create a new handle on this thread. - - Return value: the thread ID. NB this is defined as DWORD (ie 32 - bit) in the MS API, but we need to cope with 64 bit IDs for s390x - and amd64. This doesn't really break the API, it just embraces and - extends it on 64bit platforms :)

@@ -1245,18 +1233,8 @@ gpointer GetStdHandle(WapiStdHandle stdhandle)
SleepEx
-
guint32 -SleepEx (guint32 ms, gboolean alertable) - -
+
Prototype: SleepEx

-Parameters -

ms:
The time in milliseconds to suspend for
alertable:
if TRUE, the wait can be interrupted by an APC call
-Remarks -

- Suspends execution of the current thread for ms milliseconds. A - value of zero causes the thread to relinquish its time slice. A - value of %INFINITE causes an infinite delay.

@@ -1574,14 +1552,8 @@ SleepEx (guint32 ms, gboolean alertable)
wapi_thread_clear_wait_handle
-
void -wapi_thread_clear_wait_handle (gpointer handle) - -
+
Prototype: wapi_thread_clear_wait_handle

-Remarks -

- Clear the wait handle of the current thread.

diff --git a/docs/public-api b/docs/public-api index c9d90eb25b..31e42c6fe7 100644 --- a/docs/public-api +++ b/docs/public-api @@ -750,6 +750,8 @@ mono_thread_current mono_thread_detach mono_thread_exit mono_thread_get_main +mono_thread_get_managed_id +mono_thread_get_name_utf8 mono_thread_get_undeniable_exception mono_thread_hazardous_free_or_queue mono_thread_hazardous_try_free_all diff --git a/eglib/config.h.in b/eglib/config.h.in index bfaf5ef218..6e94a5e16a 100644 --- a/eglib/config.h.in +++ b/eglib/config.h.in @@ -6,6 +6,15 @@ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H +/* Define to 1 if you have the `execv' function. */ +#undef HAVE_EXECV + +/* Define to 1 if you have the `execve' function. */ +#undef HAVE_EXECVE + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H @@ -27,6 +36,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H +/* Define to 1 if you have the `iconv' library (-liconv). */ +#undef HAVE_LIBICONV + /* Define to 1 if you have the header file. */ #undef HAVE_LOCALCHARSET_H diff --git a/eglib/configure.REMOVED.git-id b/eglib/configure.REMOVED.git-id index 5a09124279..c2c18cbd60 100644 --- a/eglib/configure.REMOVED.git-id +++ b/eglib/configure.REMOVED.git-id @@ -1 +1 @@ -aed8bc038cc124da52dba4e1ed93a11f9fca3f47 \ No newline at end of file +10621617ddcde3326cdc7989cbfaee18ae75d381 \ No newline at end of file diff --git a/eglib/configure.ac b/eglib/configure.ac index 5281419c00..2197c6f9c9 100644 --- a/eglib/configure.ac +++ b/eglib/configure.ac @@ -136,6 +136,7 @@ AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long long) AC_CHECK_FUNCS(strlcpy stpcpy strtok_r rewinddir vasprintf) AC_CHECK_FUNCS(getrlimit) +AC_CHECK_FUNCS(fork execv execve) # # Mono currently supports 10.6, but strndup is not available prior to 10.7; avoiding @@ -150,7 +151,7 @@ elif test x$target_ios = xno; then AC_CHECK_FUNCS(strndup getpwuid_r) fi -AM_CONDITIONAL(NEED_VASPRINTF, test x$have_vasprintf = x ) +AM_CONDITIONAL(NEED_VASPRINTF, test x$ac_cv_func_vasprintf = xno ) AM_ICONV() AC_SEARCH_LIBS(sqrtf, m) @@ -181,6 +182,7 @@ fi AC_SUBST(G_HAVE_ISO_VARARGS) AC_CHECK_HEADERS(getopt.h sys/select.h sys/time.h sys/wait.h pwd.h langinfo.h iconv.h localcharset.h sys/types.h sys/resource.h) +AC_CHECK_LIB([iconv], [locale_charset],[],[AC_CHECK_LIB([charset], [locale_charset],[LIBS+="-liconv -lcharset"])]) AC_CHECK_HEADER(alloca.h, [HAVE_ALLOCA_H=1], [HAVE_ALLOCA_H=0]) AC_SUBST(HAVE_ALLOCA_H) diff --git a/eglib/src/Makefile.am b/eglib/src/Makefile.am index 70d519ea22..31771dfd9a 100644 --- a/eglib/src/Makefile.am +++ b/eglib/src/Makefile.am @@ -1,4 +1,4 @@ -noinst_LTLIBRARIES = libeglib.la libeglib-static.la +noinst_LTLIBRARIES = libeglib.la AM_CFLAGS = $(WERROR_CFLAGS) @@ -59,8 +59,6 @@ libeglib_la_SOURCES = \ $(vasprintf_files) libeglib_la_CFLAGS = -g -Wall -D_FORTIFY_SOURCE=2 -libeglib_static_la_SOURCES=$(libeglib_la_SOURCES) -libeglib_static_la_CFLAGS = $(libeglib_la_CFLAGS) AM_CPPFLAGS = -I$(srcdir) @@ -72,9 +70,6 @@ libeglib_la_LIBADD = -llog endif endif -libeglib_static_la_LIBADD = $(libeglib_la_LIBADD) $(LIBICONV) -libeglib_static_la_LDFLAGS = -static - MAINTAINERCLEANFILES = Makefile.in EXTRA_DIST = eglib-config.h.in $(win_files) $(unix_files) diff --git a/eglib/src/Makefile.in b/eglib/src/Makefile.in new file mode 100644 index 0000000000..484b706ca4 --- /dev/null +++ b/eglib/src/Makefile.in @@ -0,0 +1,982 @@ +# Makefile.in generated by automake 1.13.4 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = src +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/../mkinstalldirs $(srcdir)/eglib-config.h.in \ + $(top_srcdir)/../depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = eglib-config.h +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +@HOST_WIN32_TRUE@libeglib_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__libeglib_la_SOURCES_DIST = eglib-remap.h sort.frag.h glib.h \ + garray.c gbytearray.c gerror.c vasprintf.h ghashtable.c \ + giconv.c gmem.c gmodule.h goutput.c gqsort.c gstr.c gslist.c \ + gstring.c gptrarray.c glist.c gqueue.c gpath.c gshell.c \ + gspawn.c gfile.c gfile-posix.c gpattern.c gmarkup.c gutf8.c \ + gunicode.c unicode-data.h gdate-unix.c gdir-unix.c \ + gfile-unix.c gmisc-unix.c gmodule-unix.c gtimer-unix.c \ + eglib-config.hw gdate-win32.c gdir-win32.c gfile-win32.c \ + gmisc-win32.c gmodule-win32.c gtimer-win32.c vasprintf.c +am__objects_1 = libeglib_la-gdate-unix.lo libeglib_la-gdir-unix.lo \ + libeglib_la-gfile-unix.lo libeglib_la-gmisc-unix.lo \ + libeglib_la-gmodule-unix.lo libeglib_la-gtimer-unix.lo +am__objects_2 = libeglib_la-gdate-win32.lo libeglib_la-gdir-win32.lo \ + libeglib_la-gfile-win32.lo libeglib_la-gmisc-win32.lo \ + libeglib_la-gmodule-win32.lo libeglib_la-gtimer-win32.lo +@HOST_WIN32_FALSE@am__objects_3 = $(am__objects_1) +@HOST_WIN32_TRUE@am__objects_3 = $(am__objects_2) +@NEED_VASPRINTF_TRUE@am__objects_4 = libeglib_la-vasprintf.lo +am_libeglib_la_OBJECTS = libeglib_la-garray.lo \ + libeglib_la-gbytearray.lo libeglib_la-gerror.lo \ + libeglib_la-ghashtable.lo libeglib_la-giconv.lo \ + libeglib_la-gmem.lo libeglib_la-goutput.lo \ + libeglib_la-gqsort.lo libeglib_la-gstr.lo \ + libeglib_la-gslist.lo libeglib_la-gstring.lo \ + libeglib_la-gptrarray.lo libeglib_la-glist.lo \ + libeglib_la-gqueue.lo libeglib_la-gpath.lo \ + libeglib_la-gshell.lo libeglib_la-gspawn.lo \ + libeglib_la-gfile.lo libeglib_la-gfile-posix.lo \ + libeglib_la-gpattern.lo libeglib_la-gmarkup.lo \ + libeglib_la-gutf8.lo libeglib_la-gunicode.lo $(am__objects_3) \ + $(am__objects_4) +libeglib_la_OBJECTS = $(am_libeglib_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libeglib_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libeglib_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libeglib_la_SOURCES) +DIST_SOURCES = $(am__libeglib_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BREAKPOINT = @BREAKPOINT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DOLT_BASH = @DOLT_BASH@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GINT_TO_POINTER = @GINT_TO_POINTER@ +GNUC_NORETURN = @GNUC_NORETURN@ +GNUC_PRETTY = @GNUC_PRETTY@ +GNUC_UNUSED = @GNUC_UNUSED@ +GPOINTER_TO_INT = @GPOINTER_TO_INT@ +GPOINTER_TO_UINT = @GPOINTER_TO_UINT@ +GREP = @GREP@ +GSIZE = @GSIZE@ +GSIZE_FORMAT = @GSIZE_FORMAT@ +GUINT_TO_POINTER = @GUINT_TO_POINTER@ +G_GINT32_FORMAT = @G_GINT32_FORMAT@ +G_GINT64_FORMAT = @G_GINT64_FORMAT@ +G_GUINT32_FORMAT = @G_GUINT32_FORMAT@ +G_GUINT64_FORMAT = @G_GUINT64_FORMAT@ +G_HAVE_ISO_VARARGS = @G_HAVE_ISO_VARARGS@ +HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTCOMPILE = @LTCOMPILE@ +LTCXXCOMPILE = @LTCXXCOMPILE@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +ORDER = @ORDER@ +OS = @OS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATHSEP = @PATHSEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PIDTYPE = @PIDTYPE@ +PKG_CONFIG = @PKG_CONFIG@ +RANLIB = @RANLIB@ +SEARCHSEP = @SEARCHSEP@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +WERROR_CFLAGS = @WERROR_CFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libeglib.la +AM_CFLAGS = $(WERROR_CFLAGS) +win_files = \ + eglib-config.hw \ + gdate-win32.c gdir-win32.c gfile-win32.c gmisc-win32.c \ + gmodule-win32.c gtimer-win32.c + +unix_files = \ + gdate-unix.c gdir-unix.c gfile-unix.c gmisc-unix.c \ + gmodule-unix.c gtimer-unix.c + + +# some unices and windows do not have an implementation of vasprintf +# used by eglib, use provided implementation instead +@NEED_VASPRINTF_TRUE@vasprintf_files = vasprintf.c +@NEED_VASPRINTF_FALSE@vaprinttf_files = foo.c +@HOST_WIN32_FALSE@os_files = $(unix_files) +@HOST_WIN32_TRUE@os_files = $(win_files) +libeglib_la_SOURCES = \ + eglib-remap.h \ + sort.frag.h \ + glib.h \ + garray.c \ + gbytearray.c \ + gerror.c \ + vasprintf.h \ + ghashtable.c \ + giconv.c \ + gmem.c \ + gmodule.h \ + goutput.c \ + gqsort.c \ + gstr.c \ + gslist.c \ + gstring.c \ + gptrarray.c \ + glist.c \ + gqueue.c \ + gpath.c \ + gshell.c \ + gspawn.c \ + gfile.c \ + gfile-posix.c \ + gpattern.c \ + gmarkup.c \ + gutf8.c \ + gunicode.c \ + unicode-data.h \ + $(os_files) \ + $(vasprintf_files) + +libeglib_la_CFLAGS = -g -Wall -D_FORTIFY_SOURCE=2 +AM_CPPFLAGS = -I$(srcdir) +@HOST_WIN32_FALSE@@PLATFORM_ANDROID_TRUE@libeglib_la_LIBADD = -llog +@HOST_WIN32_TRUE@libeglib_la_LIBADD = -lm $(LIBICONV) -lpsapi +MAINTAINERCLEANFILES = Makefile.in +EXTRA_DIST = eglib-config.h.in $(win_files) $(unix_files) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +eglib-config.h: $(top_builddir)/config.status $(srcdir)/eglib-config.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libeglib.la: $(libeglib_la_OBJECTS) $(libeglib_la_DEPENDENCIES) $(EXTRA_libeglib_la_DEPENDENCIES) + $(AM_V_CCLD)$(libeglib_la_LINK) $(libeglib_la_OBJECTS) $(libeglib_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-garray.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gbytearray.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gdate-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gdate-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gdir-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gdir-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gerror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gfile-posix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gfile-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gfile-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gfile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-ghashtable.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-giconv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-glist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmarkup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmem.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmisc-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmisc-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmodule-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gmodule-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-goutput.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gpath.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gpattern.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gptrarray.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gqsort.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gqueue.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gshell.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gslist.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gspawn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gstr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gstring.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gtimer-unix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gtimer-win32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gunicode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-gutf8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeglib_la-vasprintf.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libeglib_la-garray.lo: garray.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-garray.lo -MD -MP -MF $(DEPDIR)/libeglib_la-garray.Tpo -c -o libeglib_la-garray.lo `test -f 'garray.c' || echo '$(srcdir)/'`garray.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-garray.Tpo $(DEPDIR)/libeglib_la-garray.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='garray.c' object='libeglib_la-garray.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-garray.lo `test -f 'garray.c' || echo '$(srcdir)/'`garray.c + +libeglib_la-gbytearray.lo: gbytearray.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gbytearray.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gbytearray.Tpo -c -o libeglib_la-gbytearray.lo `test -f 'gbytearray.c' || echo '$(srcdir)/'`gbytearray.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gbytearray.Tpo $(DEPDIR)/libeglib_la-gbytearray.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gbytearray.c' object='libeglib_la-gbytearray.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gbytearray.lo `test -f 'gbytearray.c' || echo '$(srcdir)/'`gbytearray.c + +libeglib_la-gerror.lo: gerror.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gerror.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gerror.Tpo -c -o libeglib_la-gerror.lo `test -f 'gerror.c' || echo '$(srcdir)/'`gerror.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gerror.Tpo $(DEPDIR)/libeglib_la-gerror.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gerror.c' object='libeglib_la-gerror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gerror.lo `test -f 'gerror.c' || echo '$(srcdir)/'`gerror.c + +libeglib_la-ghashtable.lo: ghashtable.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-ghashtable.lo -MD -MP -MF $(DEPDIR)/libeglib_la-ghashtable.Tpo -c -o libeglib_la-ghashtable.lo `test -f 'ghashtable.c' || echo '$(srcdir)/'`ghashtable.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-ghashtable.Tpo $(DEPDIR)/libeglib_la-ghashtable.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ghashtable.c' object='libeglib_la-ghashtable.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-ghashtable.lo `test -f 'ghashtable.c' || echo '$(srcdir)/'`ghashtable.c + +libeglib_la-giconv.lo: giconv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-giconv.lo -MD -MP -MF $(DEPDIR)/libeglib_la-giconv.Tpo -c -o libeglib_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-giconv.Tpo $(DEPDIR)/libeglib_la-giconv.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='giconv.c' object='libeglib_la-giconv.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-giconv.lo `test -f 'giconv.c' || echo '$(srcdir)/'`giconv.c + +libeglib_la-gmem.lo: gmem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmem.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmem.Tpo -c -o libeglib_la-gmem.lo `test -f 'gmem.c' || echo '$(srcdir)/'`gmem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmem.Tpo $(DEPDIR)/libeglib_la-gmem.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmem.c' object='libeglib_la-gmem.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmem.lo `test -f 'gmem.c' || echo '$(srcdir)/'`gmem.c + +libeglib_la-goutput.lo: goutput.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-goutput.lo -MD -MP -MF $(DEPDIR)/libeglib_la-goutput.Tpo -c -o libeglib_la-goutput.lo `test -f 'goutput.c' || echo '$(srcdir)/'`goutput.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-goutput.Tpo $(DEPDIR)/libeglib_la-goutput.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='goutput.c' object='libeglib_la-goutput.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-goutput.lo `test -f 'goutput.c' || echo '$(srcdir)/'`goutput.c + +libeglib_la-gqsort.lo: gqsort.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gqsort.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gqsort.Tpo -c -o libeglib_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gqsort.Tpo $(DEPDIR)/libeglib_la-gqsort.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gqsort.c' object='libeglib_la-gqsort.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gqsort.lo `test -f 'gqsort.c' || echo '$(srcdir)/'`gqsort.c + +libeglib_la-gstr.lo: gstr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gstr.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gstr.Tpo -c -o libeglib_la-gstr.lo `test -f 'gstr.c' || echo '$(srcdir)/'`gstr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gstr.Tpo $(DEPDIR)/libeglib_la-gstr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstr.c' object='libeglib_la-gstr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gstr.lo `test -f 'gstr.c' || echo '$(srcdir)/'`gstr.c + +libeglib_la-gslist.lo: gslist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gslist.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gslist.Tpo -c -o libeglib_la-gslist.lo `test -f 'gslist.c' || echo '$(srcdir)/'`gslist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gslist.Tpo $(DEPDIR)/libeglib_la-gslist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gslist.c' object='libeglib_la-gslist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gslist.lo `test -f 'gslist.c' || echo '$(srcdir)/'`gslist.c + +libeglib_la-gstring.lo: gstring.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gstring.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gstring.Tpo -c -o libeglib_la-gstring.lo `test -f 'gstring.c' || echo '$(srcdir)/'`gstring.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gstring.Tpo $(DEPDIR)/libeglib_la-gstring.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstring.c' object='libeglib_la-gstring.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gstring.lo `test -f 'gstring.c' || echo '$(srcdir)/'`gstring.c + +libeglib_la-gptrarray.lo: gptrarray.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gptrarray.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gptrarray.Tpo -c -o libeglib_la-gptrarray.lo `test -f 'gptrarray.c' || echo '$(srcdir)/'`gptrarray.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gptrarray.Tpo $(DEPDIR)/libeglib_la-gptrarray.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gptrarray.c' object='libeglib_la-gptrarray.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gptrarray.lo `test -f 'gptrarray.c' || echo '$(srcdir)/'`gptrarray.c + +libeglib_la-glist.lo: glist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-glist.lo -MD -MP -MF $(DEPDIR)/libeglib_la-glist.Tpo -c -o libeglib_la-glist.lo `test -f 'glist.c' || echo '$(srcdir)/'`glist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-glist.Tpo $(DEPDIR)/libeglib_la-glist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glist.c' object='libeglib_la-glist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-glist.lo `test -f 'glist.c' || echo '$(srcdir)/'`glist.c + +libeglib_la-gqueue.lo: gqueue.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gqueue.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gqueue.Tpo -c -o libeglib_la-gqueue.lo `test -f 'gqueue.c' || echo '$(srcdir)/'`gqueue.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gqueue.Tpo $(DEPDIR)/libeglib_la-gqueue.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gqueue.c' object='libeglib_la-gqueue.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gqueue.lo `test -f 'gqueue.c' || echo '$(srcdir)/'`gqueue.c + +libeglib_la-gpath.lo: gpath.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gpath.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gpath.Tpo -c -o libeglib_la-gpath.lo `test -f 'gpath.c' || echo '$(srcdir)/'`gpath.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gpath.Tpo $(DEPDIR)/libeglib_la-gpath.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpath.c' object='libeglib_la-gpath.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gpath.lo `test -f 'gpath.c' || echo '$(srcdir)/'`gpath.c + +libeglib_la-gshell.lo: gshell.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gshell.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gshell.Tpo -c -o libeglib_la-gshell.lo `test -f 'gshell.c' || echo '$(srcdir)/'`gshell.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gshell.Tpo $(DEPDIR)/libeglib_la-gshell.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gshell.c' object='libeglib_la-gshell.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gshell.lo `test -f 'gshell.c' || echo '$(srcdir)/'`gshell.c + +libeglib_la-gspawn.lo: gspawn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gspawn.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gspawn.Tpo -c -o libeglib_la-gspawn.lo `test -f 'gspawn.c' || echo '$(srcdir)/'`gspawn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gspawn.Tpo $(DEPDIR)/libeglib_la-gspawn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gspawn.c' object='libeglib_la-gspawn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gspawn.lo `test -f 'gspawn.c' || echo '$(srcdir)/'`gspawn.c + +libeglib_la-gfile.lo: gfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gfile.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gfile.Tpo -c -o libeglib_la-gfile.lo `test -f 'gfile.c' || echo '$(srcdir)/'`gfile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gfile.Tpo $(DEPDIR)/libeglib_la-gfile.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfile.c' object='libeglib_la-gfile.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gfile.lo `test -f 'gfile.c' || echo '$(srcdir)/'`gfile.c + +libeglib_la-gfile-posix.lo: gfile-posix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gfile-posix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gfile-posix.Tpo -c -o libeglib_la-gfile-posix.lo `test -f 'gfile-posix.c' || echo '$(srcdir)/'`gfile-posix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gfile-posix.Tpo $(DEPDIR)/libeglib_la-gfile-posix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfile-posix.c' object='libeglib_la-gfile-posix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gfile-posix.lo `test -f 'gfile-posix.c' || echo '$(srcdir)/'`gfile-posix.c + +libeglib_la-gpattern.lo: gpattern.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gpattern.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gpattern.Tpo -c -o libeglib_la-gpattern.lo `test -f 'gpattern.c' || echo '$(srcdir)/'`gpattern.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gpattern.Tpo $(DEPDIR)/libeglib_la-gpattern.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpattern.c' object='libeglib_la-gpattern.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gpattern.lo `test -f 'gpattern.c' || echo '$(srcdir)/'`gpattern.c + +libeglib_la-gmarkup.lo: gmarkup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmarkup.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmarkup.Tpo -c -o libeglib_la-gmarkup.lo `test -f 'gmarkup.c' || echo '$(srcdir)/'`gmarkup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmarkup.Tpo $(DEPDIR)/libeglib_la-gmarkup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmarkup.c' object='libeglib_la-gmarkup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmarkup.lo `test -f 'gmarkup.c' || echo '$(srcdir)/'`gmarkup.c + +libeglib_la-gutf8.lo: gutf8.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gutf8.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gutf8.Tpo -c -o libeglib_la-gutf8.lo `test -f 'gutf8.c' || echo '$(srcdir)/'`gutf8.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gutf8.Tpo $(DEPDIR)/libeglib_la-gutf8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gutf8.c' object='libeglib_la-gutf8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gutf8.lo `test -f 'gutf8.c' || echo '$(srcdir)/'`gutf8.c + +libeglib_la-gunicode.lo: gunicode.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gunicode.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gunicode.Tpo -c -o libeglib_la-gunicode.lo `test -f 'gunicode.c' || echo '$(srcdir)/'`gunicode.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gunicode.Tpo $(DEPDIR)/libeglib_la-gunicode.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gunicode.c' object='libeglib_la-gunicode.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gunicode.lo `test -f 'gunicode.c' || echo '$(srcdir)/'`gunicode.c + +libeglib_la-gdate-unix.lo: gdate-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gdate-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gdate-unix.Tpo -c -o libeglib_la-gdate-unix.lo `test -f 'gdate-unix.c' || echo '$(srcdir)/'`gdate-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gdate-unix.Tpo $(DEPDIR)/libeglib_la-gdate-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdate-unix.c' object='libeglib_la-gdate-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gdate-unix.lo `test -f 'gdate-unix.c' || echo '$(srcdir)/'`gdate-unix.c + +libeglib_la-gdir-unix.lo: gdir-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gdir-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gdir-unix.Tpo -c -o libeglib_la-gdir-unix.lo `test -f 'gdir-unix.c' || echo '$(srcdir)/'`gdir-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gdir-unix.Tpo $(DEPDIR)/libeglib_la-gdir-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdir-unix.c' object='libeglib_la-gdir-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gdir-unix.lo `test -f 'gdir-unix.c' || echo '$(srcdir)/'`gdir-unix.c + +libeglib_la-gfile-unix.lo: gfile-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gfile-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gfile-unix.Tpo -c -o libeglib_la-gfile-unix.lo `test -f 'gfile-unix.c' || echo '$(srcdir)/'`gfile-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gfile-unix.Tpo $(DEPDIR)/libeglib_la-gfile-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfile-unix.c' object='libeglib_la-gfile-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gfile-unix.lo `test -f 'gfile-unix.c' || echo '$(srcdir)/'`gfile-unix.c + +libeglib_la-gmisc-unix.lo: gmisc-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmisc-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmisc-unix.Tpo -c -o libeglib_la-gmisc-unix.lo `test -f 'gmisc-unix.c' || echo '$(srcdir)/'`gmisc-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmisc-unix.Tpo $(DEPDIR)/libeglib_la-gmisc-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmisc-unix.c' object='libeglib_la-gmisc-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmisc-unix.lo `test -f 'gmisc-unix.c' || echo '$(srcdir)/'`gmisc-unix.c + +libeglib_la-gmodule-unix.lo: gmodule-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmodule-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmodule-unix.Tpo -c -o libeglib_la-gmodule-unix.lo `test -f 'gmodule-unix.c' || echo '$(srcdir)/'`gmodule-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmodule-unix.Tpo $(DEPDIR)/libeglib_la-gmodule-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmodule-unix.c' object='libeglib_la-gmodule-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmodule-unix.lo `test -f 'gmodule-unix.c' || echo '$(srcdir)/'`gmodule-unix.c + +libeglib_la-gtimer-unix.lo: gtimer-unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gtimer-unix.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gtimer-unix.Tpo -c -o libeglib_la-gtimer-unix.lo `test -f 'gtimer-unix.c' || echo '$(srcdir)/'`gtimer-unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gtimer-unix.Tpo $(DEPDIR)/libeglib_la-gtimer-unix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtimer-unix.c' object='libeglib_la-gtimer-unix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gtimer-unix.lo `test -f 'gtimer-unix.c' || echo '$(srcdir)/'`gtimer-unix.c + +libeglib_la-gdate-win32.lo: gdate-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gdate-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gdate-win32.Tpo -c -o libeglib_la-gdate-win32.lo `test -f 'gdate-win32.c' || echo '$(srcdir)/'`gdate-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gdate-win32.Tpo $(DEPDIR)/libeglib_la-gdate-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdate-win32.c' object='libeglib_la-gdate-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gdate-win32.lo `test -f 'gdate-win32.c' || echo '$(srcdir)/'`gdate-win32.c + +libeglib_la-gdir-win32.lo: gdir-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gdir-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gdir-win32.Tpo -c -o libeglib_la-gdir-win32.lo `test -f 'gdir-win32.c' || echo '$(srcdir)/'`gdir-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gdir-win32.Tpo $(DEPDIR)/libeglib_la-gdir-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gdir-win32.c' object='libeglib_la-gdir-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gdir-win32.lo `test -f 'gdir-win32.c' || echo '$(srcdir)/'`gdir-win32.c + +libeglib_la-gfile-win32.lo: gfile-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gfile-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gfile-win32.Tpo -c -o libeglib_la-gfile-win32.lo `test -f 'gfile-win32.c' || echo '$(srcdir)/'`gfile-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gfile-win32.Tpo $(DEPDIR)/libeglib_la-gfile-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gfile-win32.c' object='libeglib_la-gfile-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gfile-win32.lo `test -f 'gfile-win32.c' || echo '$(srcdir)/'`gfile-win32.c + +libeglib_la-gmisc-win32.lo: gmisc-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmisc-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmisc-win32.Tpo -c -o libeglib_la-gmisc-win32.lo `test -f 'gmisc-win32.c' || echo '$(srcdir)/'`gmisc-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmisc-win32.Tpo $(DEPDIR)/libeglib_la-gmisc-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmisc-win32.c' object='libeglib_la-gmisc-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmisc-win32.lo `test -f 'gmisc-win32.c' || echo '$(srcdir)/'`gmisc-win32.c + +libeglib_la-gmodule-win32.lo: gmodule-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gmodule-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gmodule-win32.Tpo -c -o libeglib_la-gmodule-win32.lo `test -f 'gmodule-win32.c' || echo '$(srcdir)/'`gmodule-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gmodule-win32.Tpo $(DEPDIR)/libeglib_la-gmodule-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gmodule-win32.c' object='libeglib_la-gmodule-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gmodule-win32.lo `test -f 'gmodule-win32.c' || echo '$(srcdir)/'`gmodule-win32.c + +libeglib_la-gtimer-win32.lo: gtimer-win32.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-gtimer-win32.lo -MD -MP -MF $(DEPDIR)/libeglib_la-gtimer-win32.Tpo -c -o libeglib_la-gtimer-win32.lo `test -f 'gtimer-win32.c' || echo '$(srcdir)/'`gtimer-win32.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-gtimer-win32.Tpo $(DEPDIR)/libeglib_la-gtimer-win32.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtimer-win32.c' object='libeglib_la-gtimer-win32.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-gtimer-win32.lo `test -f 'gtimer-win32.c' || echo '$(srcdir)/'`gtimer-win32.c + +libeglib_la-vasprintf.lo: vasprintf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -MT libeglib_la-vasprintf.lo -MD -MP -MF $(DEPDIR)/libeglib_la-vasprintf.Tpo -c -o libeglib_la-vasprintf.lo `test -f 'vasprintf.c' || echo '$(srcdir)/'`vasprintf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeglib_la-vasprintf.Tpo $(DEPDIR)/libeglib_la-vasprintf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vasprintf.c' object='libeglib_la-vasprintf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeglib_la_CFLAGS) $(CFLAGS) -c -o libeglib_la-vasprintf.lo `test -f 'vasprintf.c' || echo '$(srcdir)/'`vasprintf.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/eglib/src/Makefile.in.REMOVED.git-id b/eglib/src/Makefile.in.REMOVED.git-id deleted file mode 100644 index c8cec05366..0000000000 --- a/eglib/src/Makefile.in.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -4baf123a09feafdac9ee19e3dae1f9ebe5338ead \ No newline at end of file diff --git a/eglib/src/eglib-config.h.in b/eglib/src/eglib-config.h.in index ba0f93f9be..8f5a245cfe 100644 --- a/eglib/src/eglib-config.h.in +++ b/eglib/src/eglib-config.h.in @@ -36,7 +36,7 @@ typedef signed @GSIZE@ gssize; #define G_HAVE_ISO_VARARGS #endif -#if defined (__native_client__) +#if defined (__native_client__) || defined (HOST_WATCHOS) #undef G_BREAKPOINT #define G_BREAKPOINT() #endif diff --git a/eglib/src/gbytearray.c b/eglib/src/gbytearray.c index 8702a4957a..f8231b4834 100644 --- a/eglib/src/gbytearray.c +++ b/eglib/src/gbytearray.c @@ -49,3 +49,10 @@ g_byte_array_append (GByteArray *array, { return (GByteArray *)g_array_append_vals ((GArray *)array, data, len); } + +void +g_byte_array_set_size (GByteArray *array, gint length) +{ + g_array_set_size ((GArray *)array, length); +} + diff --git a/eglib/src/glib.h b/eglib/src/glib.h index 4b2c6d659d..f5473bd2a5 100644 --- a/eglib/src/glib.h +++ b/eglib/src/glib.h @@ -486,6 +486,7 @@ struct _GByteArray { GByteArray *g_byte_array_new (void); GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len); guint8* g_byte_array_free (GByteArray *array, gboolean free_segment); +void g_byte_array_set_size (GByteArray *array, gint length); /* * Array diff --git a/eglib/src/gspawn.c b/eglib/src/gspawn.c index a01904e3e3..01639be101 100644 --- a/eglib/src/gspawn.c +++ b/eglib/src/gspawn.c @@ -74,13 +74,18 @@ #define NO_INTR(var,cmd) do { (var) = (cmd); } while ((var) == -1 && errno == EINTR) #define CLOSE_PIPE(p) do { close (p [0]); close (p [1]); } while (0) -#if defined(__APPLE__) && !defined (__arm__) && !defined (__aarch64__) +#if defined(__APPLE__) +#if defined (TARGET_OSX) /* Apple defines this in crt_externs.h but doesn't provide that header for * arm-apple-darwin9. We'll manually define the symbol on Apple as it does * in fact exist on all implementations (so far) */ -gchar ***_NSGetEnviron(); +gchar ***_NSGetEnviron(void); #define environ (*_NSGetEnviron()) +#else +static char *mono_environ[1] = { NULL }; +#define environ mono_environ +#endif /* defined (TARGET_OSX) */ #elif defined(_MSC_VER) /* MS defines this in stdlib.h */ #else @@ -248,6 +253,9 @@ g_spawn_command_line_sync (const gchar *command_line, GError **error) { #ifdef G_OS_WIN32 +#elif !defined (HAVE_FORK) || !defined (HAVE_EXECV) + fprintf (stderr, "g_spawn_command_line_sync not supported on this platform\n"); + return FALSE; #else pid_t pid; gchar **argv; @@ -344,6 +352,9 @@ g_spawn_async_with_pipes (const gchar *working_directory, GError **error) { #ifdef G_OS_WIN32 +#elif !defined (HAVE_FORK) || !defined (HAVE_EXECVE) + fprintf (stderr, "g_spawn_async_with_pipes is not supported on this platform\n"); + return FALSE; #else pid_t pid; int info_pipe [2]; diff --git a/eglib/src/gunicode.c b/eglib/src/gunicode.c index c3a9000f8d..e6f4b925b6 100644 --- a/eglib/src/gunicode.c +++ b/eglib/src/gunicode.c @@ -219,10 +219,10 @@ g_get_charset (G_CONST_RETURN char **charset) is_utf8 = FALSE; #else /* These shouldn't be heap allocated */ -#if HAVE_LOCALCHARSET_H - my_charset = locale_charset (); -#elif defined(HAVE_LANGINFO_H) +#if defined(HAVE_LANGINFO_H) my_charset = nl_langinfo (CODESET); +#elif defined(HAVE_LOCALCHARSET_H) + my_charset = locale_charset (); #else my_charset = "UTF-8"; #endif diff --git a/external/binary-reference-assemblies/v4.5/Accessibility.dll b/external/binary-reference-assemblies/v4.5/Accessibility.dll new file mode 100644 index 0000000000000000000000000000000000000000..4eeb96c338bf924889e294f2386ff21e01fbac23 GIT binary patch literal 11264 zcmd^F32@xh8UA;@Ya0^FPJ9rEp~{#e3CUu|Ie{=qY@C?biIX*Up#ev$l{X^V)gozq zP$+JJfdErNC|7`zaFwG3h8r60)YBGdDKt?DlBI7wBGG;OJvZecU(0h-+Slo} zoV3iCrNm`bNhC~1j%c!#O2~RbZd@6b<7QL~m6Ys%s8@B{@kA{?|BxHKLH;S@e8ogl zVfK>#*#uceT#Lx;WL%KOyg8(=GyugbQ$UN(BPtXB*{i2=A%rccceyK$jBAO;kDRi5 zt4xFzWI{3YWf_eq{kTl=BFS%FB3g`7?F>SIiXD^;o2P2h~g#XKmOgM()#C0pWS%td7l^SHK$&G(y#ml zval-Q3o(Vkq*XFZMJUh8OJowR_ zk3aNe)y&Gtk3RR8RTt0iT@pTFiO*xt{nj%(R2!7xvG4h+z}NDX>9 z9~C*>Qaf^F*D@5jw&zF5!*|b?^3$ux?^^uyX2AqHFL+YrfdZ!poF=eN-~xe*1vU#@ z1^lG)Bq1w8)`fgJa6whSuzX)wHVC{_;MG9AYAbL-)os9QsvZX3UL~RJ0g|wDlmo}p zalkS<4_HAD04LGUfz|XTP^NzY52b)l!sc-pa0cBEtfel$M6;>9K%)8d8{n~Yc0i&< zbYM`TM!Fxkj5-S?YN3)MiQ4F9U^^`+mgw8`GH?y`?bkt8~kUIY$MtW=_NDOe`a1#~0uVmf4kL>p;4@JAG#DA83kzFeYf z>9O(oTU<17gTu%Q1hAB`LqVEVP zx$-h45j8Z68q9?4*wkt!%nr@6bu%I41~Z;i68%DMvrw_>c=lw!rN`De)YO;G-_+Nn z8(LcHu(MLGy)6|nbalDb-)^qg613R1wRptnZ?2oaBBQkGs%6?{x6^e(She(|GeSy- zZl@F@?4+W)IZAR@rxqD0OSn<9^;iO}PqX0WcP(?A0-bsyYWCV)O{Nvk%Rj5Dc32hg zn$}g{HD{Q)i|ypqwM4NwPqt`|JyWjD(rhi^C=Nz;UZr`7vvX?8O>DyBh1P3Y>qp?^ zxdO9KGXx!Voo+;Ne(P(|x*fuJPg2sAldhunb?Q-P9VONNWtx~w38kk|x2W4tVs=tKN@OZ;GS!rwuCYzA(BEmzZ7;K5899yJ z>dn7&H=6Dh#Sc^7UX1u*WskP{lY+|}p&itZGcCFl_L?~+T z!)$>JAo|0mE01a0K7Q%;r?*UvPnjJhf1xDJCO$}oa3th7y_HN#Aj&w^Y1D&gKub~_ zQUWJB84=48^rmdq24sojkBiDUGAg*nD1~bbnPqB*-c1&C8^tZ8sJNyeX;eEE$~0u^ zK(a+TDoG)mOxfxcSR9-$O{Ci-7`tql@gdv*R_lTFR7VRS*WvlHmS!PJ*_@oMtPW{z zem6mmAnQEbdJbsJp}C@hdK`_x3`gSyH1NY_*yhs;9G#h@CP*;N1T93q+{!pd1IQYg z)-6OXP0;7o8={Uj=n=>|?zkMO{Ww^gIHIzH7viq-(2V)eBDi}u?p=?DXy}f4g5SWc zt)irbGB#p2?iHdFaOhQq`;ySdhG_&`>v8`%i1P%~I}NW(DpXQ zA*?S7_$m7eyDh`nWmmtk^4};s;{(GP>KJuAmmM+w`mrIB!1H z^m;RUAK`fS?l|&T-RDNbEkhaSubKOZXKxzHbMNdvqn?6>_5aYB)P`AQdUMJiv-N6} z)nM~bzkd0da?hVOM)l^l;oNu^kHUw&*poukB-Sh5Imc>@j`FlN>TWq}k3X?})!mYx zmU*=w$z%K^J}1MFbNs*0lY5fg*D?Nf-=Al6ip?cG;Fe&!v3KLT>_ZH@Zubw`{H`E^ z$5wvW<_CWT!@3?=ol4dC{sZ5V1O^B{ z7!wux0nk^67uWGGt^Dyx(QiNP+_CMI_iqfHdwc1&&rANc>+{pzx#axM3VMulTCU!7 z$UVorz4?`$uRi(5%`eO?pW@#*&N}v!fy>X{@u%LhO9qR2S5DhCOWO4J;5%>bn)1ZW z@9p{^x~66PWl!F5_0&@$Gj7*r9Q^4^3!PKUnQwjYy;JWh-Eqaj!>ccx*q}|4<4;^R zyY=K3F5|{ZRX&=qIR9nrK|ZSF-!A2-)`QQsl5za>Av>B9$LC!>su4+eGaNS)a{6t& zj92@XVmlUo(oNyVG&X*?XjUo_#52p^i1WL+dnUb~MsmJF{M`kIbyAQ@dx*ud7vO*48RY zZEgMh1(A7m;(f9&;Dg`GeI$iKN5$=KJ)sz(WGX^5(MKgi+KtaNxOl%dO2hUj3ap3GXHn2kU z3-9|hmS1C8W+^|UzhfifA0-^InzX3&+DqUX)+>n{0tQ_&d4x=YEr& J@Xc-ee*xC$yzBq~ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Commons.Xml.Relaxng.dll b/external/binary-reference-assemblies/v4.5/Commons.Xml.Relaxng.dll new file mode 100644 index 0000000000000000000000000000000000000000..3585f01fc3ed58fc67f5345f6ee04e424b3732e7 GIT binary patch literal 78336 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 T3*BgbcK3To!>^it&p7aZ@VJLd literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/CustomMarshalers.dll b/external/binary-reference-assemblies/v4.5/CustomMarshalers.dll new file mode 100644 index 0000000000000000000000000000000000000000..50a72a1d637ab833496f052e8f2629e9749702d6 GIT binary patch literal 12288 zcmeHN3wTuJnf}fsGb98~2AI$w0f$Cif-p@;B3MO%gkUg%$i&dCw&Bd=BpjKUGd<@_ zF1Rb9(yn&9O3}4K-CbJLhjx7^TCLhEw$`?GyW84FyKHSY_JX*NTi3SRTDR7Hzwey6 zC6Q>C0{cAulmDIn`@aA3{VEMNf zJ)(4cdr|i`!w#n{bHLJ);kcGcnNB#ShpkL1Y^1`io1)>Q*{4Tl&YXUpS9RAqq7KDZ z)X*6D7F8%^L`$LeOoulh9Y)-W$n3)SfsJ`{$o|qO1g}g9t^NQ}Q2z73p2&p|wxZrE z-Q?uBm1xG~mXmA4MCd^-ltI2CClN&)eb|Bg;1U3Ag?)u2Aq;vEOHY__kHc1|xo;7~ zg0PxsZGrffl6!bu5ty5g{PdkL(M@$k3M&gjSD0jI3sjRPFKZlb{m=62e>?xqr6-== zcl*(;%`g0-`kyP79KUsA)&0L2`RLBXvkSiT`FrQQ@Y(5qw{pg@-s>)0*zx7P_aEB) zPv@3@{O1d9Xnta5bJzQyd*+8@H!pZ-#;>2*alyk+SL}Fg)^i`e{FUAFkM+EsT3h+j z#xGFaqd(aE^BadFTY3Gq^qTiz1TQ{$bZdj{$?0Mb>n!qDlnv0`Sl$8pOxbs3nY&zhITr zzkev?&Mna$^ez97i=^j6?ph`KpybSYVU`Yra#Gp%{67!z>gV9vilu;S@@%{oIJh}w zdF3Qt3mn|`cr9=^uDsy?MJO-*&i|WGg=+$9HSoJownxX63j@BYnV#*qvMLZLkh%jE zRjOxmTi`v+!EGTgaSQAlIJhnFD(B#~09PTwZ6Pml3v)c1+X8z84sHv1iCd_0Og?@@9 zrO*kWk6x7YSKb6RVX-N+TChW~P*a$GtJeGczOaw(_xs>Y9+sN#^HbRE2Ja?r_l@hH z4!=`@I0I3I*QvyBIq{C01sn}60v-s}0skfR=aSY04d5@U-Y4l1!Citk3w}g!pWw#@ zKPh;>;G@7_Ry`*8P2eZz9s>@ARQTgcuqdO2z!}sI4ALH8h#mu0(|3S1^b#;kzXzU2 zm5K^KUJqPKM}hTpolm7ET3DjeO8Ph8rSzdvl~&VvewAA3DDVo31yt&w>S-#x{Sja{ zwU(*$F8VR>TH0N%;u7!D=_>Wn7;qcytx$1lzjKC4X&M7Mw0EXT!xT|f`V0CIaFnb{ zm3C7wsM1Yz82DkTo27#N*MYZ_Ia{SW>1}gVx{JO!CxWy02UQVjq!YkP=oMfK{T_HF z&7K>fsNgk%aasz^c3Ka#DGj`yZUNpX_}5bQHaZB+$LQ0*gY?MUKFsO$p&MxqeK2%T z@T-D95iC(yUn_V(c{_3*ROZt?z*>4bbW}8Bg5+asSa7xAsNey?qk?0CR3bSASNl1= zRd7`BfZ$QVF~Mf~QRosHgMU^qkLw8X>$9Y)e{D=RL6oY71= zZCZ}rm$$goBAYWQ$4KfCsn$$Kb!*Uw>vp6iV>@QDQ?u-C=!j+0x)jJ-S}dV=o2`bO z)|~jZoSD`Qr?pg{nK!K)E-<=99nx>k#;7r^cZ$VOGKSa zpJ7g6?%krtCd(3S)oo)SrCWI;y5D<+I}}N?EmtC|6Ot3OhNZ_blOx&XH6eqg4S~oTsC(V6 zkGJOdk2g%{u1C&m9ZLf%+#X-5aNNBDTMVq}A-lKDw2~9@FYm1%R|Q5*?``aD9;fbQ zJ$ZGl)ojj_FIu3_mFu!}JL?!GR64=fR8U)?u?>$S^dZyQJ_#ppDB!j9gwTnbN%lo# zz?>e#G=rDL%rX%A3;(jm>lJ!6-K%GX$yHj?)!5uReo$yZ}>6}YsVz8e+j zaFOXwErlF?n_|~ddLx|Rpe`#aZ97(rX>K=kTAwlAw8tXxVEtNLXGf814GuY3WTCj8 zaL5`M)GSJKx=n{C)B6ZKut;gW?sW4*3UI{4xr0(rTSC`TS7)gU-xgO@&;wM_o*l;a zagLPh&u5JqJ8%}bPSzWaZqqeq)vnYHw6tCls`qP|gtI1LX!gV!F)DnBOf+~W%0xqp=^ZZ%M1+g$(+}D6VqyF11ZyXjJQp1Hh5Xy^fq}1zjW6zVg}~9 zpwroj^{x&$7slVp`R}A1caMniizd>S;D=2mVZJJ&P4!><(y!=&^#=!k{Zz+4+`XK9 z0ktGByB@L07pPI2@KCQ2v0mbmPBJNl7{+C=PJ@UENNGwUmBJ-(7*Qt;a$7!Y3$i5f z$3?@q#@6sVKpFfFAafYk^eO5m3$l&k7A$f6W{}dUeldhPWa@$0A_J9VkS$F4>NRK_ zT#%cv+a!!#w#<4VcYwu4U?U#uT#R%Bt$?%~QO)P%Y{3TDvYqAMa12>jpy_7NXr_y# zf=1j+fEn&3E~e32+M!!X8*#6}By}OdG*h$+`3fuJ94#Q5$n|a&a_K^!d!LXxx**4p zHqhdgu#VtP#Kg5e5AZ6qx&qx;2`Prw`_XnII-+AbRtUe*L!DC6LKz#eA8kcw1MVK; zGJI*sr-x|_TpQ7TGvW$i+5nc#&}z_YH2T0~OnboI#t86eL}i@%WYW(P&YycLoFlYF z=4mqS#p~`=tc)qg`|#x4qqqasG3Ew#Bd?%(;`U zI$K!Zk;EQ}W40~v&9T$OYs&LyZxl1j=cbMm_Vmo~l$`D=u&@nBm3z=?2)+aptFScC&u&UtC}HiXP+e;kDQDnuhp|| zHQZawc%sidOGftYVxDK_^qKN1Xx#i4@1!p5D%0Cj_G$B1Q+R{@#pC+M*OaIJYGcaL zJUpHopW=NO!y%kW5o!~E#V6;2@ZWcSBdeM9b4pZ$u79HIBx8d3|;;vhKKItH`@HHAcoskzS-s*e+|pJ5x;!v z-w4gb012a-sSbj;dute^T->GXB)YGk6-Q;Cml@ixyUtSu^J;^!iTz zNTJ&|b4?;)4t3&ju#ryaN-6AWokHi;*ViwvZ>n!vhD5y!E!h;S>g$^>@~WGMFV?tj zR5)L$!P{k34UkV&7u29xm20eFsP>aG`+OC;GKkfztEnyvmndbynqWES0MP6vrZ~F^ z*|@l`WHG6THKPacTUKi#!&Su6AOCc@eY%}pjoA6OrW$r`CNW%(DIp$R6 zQWlDVnZ+k*2n(5iw{PwiOG|GwQ|pG~dYWINbZ@ipeo!fUc*nIp^P0wP=DZwk+Ti{& z{ynF|oSGQ2-=PxmOTyMfqEj$>heO2-$<=Tms~#KM2l{NW>j;pFc&j=b{^ Nui{T7|NoA_{{qKISHu7S literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Collections.Concurrent.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Collections.Concurrent.dll new file mode 100644 index 0000000000000000000000000000000000000000..320627d3f94129fbf6ff71f773ea5cbc6f083ae6 GIT binary patch literal 6144 zcmeHLZ*UdW6+fFl5D6e)OJxMy7;3|qZW59ye+-&`Kwn8n$cq65fqnaKUe@f}eeCWd z31c-*QENXa1!|RkXsXj`M_Xa6Gj(w6sKd1VP^Of&R%dFp9Xo}Nqd2zHib(o9ci(&a zHYAkkI8HxsU-sO4?m73|-#zE--Fwq@$9^g$qB1-a6GYFW=F%eRrO6n?bFV)(m!7-o zMAh?3=ZUJmLDN$+u9I^0v})+K?f7a!sBYF)Ocx5B?u)95T7q9By#3s6@Lo*K-YU5?c!z zGw@(Z#ia%4HCI>;6eZSOkg~0Xc#293QCkr!n=ICgT!zhBw(gLgYKb#0}u(eGY! z{lxkg60>%{(px!nsAuR4rS;dZnf<~CEBg=aui4kL^1f%g7u~dELv!tgO-J{Bcl~eA zZ&6Hr^TD4y+7>H&^>YK(k?%b5;<0__zxVL%El0;&;(yqDUEd*XyeI-_U)h}iY}=}mGnc>=o(3{leC(Cjh>t6FQAQ7sc3XF#X#F7-ALQej*||$jqV0D z=su-vEPOv1r9yCI_{O3=u2_h}HA$}E9*>NT!`w%kTI)ZW` z!p%hxSf)zh;*wd&iF|2eK3iJ6zAEJXj)LZf2zM8_fr9LT2=_!p^F)N> zForhS%HD{TkXv$*<^vJUkXsYc+#2Eh2zNNb{Vc-09pNev<`CzC2)87{)kL`V9H&aG zJIV|GZ0>TBSxekP@lnqgX|3I{EMfSjV|!@ZM%HzO?Nh7giFCpm?K6E#wEEa+5?Np5 z2la}9+#u2n-*F4-9l|qQGsEV>L3vvpVnEMYeye5b-o?^(C!Nvl(TfE=E)X03#e#Mx zGwPbD!6`&Bd%$tiI^)o-e&Kpk0$OicVp?H`u=LTmnVMoD8^tIO4H3Z~0&X)zeyO1- z=jPt5?VD)<7pF5A>c)k;$25dTIe}cgZzfF3^ox9e9orbf9v?<&R|7R~5I#cXWz&$X zv$JX8>IsC@*ts+2qm6*nQy9xOJ%vG=aDbt{L09O>PRG!#PSf*=Nq2^az&}MpI!u`n zx;wgS1@*CUkHWs(lpJ@460*}F*qjwv0Ss}GN^^3B*y6r!3_%jEqDOaqli>)rTjr5R zu^sUv2Yat5VH{rWZz^Aw;Nr(+I5=)+JmxWLoK^M>5XbSTJ7t-ZkG_R)>HBhln8Yt}z(`mHMD(kAB~OEG8{Czzj){HSz~^|j8&4=jE5=D!_&{r7)-`HjP;zI07h$^J^W`NOeq-Fy7c z!}A{b`OM+&<)>H7J@EJPciui-_0sp>JNNO9z{}?l^U@OjVS*H!4(h$uCQ=&IJn1*{Y{?oL_6z zm~Ci8H40UCIkux>D@;4K+KFt>>L~&7fUD!p!#5!73Zk_NttxE&YK^g6T~XiAsOHQ` zYiiA)?`PK3)eR31Ya_utn&G6EY*9d#h!# z2^kKh3}RZ!T74x8x43#{lVh(NF@)Tnu%$Y~o>KACz1#a2HN7Rz(@_6qEl95XiQ8(P zi`Myj4AIVZ$L+AJF5R?)%n>4=6EyL8Qd^<}uW&^kP~?5*+KaAwGO~m~j}_J0|XQ_!5wf^Q$A(mhqcReUR$t^&r>Dhn@qD%e{28>@l2F6=3qAWuiYd zg(Y9=)MMQ%VY{B1D8W9U?Q{diw!>Z;KY`IcW+7M`MeU;}joT5+Es4!2%`a;8kq6AZgj XK1~m(!T+kxHh-FvUYYCv#RLBVUnVpq literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Collections.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Collections.dll new file mode 100644 index 0000000000000000000000000000000000000000..2a92416efc33861d5aa59e46f7cd448ab38185f8 GIT binary patch literal 6144 zcmeHLdvH|M8UJn)5`WeB;e+yq$DI}W1xs6cQ+@=h5K0Vy_>L> zfwVrbjE)vc>tlvts){axDPDkjVowg%Wm}+$fJGRx5T1LuD{R0?Ff8V*gdv~*` zqx@B8IJ@^d=X;#*eBbY!d-j}d-}nd>5>XMJ%a@6cpym>m^pnXb)Wu(ZshD1v`g+L` zrS0{S?jhY(y|EX(%Ps8F4RrRtX2+!0YtyI+K6%$Qb|a^2ZN)TVF*L3x)7 zN~SAQ;2bhkTsBvNsCdG7n5d`<{J7DQ@pDb1cp&FeNa6d4X31|*r&!;FX2I`TZin$@ z5XP52qHD*?J`JyCLYLN4z^}>b7xKh54}3p6hfe02iW{6PDp6m^ah(`A8Cw{QYw#eY z>=K4LZTJZEX*pMst;|JXu@Xf z$ob_*U;68$?;d;NH){sox&QCxqK`KHwEGK@C$u+C{`1`a=cezno`3#FCl0>2d1l#z zi$w9Sr`%U{;Z^bSjWmuA1b`^21o zs~d#y0?Gd^cZHBt^*4tZ~QGXBo z0RU6lXxLFUMgh#TCSOPN9cC^nwTwAq$784KbemWCGCZ&@^6|Zf7E>Ljv`tc7(p{1s zko1?5{!!A4lFnDyzDClu%7AhW-4Dt>eUF^`RJw(pq}h@#l(a2lNiQ3p7T< zO3`TWesYuwO#=n+nX*qYC7UZ7o7jz?#mD)sBp zZ$`$Fb&VNae@f?DCQ{@1#@pd@T~0sde9MROd~VF>_T}lK883`Pz;P^FGP?PoCz{?YO3FmN|Q=BTjZZFJ6@B!%dr-!4x;C`6l zev+f($O22Av4A_AWBF?7!u_SGx~w1nX`7`o=>YnyB{u35=^MW=%>V_v?Z$&M!-eQ;<3RjV~%JEq2Q zXhx54+zA7^MK{F%R5lAkOGfm;2@+W=lH4_j2zUrbSTT`KHBhCn?MhglZVF&*#?jS@ z2xnN2371j|nZ2h+bwl^EFlf}h2FKBoly0PCzPEStOG=^>! zmT>eKHS2O-H7D6uLoJr)Btg@j2>Aq^s7EsrB8zXiE1_{zStG5{+@Xl@FlLJ(OksIV zHu9s0VSCi3TU$kco9?nYVAkQJCIwO+Nm{WX$F}sleN(zEArh>Q*p4UqbHc6XdG5AX z$9j7kEZd48caf~3dLP-|AX2xtHDDmm?^Sa}y{Z`?iAtxYJ82jQaao?GTdq{)h4%^C zbecYd-Hs5EL=+5M8bWi%yJF~gwETRkuPC2ds_zn}JuKD_Vb$i2R!8-@f*Z#RmT~W4 zyi&4ftLLxADvEeoY%9;8=iqHkIGW)jrMtYJm~PB=3_ThwQYXEe1ftCL6Y4i`vMTiV ztFjYsJ#^^9SK1Gs{lT9r&b&2~Mh{RKe(*be#y;M1_TgQZ3Wtq*+8*1p;yyPwg#I6{UEQLi6%>RzI~l3eDJ{nHmm? zm1?UM3lWtoRN8J^whGux+fv&!YcQb=3aAGh%}t>yh*l}IJhSzw<*^F2rmDJDO}Ufa z)bb(Ei{G?#>Bz`PXq!JyC}x`#I7tE>KE&b!3=wC+BzeG{r_k(BXeqv?JD_9N48;>s zIR}b7T`pm(?t*#i9WB1jwpzBugxu!4@fwe~%9I!H-qf?O?p=9s#e}5F^2&4z=Lv4B z0iWGU-y4YV-a5^O(T*3(Uo=Aakiq=&S4a(Kce~pDzeYfj_nifKS3SAl2yjyfbt3m2QuaO5k8yuIN^s}Nhh*d#M9;|f8 z2Pg1UCT*&a_t)UN3iq!lV}N|;qi+-ZnfM6w_Am;;TN1SgiHX}0>kS!OEHk1~3$pk$<8z#k(hB%#gO5S!fzgWtPtItNhTxqf zqPa4a%8_*ikf}jb)wq$W<4_AQV_Wv)!S7A96rU0K3DLG3ocYemGmEVkr4l#%?6~|@ z)sHw$^m1scoO!~y={f00#msZYSfuBOIbJQFeNKk(YpGBt{MuMO3B>1RAxzW`xrIl~ ztV!lopvmih5IrOCRbTz* MIf<*WUnv6r1x6~?8UO$Q literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.ComponentModel.Annotations.dll b/external/binary-reference-assemblies/v4.5/Facades/System.ComponentModel.Annotations.dll new file mode 100644 index 0000000000000000000000000000000000000000..854e060efd9916af3b0531b5bf6ef02a751e0d85 GIT binary patch literal 5632 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Contracts.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Contracts.dll new file mode 100644 index 0000000000000000000000000000000000000000..e97cf5e9dbf9225abda11ec649c7d3408e851f30 GIT binary patch literal 5120 zcmeHKdu$v>8UNOgI8AEjVHz4i%DT3xEzH`EO-Y&uXZzyDwH>?hqiINp_x8r;4f{Cl z?%6&nwHDA94>fI|YRex*3RF>wLO_)gQK(XrRuxi9i4ssHf*J&ET8h#jpiM#uzi;-= zcW0ZZLRG~dnZ5mHzL{^n`OR;>nVsw1zK4p5s08oj%S1s9wrZO-GIP4XCyo7g~AwqMD5B{!K(Z3M0s+ z*Quy#v9ge85$cd}dZi9R#T&uPLPb^-;zmj0=bWbSqMlPRMeZe9Du1~=qlP9l1;5=~ zju7o(5@x3nqHAZ@eGpxpfiA5VLf@R%PYc9k0R05d4{dU;8QjohQi(=1&-V;y5?cg? z1$buxLUly*gyq6eHjTiBeJ#hEmm);%d8#ZPVqTFLTM?Dgt18i=O%w0`KiysX)=L*%yRq%1wdZ$DUmUBLHt)Uj2RBcr zPd>bI)sLnt&-bUhd&ln@|J`+e{N_`Sj=W%Xx37!cxc6`6U)^@(bY=U%ZS6`1J##VM zsx@gXO)br98Ez?Akaggu`fj4{Am4$|s~!kE(@FSj@os6jZq-8r^ghan9;&`|s4I$m zA-LZUVyfFMH^#lQ*3o9j4k^27JIVtz0{KO{ z3(}w|rDQ6%KN+PWgFSzY6koE&%Yf)2AIIbUl-F z>M1K|vrOHe+uGsUN!>}$ZRqy^*a+q}bhyd1XC}txY3g!DUC-7Thi(lE&z~1ir)i1* z+87m_Ea14>1YOX26^463Sn6?1Jb`o8^0pX3ChVUuVAZH(# zG1D@GJPxu8LfJxFEar)EQwQm}F=iUQM9LOUFsxfZu9uy0mmWS#Y=VwP!Op_9T3(pz*p zkK3%x6*!(T2}$lkJbPlE;jz}{sA4B5WndX^c>M*h6JMT=W} zl;b0>%IxPSPknFc8^=2Di+5cbedG8uH1&O|!Lc)iV;%+za89$nb)c=8?+ScOmi^|! z9mfv7_U=CI>j#z`yj1?ynM=FhdFcL&#pBl3dLDn|hM%r`^NH6^{{Hz>PaMCwvZ`p$ zVsHKVsqfx%?DWLahh8k3=&L`oy5fz&ULd!I*5kK1> zHL>HhWD4IztcFs;XZ#IpHCVLb4o^>Rah*+*hLC|cIOe$%zOwM}S9T1qY<>N~{h9j* zy3li6R=G4cW$!6OyE4c#o#7r<;t|c`xxAWDS56FNb?>pDex$4O!Cq%$h zp(9@D@b0)Rf?EwXRyM6EX+?1ucY$4yn`kRaUDQWgpm#xbqRin1j5PAnKJ7>H=3b#yN6SFwFZYfgT*!0yVszqwu3+CLGbBuM|p*wN=JQ h;W)D+Wp!iT^X2fVk%BU)0bu3s2S_ zQ@T&q#zqZSO*?kd(Nk(dw=COJ<3e?OOEoMtvL&jf>|vo*S6{R;XL{=fqHcvfD8gx~ zs9mHiAi_^Jbnkx!NJR^yF;dZ01b%~({&PRbSijH%<)xJly)=<(l6gK6QRyeCWErj}84kz3;%{0}ma3 z{jZtb(^JRZ89eMCIr{AJ-o6jVetXTGo9`R=c&3#=F^eXtrcy5Pj z$5|PG=}YE+iRdn7&MB?5G{_yV%{k;gPeYd$q7nVDBFJwQ)zMmPX|Ke##P>-2xWvDb z_;ra%Va*j1-zf1m#Z;>3ZeX?NB8Hx{Y}Ydqt`-q-KS}MbD^hVY8#6ppw0o$h zxbKO)eyB3> zuo5C4YEhKSaIbH9MoMTLC8j!2;fxsx;ZjZ@qxX!sVH#dZ4uZ`n-zAcQq;LvEhht}4 zJznZnUZ)_6dOG$nKO8aKG(s%8nit$+3=fNvu=C@aZL7}}PA6`>@<~xoq+_Fw?I%ae zg|Tc}U>nCv7E8Ga+cAxJuB7snRaS}Gu*t7DTz;zTu88P6m7$k6-u1-e)vt!aXK3PK zT8V=;ftL^zs`!Y3?~S&%@af~%$NWE>8<;x$+L=eSy@wVbK41OL^!eN0yZ5{QoHu6P z*?s?ktDe5;?Srqq`llD)Jow7>m(^D6U*xR&Wa3AArv8#ya__I_XSOs@#Kq7-e12n-grnft~mF{_1;eVtA9It$Iw%Yr+&Qt+AH^6+9{T) zsTU^OdbYnZ8B!IcrdFXV%l9!jZ9$BeDpWnFr*yo!8`Ul=p%K+9RM%r$wu-Sr%t3*Qk$>lM1Oa2(Y7M1#7zxusRjnUmJk`ccnIuWf3|WHQ=#u#T3n zQw?~ZBS(C#;6WzgZAGQLa+WG|iKaE-mvTo8oFpyn$K_5aA%5>&#agk7r2~$hMsaKy zPY8MRxehX}vf${qcJwcAJ1wsgs7rV$cRw@pXQoxA${~M`6W!KnI}y|D(G81a)d*22 ziVLeq4VOrxur2wbD35CNmWs!k5<7`W2~Y+5uzwp3dw?~xd! zI!0Z{b@HHRgJal3M?&NHPeTY3X+sS<*nMBEdDj)1GTtDKh|)tN-?Kx@T9rWI7iE& z&pvWK9P~OOEk^Xe`ocN5kJi9uH|!;)HQs?Va?X(^X%s7w+?APQD%B$!4anGPc-Vrk z7IjuOi@9W7w&TI>T57_Rk&i~>GxE>hHN5+H82}pb6%E^OD32u3Lc- z-oFvp(GdZkl)#n`ihXR8H8FFY*_AQ7E->v2_&jAm4gQ~;x#9EV)EB<|zcTPI>h%0> literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tools.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tools.dll new file mode 100644 index 0000000000000000000000000000000000000000..0eae9eda4b2d98595a5441021f44435c7e3755e3 GIT binary patch literal 4608 zcmeHKdu&ui7eBYOl!8s#iN;{!D@KWl3Xy1H;`W+?L(t6F(!Jp zb7s!WnKS47=FH4(=jC_O1R^R$`ROO3-Kd!&lK(mz#Bk+l&sNe?6|YwBRytm-?(R1{ zHRU=VXje?NoL-?#ojQ4b&h)BfL>&ryP@qq!q{pXqnQP9scfg(2(O_P6xIwuAywC8l9mE4XHr5J?Kw1Mb^ z(S5%~R)<}e+LIu+70uIpG2lZ!sT>SrGR~aekR+)@8#LE*6Og2D5i};EOhzf92)x%^ zVLDKhzHY!E+d}BY6d_t#EOYy7#LvXOl~5VIp%NV`BT~4th*qfqv_)OxHqSV-ap#;J zGq1jG@_%prOkHuxy6=z7ePQsS{?N@^-W{k~zjn%Q_ll#hH#O?lL_U1_sTXG--`Pcx z16x16;rVdQ(R)8_+)?v(iT-Wo$dyesFD7Taeb4pf8*V%B)&CDZd|Bunv*wg9SA0=F zIo0)9+ubKW=WqUQ_4Jl42e($V%{U~Myj-(&`TN_J##SsuJdi^vOcJ$gvWR@L$nxtjpUBxcS!z_d=sKlzuy8)vOGPFyz#OK3 zD^(Jhk$rOlut=49yOh031zLf$Upb;6O^MF$bb8aKxPW3=&li>!HT0zIc)pSFv~I^S zJ! zn1=3+9c^{2lx}Co4y43gzzXgAfxwj)S_C>-&+y3d5{_#c@!SUI z_qkYK=7rX4@?|g~$fv4r_a3Y`+}3q_bl;XIUaQ_jga4uVNZUc8y9o!CQxWo-SW5%H zHGIs<-#m8dzDM_e{eX7Ut`i^qaq7XLAFn>N?Uo-VY&37|xbLo0pFHo&`}e>5(cX{m zf9sqX)g^aManCtUMkOY)eSXP-u1t-L!S>-?|Ja>&^Nv7I!@TW_mTT* z*T?I3iTZiR-dp0Ych3Ien@v|fcH+K!mYhEK)~Z%9OSSfFZ|=POt?i|%qEuEZH20S> zKZvkOp{Z+iOUD&gueRF>ji^?kP^V)%Dz?gUY_&tTlWBmA;XYUQd>1*Ib_LNAg%%E{ zrdpe*Qyaq#O=`}Zw5Hbf`+jQif(4mOMjHs$(GreThkFkg@%4)zkc77-W%6pCsnB#y zTYx{y>oc%#S}GlvJE4^F{ctL4b(hS%)YVfLJNB}HgpkLuyWe#(o-*l~YuEM6ZvI4G zxkI`43)AR0w^eS9rTjZbbXBY4MoqI*H|!u+gvg}=zJUHkYGmx>zfF%K-@933o_e`$ zgk2mQ2?g&~@a?cRLNp5pBTutRo6+pSTW}TlGQ4mxYNsx`7;-!KMQAfUS9=jcKf&!~Lxv*p4O&73fQy)1}Z9bn+>c*&!UJv6s`OtG9F>R*DO9$}D zslX>6S_b-)<5=pJI$^|pE^LRXnc|EAEYHK-R@k%f6PWE|6@s-aY9BooUdJfx>ac4= zk9!Tgg&z95Av^Gi+r6my62db^mBThu((f!#(xrVKUn|=jF?(B&H0OvDutBiG{^XH} zVto%IteKMQ=Hvb&{)O>XR9K@2Yq(gYfN3*42@e;>Xg2iON5;cNts~MxM8DS;#^7FB z1e+bOmz36c2U5VCBTZ62RwB78Bl}dU1sZigtPvhI;HyO)g=PUu)@3_B>@KDS_+{iz zqk$3l^LGvJJ}x;>J-+IS{R%R#7k*lp<x|Bf(RqPs|Il9v0X6vlWZJoZC8z%J<#;)Bpeg literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tracing.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Diagnostics.Tracing.dll new file mode 100644 index 0000000000000000000000000000000000000000..a52692f47e9aaf894089610d8c549c27720f8749 GIT binary patch literal 4608 zcmeHKeQX>@6@Poad^D-uBt;=55U=Z)+Qh8Su_5FO&hf>q8#{4*ZerTzV{dPKUb?q? z-QDx$TFJH4l#dV^D+$m>AR&d1s6bj(ty;Ap5@bb4AyOMuP^ADxDG*SkeyKurm4x4$ zy)S;K_Z8f$nuBM%&(5kB!tSq?h+f3A>FoH6@ zPNBMm%6uaH$%4wh4NOIeqA*iYg#z4=Bz~@G3RTO=cXp#IY*9A2&Ar*eNupGru z4#ITWLv-Wxw*N*~OVFkDeCT&njMIFv*N5)U14Ex&X8|`fNh;AE&GlRZn#2}`Fc)P3 zN(DuMUUP-zz))h{gHHB^rB_mvXj7%mav#SP#MnYKhhA2RVwgkW#tQ0FfuTabmbm}I zWJAm7yQ^*=yt3nmef|UE;nca>uKnJ-Zyc#Uedc6n?K?}1gP*(b>UYnNKiKt9Zq+a1 zKi+cZBM&uXmN)bp$KN_|`b2o5z4r08_s)#IXXv-S<3AVq-RQ@EHL&d1``_ZN4+ST73rvs2Vg!Q-I-5o>yJ?O`I>?X@e zKxe}6Me{yJ^bJ-fl{Q)$#E$3Y7;;^dS!drwZ6TI>7&!Y1Jo4IapsjR_7E6AM9XFr{r5`5OSP$f!|AcaDzsb@L2hLGD<}z zFoId4?<=1{AemIjf2J(JUKO>Mrf9#JqWx)#c4>;VnR?20Jl`}tZNSwHBnEYOo=7LG{DA3OqQghFB(lCJj_4OdmN0zNu}L$0$1R!1 zglD*BhI`6`ioRlENY7e+hh^&C%-&8Xozd<5%#J=6a1DQEN2im?yJl*5macAl$Z^v; zFW>G`;snq?tdM4pG15g{JJ6}BOYOD%U5V%(p#eKRdIUL}UQ zap8`bhVZD+Ay@C43DYwDiWqDj5q8D$qzcotZYQZy3G7@PXej|;&T*3ktw)RqE9i(j zS=SJiavAAX#}3?-c027Ej%%5T;tpEGb*Iqq;>W@dyeg5XU(D*`k!~0|3et6<9xkU$0&&zFVy12UL&_Cx~ zdgEf<$sfIW@$KY&JvSac_0uOBcP5&j6wRNS{QX9Mr}NprzCF6@shcLgv+>iP+`pt# zEK}1b54ZQ;bMA0hRg{`~g;reqGz5!WqEPjqp4M@3HmlvXp%FDIRNw2^j>>!D*lLe% zr?PrVpnJ&GJ>Ny%W?ezFQK2uC(p7CVn$*>i);6`^PI^-thkZY@uB9cH%V~Rqc{IaG zH{mu#l=xD|53vN^&>VT;FI8x0?-Q8;l zc{B%xT_@)$^Phk4zU{ZPzb-Fwm>1}d!u!bTE|yi6W>WDTCEDHTxG~G>)lHjZ&InP= z3%c4sYINq{|C<&?zIV%JJoPfbgm{llh01Xaz8wamNB|^pks8D85Vzwk*bTm!`XP1G zHoPmlQE#O#$V|Tszj-BiyNZK@`b)AmcsKZ*R8kCz0lQ-WhagH(&Lo$!~& zPhhlE%eYH;4%ucYLo;%d28U6uPOP>NbGq;N|$pm z?m;Q@su^)JQju3}z$ekL#8iw%3>ZB0uw_QhU0nNz#TdaCj8cl#cFf~qrgCiCfhJNa zjCnci87IfZMXh7CJ`3L`j= z1zLC?hu}xYD){6CzOs-QXS>Xesq;+Fkm>n>VIR@;jDQ;af09{qJwbdl_w|avzX9mu B&dLA) literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Dynamic.Runtime.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Dynamic.Runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..734e9e6c96efa2d5e6279f76f8ea232fe591d10d GIT binary patch literal 6656 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 MoW9}f|0@Ik0s8CoumAu6 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.IO.dll b/external/binary-reference-assemblies/v4.5/Facades/System.IO.dll new file mode 100644 index 0000000000000000000000000000000000000000..558e027a9935d6b0f42a66d255b9cf092df21100 GIT binary patch literal 5120 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 F@GtQ<@Sy+z literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Linq.Parallel.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Linq.Parallel.dll new file mode 100644 index 0000000000000000000000000000000000000000..58e6134f22a4d17ee7c992e6380501c54eda614d GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Linq.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Linq.dll new file mode 100644 index 0000000000000000000000000000000000000000..d437be47b213856d5dc712108895d77eb65184a8 GIT binary patch literal 5632 zcmeHLeQ*?K8Gkk;fkF}}Ai~(vjiH@n2uCit0-*u&ae-b*NX&)L7RcUZ?{494ciGz` zTsuH!thMb-DO36(9i8cjb+9TrsAJWs10Ad#XK;!>-*mS2 zMXBd(?O;mF%BE!`EhQtz6_xAmE8u3w{HMCKC+>tgIDh#J;r` z?g**0wSyC|)U*LX;p-5%tZOc=lGaYtSpr4ZZ)H?L=VT%iN+cdEY5lU3+L9sP z?r*;K%6rfJbnHZ5TOhTpWzIu2e|`D(i$8mFaKrwW@7?vI#~xUG%LC>4Po9kYYAy4jEZ2q?f_96a{3_Zt1fC=nx4$E#Hs1dy47ur(yQoms_WKmjD&Ij z1@PyPn7Yoi5o2LAq*Q6Gj=j4uUa}N3L_IXJfaS>%Jo%~ipd|L`B@26BhBVO^r0IyvZO5Ugz{b$GJm{1XL0|Wv^B(kp2YnosSG2d%gSLCn{T}pr5Bi}8z3D+?9&{TL zTC~UYUPL=QXuk&?^`IYk&>J2!=0Ueslv-HrK?x6f$b-J*L8l8y7K?qU!dZ6*{n>;5 z?m<otaRX>~P4^I2QX1bQ@m4|Qa-Y9^M>4{CN= z?XdBvh~;e66&X+yX*F(ZhE9RFZCK;tVKp1KG?O{SNv^K2nox3SyCbbB*~#24BV#Ih zelnxqf`4&)GNa2d^OlxO`LH5-!mu(5`=O*asaDq4p|x6Cy)HAXrj>kDOZo(|Ud{8= zqDRPwYN>i$bwe$(3P~Nv>9&?p0~{r$T2a;7tHsqU6&NCVTZ?IF%`VA7x1P(WmJ&;= z6tU4ku7`rOIR$G))GgUbi{w+@Vr-a0ru;f|#bO{gyhc#T8r4vP6e&=ut$i=7Sxqqafs{GOUR*okK0I zon91^pRH!L<;=gHNXv~yLN_*aCyNX!yH!6gmT@r5+?+x=_(?3kp~MQ2)ZLotH@($m zUe|!gXB5+~E78e1?lCmo&p_8uh}za!M$WvRM3^PI3>}NkX>PU}a?9Q3o z>$8UO6d5k=eu$29-6>dM)qOx<7nVBKL~R|Wna&TWSv=I;4OuF|Ymmvt4J)n1+&4!T zwzAvj7foO|oyH4liY(qzW&L}$J{OzW`}`djs(j)bsCLd3X4}o~k3K zzk0NOd#v#Vwei+#KVM~UHV!7AK4shH%B4$3Mn(er96N!yk!irEH`2l<0Q`_VI9OI8 zP6zWOx;YS7ioZ-Yq2bLKFmo}He5o8?h_sNU2FvDcwiI)Np*wp6J8Upz86#O~+IR22 zZ_|R%TaQqxaDKuZI>3FIdy|`c&LY~0g%79Gy^5wgHKD47rN;^Uc9PpCPyVlsNaDOR zf6`G;7Y>_xy41%j*Gz-2$HslN-ZU^a` z<F#^;&Bw>&bT2pwS47SZRZ*rP_25=Rw>2F@|tbfXQ!Miv~FG(EB1 z$cHBUSE8tA6ZBZnRLo5X)|$pIj<7nX;jSQ-qSyZRa89OH%F()j`dTi)jNlWn?5x)TK^W;&SL6KuT4bU2K zVlVZ}sghy%nZYcJc8irH*mZN>SMZtFgkyKtfDy0$jn_SeC$&WV&|{z$a){6_$skd$ zs7wPk-J0S`m61KJ-y~)zpejaq9TL!^h&r=$9@Wl1yK>7a@hgX68 Jzx~f;;9sjGOuzsD literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Net.NetworkInformation.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Net.NetworkInformation.dll new file mode 100644 index 0000000000000000000000000000000000000000..ba8760af3011d9812c6b77ac6aefcff67433cf5b GIT binary patch literal 4608 zcmeHK4Qw366@KfVB*et|Ls23itYZ^w;cV>KkpFV_oq;2^7=0B*dDuPJ(-rTQ$ zKnNjJsl4;NnK$pvoA);}>#lposho%^(5_q|I*y(pAn|9TF|ey|_*FH%c-5Jj<4Wh5 zn!X{^Q&X;!aP_2W=(g?nYE-Ch+Ez_l4Q-96Nhc<>dGqGh?1bWnLXiKJM93C=* z`%~JQ*9YF{SbF)bZTDN}ud5z^dB?jqp04_@a@O8{ z6!bUt{Gjgld(WQS`yXxh>3z@L{L`N=JNV$*!C!=W|LxX4QGVf>6?H#Oy*>DDW6%7u z%2n+H!yERW-uKtnelz^|OE38qf$_g|-}2C*#ecj&d(`&GUF}NFdXB|#tJb8oG_^FZ zXLBpb0{#)4t9<|i#HbFfHsZUco$y$q4mH4KSGzqzjTmzXYwy?|4x!%!`Z-?PZaGoV z3|PKk_BBNNnYg61(2{KIcyEp&_xUkof9vi)f@%(rYew$_L-gIuzNv3prbULHQg~f(Hoe^|Wqpq14nt@f~if;7_*PGFx+f7S+Dl;T3 zeKcYwW^iPS80Do!ix3at3fmBQSBtD%n0wQm5$>>Q2#<0M>Ai18P0RF4 zVvx&BTP)@Z&kGLec0$BDhK23lsoOE=p`1jPm8ZhCFWk6p2ugZ}<634km$`fbXU@77 zv-tc|xyqP^eph$)sQGr_*dP9NCV9ijIE_6;btu&_ToGW;;`0i+H`3P3?+YKT+2<|| zoI3W(#iz9gkIX;z@w_)DKECgrhxdI{K5Tur^YDS?FKqnhW3RmYx08Q=?EI~ZYs$u} z+)W>jJ+k-IYncTP|8{m}Ys18v>H}|8zVnZXniD^Hf8vAK&d#e3o;-TE{@!Tg5z%=4 zr9W@>?{!wa@xcS%e186^M>ns$?)!^^VyT)uaj>=Pp7RGQR7I&?sZh;lR(ICVMGDOu z)RQ{ywnjB<8yZo)LbY9v?Wjmc(y`S}#5=7g1lVy`_k0(1n05uxW`))j%1^B~8q_sS z%`Iw9oz$k*5BYv-!|K(UOhy~Y?xPt_vH=$!0>$?(eh4Q_E~}Jx@)Cs>YT9c2CB3+5 z>z0;EM`b#c3O?)0S*ovW$$+b;x*fY?#1QhR^$odB##83}@>@Imm$hDycP+#jCUWl= zk1z9B<jid&qFaE!oQRI8KblOudvqwng*yK=T zFKGUD7z_}t!y(DTx{6i|`|%d+0`8z*jKZ{)x47rPbrXoW>hg~l;k4tchf&VQKTS@&*ER~j>HYpbl0$@@&Ll&N)sWnaTr W838r>|H*>2U*)D>@AbbDflmORJ;BTX literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Net.Primitives.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Net.Primitives.dll new file mode 100644 index 0000000000000000000000000000000000000000..26c335dbbf6c408799415beb64642d108feb9961 GIT binary patch literal 5120 zcmeHKYiv}<6+YJw9wv5xLUtt|^Cr z+lwNwXw#Pb2uWz7K%^)tse;ldZRiWp(1Jvpv?@vyDNSh7hN?{qQ6z$@N+|^BcV>6J zyS7`Qs{Ij(S>H2r&YU^(%{OQ69d~VbgvyDi0?*~kM2Apw2`TxX#VERKZaQ2;Kb(G| z_K?cZ{(QJ`=cXT2@A+xy-9O%Z z|MXwH{*Ta#3)>zx57^(VTA+Qf;YSCmPF)Jmy>;(%1Br9(Pwkv}Q|m`>cHi>A!QFR1 z_4$`xxX`oy6WPA)%*n5Wx1I?ddqupo>*Rw~)$^J&i~4@`_Z$Dby*+wYyOu-GTnx1u zO-4&oOY>5OTS+!#Ke(yePIMggC)|z((sGkNdmOFI?pxhGQF;|^WDnJS>7I@V>bIdk z3u5ZpZ7;^oC>TC->h(msSUIn?(3~uHJU4U5b-oQ>nuUkxy|OI7Q%I-Vu%$gp+Dbm8 zy-SAl6CY7EMK7CL$*-4X3!nf1{qdz4Mow8(!G#hrT{Wd z8LeWpa6TEOrjot*usx~0#^e-EG1^aRZz~&-&Rz7Jc0`+wT4#k`Ezw@fX{w7(VUn6` z6Y{S)O;;AJtT@W760J6;WrsFn_RnUUkdd6GE6aT)mkBmg!II4SPdL@v?gNYqsFO`v2a&VHa z4tKzlj>$Mod!3N}q<~ggw)nT55n-E|sFj>#A!|g2hZYcl4BWOkv9??0H))k*mUGGSr!U_B;qGr-C?B%F z+PU|!1qbi=+rE=;zI*Hs``)k zIbD17J7-UyOKj}CX3w$j?ycVxYkXcb-gy3ZD}qhlqW8~jzwdk39)DuR=jJ~&J1pkv z&e1)sT^rumQ=w~G%>s?)6;fcr0%vPf-ETT3zBi3}hZ{GD>NTqC@?1|xnmL}UcbaZ8 zZ6*b}2c+o-66Y%|1U((dvqUXY?XnOr1HgehG#lyqH#z=M^1KZtz zj}QprZy|o55m3u2)pv4^MzaiKG5#EXz`}_%Qt6o52CV{bPQrpT>MNVGUYeeQUh66K{e$~R?mmGgJG(PLaB?3i5RFfp)Sh&;SjYTdEkf+=hs(VBq zdQDh;^qUmG&x6Kg2YtVyA6PYD3gBhIo}467tMX~Wx^F}5CTgV^b3mPR1IC6C&%sY% zbbwh1(K4t5SRCArx={zHd({jMW?>9Nu==njfQnyu%W+f5$4V)@c&DP~xLo>Gn^(#x z8*!X?rEx?c+Nf~k8HlLJapjp(bLH3j-{5M(KVI4xC+iSf0(XJKRv>5^dzh0s@Mmni zeu>(|`U)$#atyfn(Ne_fM4Y6G!c3>YEpw2hLCipk{ZgAw_28ue3@rh&X53EoaqJbi zV_%LFAnr0+jNh>O88lMDH{V}*m+}5YX~b>67*{sK62R$Tl%%aH3kdV(_ogR@nfH$Q z$nO6tTZf~eXS}7IDZTCjL(Ged4OS8%cqF}J^TOZGq-=5KwriBzhdBDs!kYH literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Net.Requests.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Net.Requests.dll new file mode 100644 index 0000000000000000000000000000000000000000..a3f3c9b0b23da466c70921d986861adfb3f04b5e GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.ILGeneration.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.ILGeneration.dll new file mode 100644 index 0000000000000000000000000000000000000000..2fe760850a9826b7f7c7cdcbf821495f97d21185 GIT binary patch literal 4608 zcmeHKeQXrh5uf!3CO8-z5QR3O>)H*raMzz{O2Fl8pG{oO*!Ya06dLcXpU+$Nc29eI zwlAt2i>69SQpF1SF>B%*3msS#086r~WQsHv2ym8dAHTOp-s{|F^b>2KcN zmwiqYDg09@bAG=!^WK|z^JZrEt$X**P%#mepk2RC^fG#;fW(i7X-rpq@s|~J`lj<$ zFDs$*RfA(@LXEpl)YW6Eq1(3OsS%;NNn15-HP{zcW6p@smM>pclQ!MoMHEulgB)F? zqN;LbDG~l;L-*zefQlACV^Gl*`F?|w{&P>$Xc%WIroi`!R?5FzpBDWkG!47knGX=1 z;UFxeVWOKCj(rkY&AKjEFNJ(}o}T83Ne}Yx$^e*?=S=$zNs>x5thou-fFykjfLVgJ z3@wiW@LqF;N{zv_oJZ)j0= zS+r4na6DD^;zL(%UH!(|=PRdPYbgKRAG&{fdFa^b6UDPf$Gwe}@2_04;`Q>q&%W7v z;Mloy=bI0`^rIcKKY8%v!)@O^aB297+alqm2ajFqs`=-5bmy0}9rVbd)M3u9H|Lu})%>#7z?0CH4UKDLWUdO>bjlBh3L@s8Z2rGxY&GC2l7je3+uZZ_z=ZK@TV;)4Au9y;Nir z5X>w+uM8uQOsd46E9aC_$uV4l5|_Qo0=++Pt{8e1a-5+eEva&3ZIN%qm)6gdHqMi_ zq$Q~)>*981xAZzANlSd4!l{HOV%mThwS?iBj;(dYOi$|xZ4`}*!$)o7jkZ===I@E1i;v*-6!qQV=GrGt@wu=<2<~%|ug)3}B zWR9Af$^<)UduB{%d`hUgVd0LOhDgwWKOs-=nGw@6y}TH7CKH|$%UbJ5n%0PL3)3Jo zNDEeT5Gb2fWGSRagw<_MCgVOE)IHtjDC8Krl`-G1BtP2-h@ z1xxsGf;Tzr0 zFB~pW6{VtHp$(Y?f6UY5ANLl8mhaJHI^NFpYL9Jbg!dm+_d2$tBKS8I(rwYjmWMNONN*3{ZD&x_yH&@eGEp-uYxXoeH3!z&x% z;+q3M1Qm`KmC9RXjY5^0)_}iQV$`&CON%EXGAT+4zuMOGs==Z)yInoL!?C+24Iv-x z!7?065RIYGGBj4w3U&y0!9Bn(8UWWreY68| z53n0N)2~Y2{jYy_Wt9DXtDN=k4X)*U3PMm|RVNpAOx)=LHfKIL6 zUMCOh97s&}(W#Qx@yV&cCl9Mkj7Jx-bWE;k#JTT;?M7;)2*-fNs1~}NuouHmK- z?ulvIBYBPjpP(M4!%;9`n`lz{n2Amh`y?>KE8|&j*v5_axe;GaN;Z~5*w@9*x!AYD zyT)weSk_=Y`^|B4(d#&S?vyviKcc5-6ZQ#VkEq;%vlmCcI3iJa!QbMAV=AI(P#q%M z46mE;#iK5WdM@U?mhE`3dlxm}Hz9u-a=|&v+D z7Gd8^PW#e6bIv(dnH;mk)p+A`>gT8*`#Px2B>eaCGDOsiaT`s|J`*gfh&DfeQE2Eu zff3I0DD3F+IdRjrk{DsXTV?Ic-)CV3Evz4?eMX-q0;>Q2$y;}R8Y7?S{=Y`xe+_W^ AlmGw# literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.Lightweight.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.Lightweight.dll new file mode 100644 index 0000000000000000000000000000000000000000..04352c37a097fec5dc8d2c5d892d6a97efd37c01 GIT binary patch literal 4608 zcmeHKeQ;FO6+bU*0E0wChw-Dri$P2zyd)&0MFZU=8zf~zFdHKksJwl9clWjLW9RK# zmhFc|v~+C$K&5K+FQ>}1)fvk8F->i?*oht68K;)kc9@~o&QORQMxk|vX^N%4bKicE zg-&PWpU!YL?|1LH=iGD8J?GqaUxw~}m}U`C2+!HGL=$M4!V>>Gj6>YG9V() zCY0z~O`~Zut7bem<>|I+=#Jz1YFwyZ&QVQAjSRZqRHR*5F-i4-2JqD^WL+Nz=R zcGrgHuH8NRtBXz^J~O@Nclli>kE~ts*wpSvZrpXtKh_*N68?F|{al&-*FSN? zy6*Odqkr!?wy}9+;LN)4>2&%h-=BE-)zj@;kNjZ*>Ao*_4pv&3486|%mtwGolDgyEa6 zqYc=muSLyN+RqC{>dj__9k&Xjrf-Q}9~qA4d{H}-G{bkjvU)^h4bRN5&B~;bt%ykK zIm_?0Og&pG?RV{r?i6YTn>@H}__cz5H&gJ~+gj0}lXN{>XFqgnOnBMzI<(HT#07;B zVd;gKnL5u#Hi!aGtt^X33QstOC~dVOD#beI_@*s1-X*4bG2!hn4UwghKp=PTn{m@J z{i+y53XX1@#*pySZlX5&GH=xDxXyYv>j&vw?^+4rk)1VM&obi|m{gr?En)GwrdcW@ zJ-_YOKmFl#E29rQySruhwYn6IKTS(fg5yNrfp|8bLGUB7-cCXl@{yVI+v&R|_a8p_ zjP~GjSM2|I{`*rOf9b@YZ~kl64(oyFlaDTb;kM&X9e(G?>wkLc(5kDN>K>lw_55@E zvHK?fl3%drmvi#Nty3!-AN^bXiKA0Z2lstAbtg$c1koCWK3gt5wZ&*vS9WxE zsYP?rn%a`~{miZH?fHCO+Zn8*8Lr)mw;7_vFID^yQ}|t1FJHKe6uMH=+VN*+lP0QG z%jDuRCrXG9_hQx>ty^@Lr)M_0&cIGX$YVB|_S}3{nfv3fY#qC{`#t$0g?f?REZ$Gd zzRP`;d$m-$$B6FfcfE*Z4e6#6)Q}LR`k=Enks7X@d}*W@0Y%<-*VJ6~GQos=kDnVV z&TH`PusKYW#$hT^I@FEs81905fCDsw-XIOrM(~5cb?7s_8v5|x!QEAw9JHU4(%|0U z^IA<2Fbb^dU3b=pMmWT>ZUlyfYNj`=Jvy$ji115AFB|o70~(^v2i<&piN5OjPmLlB4J}a zAMz;L6m0pFhi0j-Q37-1+l+dsvAj-3?xldp>2gip$7b2*DDV#2a5Ojy25b}Uls=ZC z6Tu2uNLVvd_J(a-Y@a*u^`w+zIfivTtXzqGH@xd8KODrQ;}s57Eoi8(P@E^2g(7ylx literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Emit.dll new file mode 100644 index 0000000000000000000000000000000000000000..69cd8122f358415122d7cb07bcc94a2f13237d05 GIT binary patch literal 4608 zcmeHKeQX@X6@TkEvB`%MNSi{FCTkpsUChRg-H;E`ob7X{i7z%jV^ZUU?Cp)uOZVg0 z-LrG3B34^Kg;pR;qa#kwNQl=1PBlaT7e28RD=(yRf{V^e{b&g zK5VyYBUR!L-g(~4n>X|3H@|tivyKhkOLK^*66K?hh>oLXiAepQ)i~TWs~)YPUtVy! z_PEl0y0(AB^wqTIraawN4c&3vKurkM%Q&j(sL`IdYP(6HEm|~xbv|@&CsDV;2#WG5 zRn#s}s)_I?3#!M~K&dDZ6jmy#iX3jVBz~@G90mO>b0~5<(GvMrtn+4W2&EBsJGUc5 zdzggjvWIBl^uGVbRtwPO=xW$sDw(GRVs8L@vI+`5xz9XqSW;9#(mdZYU`cEdH0Ghq zM=6mA&}*KsTnv<0_rS@qu=P@j5Ve=u+6*2< zWB1GL1HXD=tM~MY!~fXxqi-vhKQnm6ilKpr{``F{ddfWawI583p5Am>(DwT$8#3MB z`@s0ZYU|O@uiCX@edo%>chs*t`dHO-v3-)%a)8sW?)o^rjy6+Rcg^)(QPh8h zeT3(>TW$h23#Kor`V`SO*_cvVXjzUsUYj}OI&8DO0EH-7!EHXwTG{~JE43~4-BKTs z`lQq^N_|f1g7_`(I3!r1-%U2LY0a}o2ebTL+b6+k9M2}p>L!Nv_ZEj zmE*ZszfFbGe?tV z1g=*Y9u>afnQ4wwoD{~2ieWut1#On8`!l^AuASDM>`X_m2dG9c)6wCkv!0n6nZ?!R z47;AKGY;Jv5S~9Pplzll{;e}AEIk`HQ?qPjyU6m?A|kLSJmDB3+-lJk@|$r2(-s=< z5>vgn@J3BT_|%tk$lV8K!nDj_77p4orj-;$p7VB_fe=1*xQ-uq;K=pDft^mqF0@C5 z6NJV#Q&`E+xJEd_GmZXiTJ-9;=tLk25n>`3aSJ1J=@QPvk)(weWJ8++gl*e5T+cES zGjl~|mX@^m#WhETB6{bRlfQ_c-QRxaV9$~LznNS};}6hkJYwTS_rpDpA0^m*@wR5d zQ^v1^s%NHdm^}8SC_rsyJ%fb<}R%NoDkufP2`}bLW@w1ko0S zHWX4@tv4FfbxqAJYCfEdrq+)HL3-2LwPRyr+TPqcn&H|Fcte9Bz9{emkHA_nS6(8^ z6uMB;*5c3hhfO>cS~`=E=b%*bn`|YI>aSRKgQur=xK8I@L&(Rtf5dage5Lx=w+;ko$Jn8Nt1YWDBLbvK7q%+yys5cTyi(UDQK6V0S@pL!0Gf<-6x{ zcUL$$S8tWx+`Ym1Tq;o*3Zm-dA&!YVT_C1I!{o|gt2yhbA6^~3KKwcb80W%b*+)OG z9Kk220!#r$ndnc=5-BRjG-2OYA$AkBQi3_aZM__GI}p#tPhfU{RS40tr~~xaxE=dY z4@+!DVRa2m*jO)sKM5Z{)VNltrVuYJF=xS$E@QKQr)=|X8EGR@hIeZq2EGd=mXL)g z*7V`wk?F#!9OHbkHQ{SWDR47@_#Rd$a@h(LO@+eTdjQap> zM7(aqO36sfdKx_Q4pTIORY;yhd7n!4V4(p_tpmDde5t6@SS)hLV>wQMxSMD#eq-{d z(cUuN`CEoh9Ip#VBfk7fapkft37j@&dGr;T5rlQaGwR7><}+kY!ZTxwv*`TKXasM2 z1f;RZ6Kwx42L1(rY1yU# literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Extensions.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Reflection.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..d162de0235eb93a7522112440d0dd735ece64eb9 GIT binary patch literal 4608 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Extensions.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..7fb59e5b5d26d6fb12725b67d66b3adb35d63549 GIT binary patch literal 5120 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.InteropServices.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..23fddc1538048d66199da9fd5e9e192fefe41123 GIT binary patch literal 6144 zcmeHLdu$ZP8UNM~-Z(r`M4B`#H59DCVZccWf#mG7fdd=6K7-wa0DE_Hz72c3*V#Qk zkO*!d&7+SXNb^8Vn<{NZQ$%T-s!=J36q-tvLJ3LJkT#MFY2#FpD1THUM1lThZtrf# zcH2lzr2dgP@3-@t@0)MF*X-`N<<31+PDB;Bu3ja29(U2glKy8h0Cv@^Uslm`<6oNn zyw?2E?2feQ>RIk|b0ecC4BK`*J8eS+rsFK z!3CFsEez{JoLLS8rL9}R6}o2N3bZg$LjcO|VG&m}VOtqh(rKOOdr+c@!9Z)%^Pvq4 zjoN)Ly1V9J&&*l(4IRH}%UiqWgl{>z?b!Ac6<>StC+~FcYAV}tnm3=iG-%ALc(rrt zl{b1${P4FAjN9{i`NQWY?R@!9zaM(#OONk-;^)&py=3lVf85=0RgGY}XxvL?zwn6i) z7qRH63)O~})-GMVOqg3q7N~_hSKmwYI_~2T&+3@RO}pC_5`z=+d8^(KqapM~sH<0R zh&JMW3HTraQ{7-WaUqO`Fi#nKEzv^)T-KI~n2XqnwF~z`U!>$#Ttw$81y3ZihQgp- zlIA4cC+R^+eK8SuN@9l6Gob8$)|Rg|56t;rn=Mr)OxYq}NG0Thbay7fZTK z(t1gwpq<(mWdDnx{hA?Zh$hkj3ej{)ua~r%PGjUIIuE*(CTStMjn;xjBwa_F(2r3Z z^e)-~nxOl%ihk9g|f{rNYH3gkl&_xARl?UydRX(r0p~Ka;jRlnn-$4z3fiThy$X6xLBCee?|cOH zD_Wdn&SJMytl#xmCe)s@Ju|~XQQKqO$;KG(F%!(Cde>!{xYgfbdKRnq@MMeUJXV~= zQWi^irejkm;W@l0-pJepH?x9MnpDu$$Wlhm^6D+qa7S_@P9|&E{UaG|9405ck&K9w z?dN89dK6aFPB}bd2s;dGBjfI<2CXtJ_HUVu%rg38X7?zLtYiIRYRRH@mSUXQ3082m z#2OZ7;U%W>Vxav5Nbfx}Zd#@nhyjM9nXJPDE;gEO*6Ly%>6r<`T4UHr3y$TusD}PRlzgWmX#;r=rZT@Fkd=IrW6a=*berL&14jCj+YEdR zGZ?$kuyTR8igJi1OED}e8)c}ZpH@eFTMHfO|LU9>P?eX6IF{J!*yPbj&h?y3ebUIn z4vGeLh7!io%2B%qrI_i$-TR8|-bi(`y%MV}qSBY@?ecSLJN^L~V0SQIo+5zJyE> z!qsHwGUSJ?peExc9B!HM|5mz5OMJTGP@~J+dOdMybNt}yy}#->7e6}p01Z4%bMOH* zK=ddC#*~2ox5w%ii?1s2SvdCP%bh0=o&Co%q2143bLfM~?+kr#&%2L2@P2uZwX6Bb zy*K{!wzv16{llMMcys@mTc*!0+cS}`cyHjFJ5TtP$GaxS8PQ6OK3{yr=<^db`jXnkOLbqJ)TYl*dtP?=qD8&Ey`jGR zI-!J!~BnonBWP_lxbDHeOdZC=Ut{_uB#g{3YNq(bq+9WGkH0h_*x=j%P)SVcH~% zhp~LfFzM=C(!(Psf9MfSo_A)BIO@p&5aKbQsuF(Z&yHPT+)-$Swx*&E-HkX4YyoY; zc_KzpYNhqSQP5TBi*~f)!j=5lr7$^vze95KCjwE+!PW?%L90O=dQ6<@7`jGa1D&Q;2Y#Y&H)l_CmpUhP%d=DFwViTse2SnyQNGm{Js^sYpIUnA_laTsxdbL zeHr{1W_wtLpsgQw4~+Pr}ap7GFVCMg3Xn zLq8&BNIk;-F4-5}3(FUvWQ6w#=pbkowiTk%D0L^KWLAm6M`dd*{y|e(Z=>|e4aB+* zR@D|S5xZHC7xw03VZ#?I;NAaXmx#?1v<&*2VMn*rEV7hEUPP?ADUDT0W=7T_gmnu!Z1rsxITkT0Ez&fHV z_E$G%7@!OzBCjdvG2}krzOEcbguQjLR@8NdSIqEw!L(1>#~A@V|G%o!D?iRfKGFUE H8i9WSQZ{O( literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Numerics.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Numerics.dll new file mode 100644 index 0000000000000000000000000000000000000000..3726081379c1928d433b497bc9490cf15c4090df GIT binary patch literal 4608 zcmeHKe{5CN9sl0a@~cun76y~yEoH3Dy4#jk84BBL`(RdDTKd|83WNJ@&wIUif4tm# zAMMiwo2gkG8klTGP!poCC^#?%rjm?c)|t3yGEH1Yf{QaORzn6P`$q=rKHqcSum0Gw zku32K&g=P}^F8N#zW4L}obS2kw&VVNG>wQ#QOCxJ-bBkKBISP;!FKs==#JwCYFwyZ+EGnMjdsRV+wB+HoH?_XXI*!#BWhO|L7{v? zC6(pMOd|ZrissA;2o*Jg%0fj`65>Wr;^&rzQ8CVC8bux_nkWAXZB`9UCI*O4%^R0 zEh-V9*F0glFqBw#V3K_y^x_gBYAM#ae~5WSVQeK-Mt@K-Rz{@oU{UE(Lu!kLrtJ2e z8cly${%PZ;U-rKG^1chFpNpS3v-R;)pDz5yk58T7)4OiCK{@@WUO{!vqrczTwI_3F zU&n%D$z>zEkL|d!bM&p`*H@f)=jdm9KRENN(=Q}eezEG?mtVZ^*YB-gcKwbaW$Gw^qIn{ANICI(O!donC)9E zHx8W(Xr4FYYeY}5a#d-hg&}wRY?#XZ$n|+kxDtJ&@EmXEGFlC}NlHh`C#5_h zr|42@R8B9GMhm38P0A{I7bD-H^N@{Hrf76GwL-Q^xq*7okI@5=56~`1gC15&hYRPE zQ7STlix1mDyj*jjhm2~1mP z8`HM%Ov9&U-xqe=%Ji6lC7J_lbvzx2ytznN!U#;)AJ%g85D8Q zVkX<1KqQ5iqdvbwyuuPgWc!BeS!O(EFmWrjev6MUUhJxD_T0YZ+8u|Nc0RRv{hx!e zHQQ=&FYf)x zKc?-n9&JDH^wQVw{_NnnkIujS@xc%8Tu@oEuiRVnjKa%uER|JL?f_P>4XK=rnG?NL$t&8vT08*FpG``0VGe{^E*$TMqKEcxlJ ztzwaCpWWZoasP+=OI1awP!+mu0+~53!Vqs&XwDYh*6~)VRofgxBdS)Ys>5|$6=d12 zqqgf#GOZ^CrW2m-2Ojb&?Fpi_3Vko1PHMGLqpqxPXjHTAq&KyCAP7=-)zu9S4r)W; zb2P)XYw)@PMf}FZ4@3fNNtt|`E>vi~rq$uk_7f&DQA?%cawC*dKBY_9s;6Y(W=~IT zbe(lWhLA_6XTWm@eP!kw4{hyR-1Ny4^lbLN!5TWweU*EYOYUAG+TQAVQOoMkO()C{ zA@YeZ_AOE)lNa9{xj_aLdEYIXbk)loAf&|bc*nf;;kUz<2<}ZBvRs*2+JtT&?t<-* z>!=&OHtM8}(Ayx_qtE3xrI-F0-d(xHVfzC)8{Qjyj*CkaiUO}XdGKT6P8aa$P=Z`( zwwzBp^J_0@%6GxI99yl@8!8SAZ#im5K4>6rQ5erXF#xg7122qBwIvU9<#i zTj9^fPhfR`rx3hl&;}T>aXWTXTF#i#MnlYL+2iLKu+yj?$oPe}hAQ&@QWA3p*1ELD zG;NW6j+T+u;>d8c20Y-qP-4lk5XG~7%&=u@T+BC$tsY-PN}iiO`1kOH0+&rdQJ=5O z%_7({KIXwgt0TrjH2)h8qG$2dqfk41C8Z~3Jq4aQ!XypgDI|Ad{FqABV4(&~tpvIT ze5t4tSS)bJw(KW>-@B*|zd`xaXlNYo{4K*fj<+OAExzQ6afR8|51ckudGsJy;-aF4 zd(@f5%zMb3(A+P}O|SvaW(vJ|9V}&>;mz zc;6E6qXRvkjL=saJ;v80b7A~*CT7IMe894s<*Uqq8vc)R_Rg;|$eY;yUkv;UaFeQ! literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Json.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Json.dll new file mode 100644 index 0000000000000000000000000000000000000000..f7b41921ba8261a974181445b28f36d9c7b90845 GIT binary patch literal 4608 zcmeHKeQX@n5uf!(94E08LKP7e(ls{0rtZd$-9kbFckwyk#Ew&+wW@p2^wpH-COzF&4c&3vKurkMOFOFRsIkttYPuhd%->}5W@lF{xUG=WSm*QAxTn+`ZUk?3`o+q2nO@e z7N8YS1m0_&uv{#ZzV<=Mwh($DMTj;O$~=xRt|0cUh)U@-m8cnKC_Gs}Th$QSf~h%& zC9CiK&H3W}`^Ucj+=}wa)8ob`Yu-9Cy14v>hWQ77^x@mb$D?~*p8Utek?8R6_e@R} zZ!10g{OMzn-5>0K;3uigPqbF0qu0Oxw=W(l_0GPT*uDI|8=iaZlLwcMof<2<_rQgT zou$8e<=R`%{-A!(_VF{ZAJ_c7^y<+Ii@rDdaq{ESk-mzWTYh`ZhWMrpO4fVEVsEq7 zpfxo#HLhWIOUVL1ir}j623EkR53M>Lc&3x|d4+`<;IgaU7N-DXhOqj!ZEZ312Oy8} z-VK(UfXsyLOUk}NbdZG!rHPh>*zwtnA@{j4)@JK;ZBdBtJgTP_q;#j`!;+6m{;cG` zll-jYHu$%d^7FBI8Fk5Cyjs`biYzE zl8Za^QjrA=FsJBArIEqOKgAe7sk|J5L@KN3XOPR$t1QqTr%9hF3lMcqS6LKFw64SL zPg~*^if8;l*jiWG2~1mPap9S|W$x1h({;2>zUxrb_l2FXGTmliiD-a=NTdTXwNVUM z!r;}U8G-9fEsqJ`@XQoz@|$wDVq!o~TS3$^b$_cMLxn5}4WQyI@p z4$h%!a|T?`mhtFTkMR6C9olGG;@>J`!qPKwGdV{fn?;7V<~`~X1Hu!IA#$PSRWqRG zD6!Q8|3oj6N_Erey{N7{v5IbR$I@Wi(Up&y_c7wauVAlM)576ZY#Zt`m5= z5pZ5}nHJt9RB;gm^7*%Y!}TmPamjOKy=eUw-Xz5;mm>Y)vvs3gr+(RabWzXIZ~o%o zB#j)U8Wi&g(PL20=K zUhBU0!;h}`>CGP;IrGLlFTHzY{99L66+N=hTldeA$L~4$r=cYezfv~TS$A%A<)eQs z{pkI3RWCku{@kbiceF1$^wJLx*WQ_^KQ8L8nRs)3aHso?KYx1nUC%B)Il6x3)ekOh z5m%}9i-(#!c8nh?Q5B`~28FJhk**wG`6nZcbg4oWy}GUAJz1}|Ifh15t59`^>$oaX zX}gZvt~<%Jo)l0Ic)A~WsNu9Hh}J7~(^ToIwMLz~x}mX2&6<-=|-9^i` zdwOb%>$DCVLO!P5gPuF&EAyYxO!wex>I6PH75Efjm5KS}9F`uFYZ?&ujj-K7&6Hpa zsGnA1Zwu_%_zCO|a0QZkMVP}8L?sHs2CwRn(}A% z;7kvv=Fe(|XAM)0F}xP**=NSfL(jP6BmD1uBYJ|?;EZ_Ks%2$uVp&{?5?F%_zlUQM#Izc!{0$%EqI@S>haZB=vP>& z{qWPqE|2yAIVKe?%w=cRXU;X_l*=tkT!ELj_6BiVDYO-5y2w)+z6S-FA?lE|>cYR= zGr+a00%?BUlGvex3(RnS2Vh4>MEsIwtY#L69F~+|D^B6 N%W3pWTmLTz{0j>|>1_Z2 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Primitives.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Primitives.dll new file mode 100644 index 0000000000000000000000000000000000000000..b2778f4411ba7371f1d2a81b8da22c0611950032 GIT binary patch literal 5120 zcmeHKYiu0V6+W}J^Tf`pjfh(47zb+0X5z<|COB@^@ft9(W7q4vAQX?+ch>{+SY~Fu z-Vg<=@71R_eLj!G9P%VBHM3F!;N~IvBty4v!u29;#3iLa7cfGr| zoAw9%sd8uM+ELEhOQk!6?`jUwXBICYHZhc}nSg zv$Ai<@YICs#9iG|qq=Q7zB(XOH)*Set%kcJs^ts{t-O52#;od|cA`#&Ey%Ys6sTOO zEF)S08ai$#s{vHJA-oJ!bb*ZB7)krNr%}A1b1R|H14OIkFW+a;j0p8Z?+zY^h|X{j z=C^*LE9TSw7hIh)T}m$leoMhT%@-p+@Co)0Jn3uJZeX&hME#oUxlv%!wh#tO@Xj*` z0#rtCt3-#F5-Ch9Xgz8sv<0L^hudZ+ zj=Z?*`!nhN!B_Qrzw*Q{`?j4+4Id1so5!0s20y;_e4zG*+L6}Uhf)W(-sAo0?4j%T zr62r9Yt!225>Gz2`ZpU|9(d%Qmeb9#msebD*nicJS3P~^!k#^MjXhgB`S`l3A03_f z6}|mR`0RM~H6KKeU-$Bh>fhfw_P2K%+ebf&%zpIzhKbPj$gSIzto0m=;hlLYR1a0%ysIOO{xt9j1g2`c z=?t(i8dR)a`Z=P98JSg@XniJjyf(*>``j3^RF0QuWl1K!OQ?}LkWyX3LlS;Z!j~j` zOTu#!u2NXCPQsfd>{sqpme6+rS!YHg`@WoRr)Ox5gc~HRl(0s^1_`%F*eYQMV88Np zIo=2OO+}Ybqm}d%(rBH8Uy!hhra-Bs^MFnCc}1gUiU77rxPt`75xN`jc6tynN{=d~ zqxt>GRw}aC3pd*dB_NN0V%k*3B~mem=oMv3S&m+1gf0|eYXXJ5FBf6WMOb$cW)xuu zfg#1&6^<5RKP|$3TZFw|gw13zDB9ZP3?@zSHHxG?Uszgi()JBYXc6HWx@jEHeZ#S} z9@nr8-xwAiwR)bg2F!Gy;hUn>M_CReeK9v(#7q(8Iiy8>$DI=o3oqFhP{<#dHb zOi!AAt7+)oLT;O5C3HKzkkRA9_Nc#*(dH!5t`Q$vgwE>?XdW#x#lVOVg z$P5cpPe+XSB9813X`Y(5s8_^*n&fxHhJCA??D=OSaodYd)VGclM~Tu8^6SIEe@Q7oRL776EwGS%%PQ6X!OaE=Pyf+WX) zzi*ZobzIXJn5*FbvH`R~lMm<;6@X~u4RP%FcM`W8J@vy2NA|rmMx#&DMjR!hL`T71 z!sjXQ-biZ$;pE_>Z|U!6_e`Fg`s*{={U=tPyjXs2`r=*ZAA9IuCBx>oI-fdn_0OCC ze0=KN)35*G_&YbOs|*}o>2Ce!=o9x%evn%I*c(ez-8IvV6-WM3cK+;i8Gj-1 zAh0k#P$s{g>lIp~X`Aq~yqIC@rj|$!$iyh6d@5hfQhkB-dt5!S)3N7Dpl`@^Ql7Hx z7YFw5-Vi+VFpXvJ7nnmo;IYc1g)MgvA-c28al@wBr5kppeuT)D1#YOdBfQl*nlDLR<=&yW`#v(HJ&iu8oxjG2D&2z@32Y)QeFEb< zkaK`>yN_NdoyL7bflWT74AA3?XquEV_3-ONTuM9VoC#qaMkzKxaFLA?ZQGASC%X+)5R5>m{U5X+%($ zdcmf>a?H_SPwKG6I2uuC;DoWQxhRFD=BSiR$hC4Y`K)ZO#~---`nzQeJlL6AHwY{1 z=U$F&HRRcTj-!j7{p{*<2w!1E*06(`O~MbqAY(*bGTRPp&FvY^zKW>x{)}UW z4k$q3yvN{&F87g})s+N=?GMUY;=PhzXMRP^uP02q+%6RXHS_=Uh0T`|y3G53jljPF D*P~i+ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Xml.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.Serialization.Xml.dll new file mode 100644 index 0000000000000000000000000000000000000000..b5bb464bb4684f2e584cdf01fff280a5b805b793 GIT binary patch literal 5632 zcmeHLeQXrR6@P0RFaaDwQUtU~*R@IQ#$DTRB8Bkbk2BQ4#*WVzLlW@b-T1s@Z}-^U zvpJ#$HzlO0lqL!v3N(L2rIjj5NgGvyAR!S6g-T7@#%WrmN>Z98sna4sS}9FHf&Sj? zee4;h{iFO-l{xR5d7ty~j-%(+B;mgYqhMEj@k9mveEKVu z$CZv(Dtm_vS4}x~!qJmzOt&oCQ=>w4(w1siYPc(+ChfS;X3e^xI%~SSji^Im4+`xp zl~m49%86!zhK^gsR{&HzO?Vin=t_LQF_QjsPosE1=T=Hhj}Xn4e}z7a`XY3ymS`=H zn}~kOL73PEd^aYN|0AyEU6-Qez`q_)(mb)<1Afa50N}~BX8i^xn@TjGIj$1}CVgwd zU@D#pJb~5(?=?r5HUv3jG=PU~-GV33nuuBgs2pCv`nj=hB{YS8qY_;}%oQdETDR(l zHb9zm_`TPkwraos_#eMLvwF*)AFo+(py3L-bOqAK$5T2U0SX zHc2=l;XVnEN_a-XcO)!VSaP9+O%iTYJY_2F1!SAPMPB=K>ZL<;lZ5jntdy`;!bS;~ zO4ux6JK#p;9y#6!_@JUosL>4i5ovU@grAqNipD^>gWdyNOcjbocVYi()GFax+Kh38 z;(+(kPQV!LQp!dP`;)y?h>JeB*$ycuk%x)2GyalDWfncJoKdEuR~eyqi?B;Y*n*Ov z+LBEr1uLQmvx=}svY4EXoHP}4C7}Dfw~Kgx z2XAGbS6UkM?A9zMO;RJGb9Y{HO%d;2@OpePz%;PFJht;H-sU`SUlH#}4qM)7$J3@* zNs)}}iKNz(wmc&#w1{vF-86RSo?%;Bf6}C8*A>aAndvn=Q#56fqVi zE#}!yUOX(^m}8`vQ&7s;3X4HKZFla$NR%|79{lRC88FvVvw!@|@v5hF3lLe`25s}?-!5re`JR!roUT3}6xG_Mk> z4kA8m#Dq)P6v)+kM$|A3FA#&U?&+k+PP4hturgvpXeL5*Bmp))x-B0NtX zj_uYk@*fXMwQY|HnMguCbVau!-vN8=AchTD0=kpQxx|&T-ZHkOMSGmpS_})^9-+s1 z#V%)|K;GaOUV+^07&Zu*g3*CR)P|L3sNM3K9Y@cwYJp8{$y89hnCs8Uv<;4)N{M)Z zP%z=s?n&F8?iQ>2FAaYRe_YTimh@Lavg^~$v{x1!6x1M|A(MzSn z=C?WyJayaicm3ty8?V3l;#&vDmfT!f^5hI>`6r|McAoyz$m}Oxnl{o^JHDvmslQG+ z_wIP*sUMyn|1f@E$ILx1{`f%6{n5I^qVCpNLAuekjS-Mfbe zrMb?w@;j|}$gxLUrTo~A`}*dG&OSDdIdbhXkJTJj+~@9jL|a;ICv2LXx?zzl7$LId zfG>cBq&5{RUdR5ABB03o?!2q6`m$sR6+BuT46aoF+o8XSs2_(zuJxCNFzmx!a0_4? zZYU9Ir!HCtyd7{g#@tSpoxkkgU31EQze;lb8zG-R!4?Lhz^YCT>=?My3)r-1kZdVd zE$^1S;Od~d;Opc;&IZP9C%&eRiwE^RTtUyeBf?0p@!Jx3r08w3y7zg%R(nAZh|B~#!P;&3hfZNP_mVa`6eRyQzL z2%a_MAC6%ql?@DXGOEXKME*3|UX&mH4&rL@59>O7H3t3iD>V*3lhAVL z0a;Cid2_k!%KFT?<~ZeY%NSSSwXMA&yzLe0#+)|tl!otKATvarpj&v<{2pLjMWlJZ zC7_`L3Q#z|gRrB^ec@znr9okzL$YRy=b2bJ6YBfa?E$V)n9YY4p0S|CI>* E3!iG11poj5 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Runtime.dll new file mode 100644 index 0000000000000000000000000000000000000000..d74e3232b9f255f0da05284d8de832cbef013824 GIT binary patch literal 12800 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 WyKI5=!JY9{zssHcL*G8g0{;)nlQ7r- literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Security.Principal.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Security.Principal.dll new file mode 100644 index 0000000000000000000000000000000000000000..0587d8acd908c0e2fb6a498d967438fc1a5d454a GIT binary patch literal 4608 zcmeHKYitx%6h2e7ylM-IA%Ie+6t#_Y+R{b@LAMW-m6q1-3W!#jPH(rP^VrPJwp|l( z<0C347{O;uG*M%NMv2k*LW7ZLj4vc=B#L69u^I@H_&^Nmckb?Xw-1fR#Q1}=o$uar z&%NiK*PT0UU3(`@Aff=C-+w210WDKd;$K4w;*!%|Dxqhmyj%8y((-Ouq}PnAG0%;9 zx~&?zb@znVl)$PlOS`@Y*NBgOutVo$mgg^P9dG8E> ziYJJNK}A!Lwi`WZKev>^gK?$_6ug;ey8O$v88$tIQqa4C`$3`@2Vpd=BRXO9*x%vR zVbkU8$>5jgt^=&RRiw7QzQ+C^+`Az8o_oGV{X zbby^ioXW$#XFAb1&p3cmX^ZWnkaET2Bd|cvAiJwYT6rNcsagoFh#a1TL z9YEHV*2un3p;mf?PLw!XVwuEBiM0|JNoFNGzwf zF>)4t4y>a|iU!-30h=VQpw;MysS|iP4FC+;bziof!_|C9Q6E!V>3GI2reat%Ze=@Jv6cwIiQ~8PhFlh{uK9WhEn~Z;1vU ziSA1HBD8( z_h7Bzj}K2{slTmqXhF$c-xVJC zYN%}IV~2(gcVE$R!j{*bxWA&at7@C5ntSx)rGBS-_Sc8kU-|U3UH2?Km-_>)JhA0;-~v%u{IYpH^<##gh~&UZdMO>bXh{Ifh15p-_3N>$oaHZM%-zqC3%q z9u*MxczWFTP-6*C5G_^c+~LwvD~w8YK}~I)no%dUsTIAxA6r~q-QVA@4W#$c4A-v2 zOAA5bcPD-bCCn`-l<(D<3Z1BF)%dgHJtnGBizV=WN^m=Z8T$%j*wO6c~UB6$xFEM>EbN`@AuX11I-dM`sQ$$xaxn8qnwd$smt`s3M z<$y1k(@71EU3`4xZ$?0o_uZ^9SG~+Up%79d6>-AT-wtbnM6+|ylDI(|8!0(07T|@QM#W8^9Qmk!) zJ{v!Q)joD1XiK8?F=FF(45KwDA@%!^Xw;tB%fOB?*koa>8_2J+B~&u3lVuK8tVGND znbycYd(75W;h3<;1~d?KuszvGG-E{^5}p|w;rG9>uLfU5xjj~44-dQKVp*aWOK({I^+L5KDk=z#cij^YI9K=3E1lAMV|0&$0xysJ=q#&UPWZN?xI+s z0|iDne?72Omv!xBba72{Ro2Uz;Hu8;GrBTH*9Ddxr~gv~)b#%+yU+PQ8Fk#2|0)81 E0Pni5VgLXD literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Duplex.dll b/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Duplex.dll new file mode 100644 index 0000000000000000000000000000000000000000..04eff320ba73c1c0f73d9beb0155ffe32a233d26 GIT binary patch literal 4608 zcmeHKeQZ?65ubM$^A#HsDiRVB)-t5FYMyQE5^mq9wjrG303q1#p4aDB-o1By z@14(=Qn)IK5*jt6p=m>+MwMu#D6I&MA_XB;3aZN=si<0{R!v1BBHF}hA|+H+B&aC; z&EB2wu-yu&QpF#c^Uluf%+Ait&h9?~Cazu1%OeEbQsaI9aUr{iCvL9|HymHGmkSD{6)yM^g6 z(HJLTDhv|cGS~}m~DB9lp=1~2bow2r#V+ZFQd~EK?Jx_+tZ5hAy%%k_$?aSIH|3pvS{@EM5 zsvbUZZf)(;AN=D$&&R*`*2MFx_HX#@?MpK&8-MfmS^b&b+<4F#yT4N_c+a^QZPlCf zmZp~Gb?okJvVo5yxZ3?h%aEf%wAxtUSx&-djeV#AF1y+XWAr#^PGRlW9_)&u|33Ji z@Z3(@je}>v^hI;NM0Aju%UTO9$>)yO<{WZgq@fEB814(@^IJ(PsSR7&r|>rvKBVv~ z3ZGK=oWdcEHJ2;AUg4PLXqEH~Fx$*qH?6a|hbyoLHf$7nb3!;}FwX`fb+ zE1ggFQd0$tWKP0M+8Rzy=@f&0Njseni3E%2=iuj|7tGL~3!Gx;A~g9>2*oZAm22Kz z;2>)2afi~jyq98GKafd1CcRP1lo*w^9!;lgIYu46FOzXQ+h+x~>rJXhrEhvxiY28t`;+Aa%WjTl#wjDRjy`6Hz7`0q)n%(lfqx{}QM)2ZD zdy~OClO1fPwumQT>+RKtvJOQFnCG zH(k%R;>8juU${^-`jE}{3e6IXX~*#&uArCKg`fWXXwQ!(PXC&6Kc*EZ?i{WVh%33& z!EcXsG;_uCk)8AV%MXnod*`#G`s1%IJa(n(qlqhD|K!k<|C}{yKh}NZxw~H9@ZpQ^ z{NdcGcV9faW^qmE*#%zPrQGue#^28@I&^wYW^4V#>gwnIHv5ymOw_#f(@!TZ4(;x~ z>F}wa9jSXH-tekyxbyNK+k;2kRe!y>f6r?R$A8d%_p#{*~Ii^ljr%`Q>>$n0NnRFe|Z8(Xvk&qA%dxjr) zsNl3GiP|+PE2C`o_jgCZmt#*U?QkS&usuIpV7vKV%Z# zhGwg4eu+jm>v|*plK!xTn%7h5xY`M=0+#~a#aex#B@cNIzqIwdy1t=KYYXoo)4fa!rlv#j-6R@7T}5rX$FLkywIXG)9_Z>y65;8SZ`ct{ zy?3`wd+JrH37OAb>pEvR|Lw3Nj8vhRiy$gmLH6S<7y#Z#+d*~FR=g_%=zD1sXog=_ zeEP5a+f|&L@9$I6{ENWnr5vJQG*~srgB=TRx`a)KhRIcGEBI95P4%GRkPo>*0rXsO z3Q_5!g%OCowy~Dgy|kg#S7>y+aDU;JyrSCKZEqka{eUuL@%o-|E1_V*6xvyYq)550j% zOA%eKFHuS(3f|!{P6NF_>tMGVd_q~|T}UDC9BqO|uo|hIxpquY9WqjntgVKZ&G>Q= zQ!-l0C+o5u-l6r>h+jtiba=q~QQQOmw&4oEHf D@0-t! literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Http.dll b/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.Http.dll new file mode 100644 index 0000000000000000000000000000000000000000..ca042957d15c1c69f7e72c0420187e6b48444290 GIT binary patch literal 5120 zcmeHK4{TLe8UOBUDP@ep7-8TB-lk|;S8iL{Y`|c?_O(c*h0<3Fn;^ZtJ$=1!-@VUs z@9Q6Dw(8Vn>~E+L0gX$Lxv)8nA&!kLV@eh^5_O9+TgKenoV6j2nZ-nO!{2w_eSPn> zozW~YOWb+A-#Op;{+#dpzVDuU+J5u>R76C@crINcI*FcJRMCG=MjQlF+=?jrHKGOTFV}}`MukpS5^dsf zlqkg@Ol>_xmrtGhPk4PYbfsMieq)}U5s2Xc{GvG^kg2_faf4G$C+abzFD-B?wkQTA zc%}q|>8K%v<3Ul0dZ5F;7UIckQKF_iRt+y;|J*pX2+g8j>qHl36KOn|*E;kJw0ToA z4*h%1KD6)r^?z8t=k~8mymD{lEoXkZ;oKwlUiV~e$I2(ZzOV0{iL2sW6Te(ozqjS>%9j1U4175}iOliqfly2hw&EK5H}p-%|7y+v2niV^j}Sd}do~ zGx|30-vuxgO^(+Ko*P^&n7xSTPG&A@^|UyH9k0z8a-SVTSNTI)i!%6@Pz9|;N;?(x z6un2$2Niu<(U%k@jWw4kx?0h#nxmD_-JozB?wR*KhuY{UU7_ewMavbfQnXIdHHtPW z+6uZ=+p5Mlf%=-Ms6lh-Au{MnMXy%0f_{OSYv~+lJ(Xw%-9XKtF-12~H^y<=3Hmu2 z0=4K%TJdP^{p3(JRqXjM+YxQMIsyvkPGvwM9X3SAwNqO5Wg+@i0r!^zjw1P*iz9WB zoZaREZchPsM*(-VfP1=td#Ql?Yr%SvqWsmbF5v14xM;}Hx^}NG?T8yGKH>)=X~cyb zv@L;I;TRi(AVrP7FOt2^NS7TrqA@_d_ND`o)$bJjj<5pTbIGs*Pfn^g3*VAF7~(XmZ`x-{k`Q>HsIUC<#BtQAZb#Jtpqv=aj}h+5r#PbN){!*sfZ^k)oc zgYAg-6*ddU9EsbB88)&>jIe1gBH$sUa4nJDYEBd)+?jR*J1Gp_B}`?AxKE)#?LM%3 zZO0DsFlaJ;+v0>Y*=`?>jBEn(6GoFt?ZWrXgosJeC$OC9bd97$P8=6jTEhMG8BRR$ zGM(ZJY2gQ1YnouuueH||+`MKEa`7eSy7)ajyajEGt)Tpeg-_?TlOiYZ|6 zvUzSpz&4A31=%EoY`EDL*YZ?ulD_3h$L^gGF19!N9R3{OqM)npb$8k0&zIiSbnM5E zyxzaE=P??6fL7q>8YTJ$6iWE~2HzQPtmFFzAGNc8b8-8bM_;^f)cET0`H#Lk@6Y4! z?m2(o9sejAbZ&1uw14@JZuryT7k~TmGv^LJciolck^AS$b$=f{aNC*Jh8EoS?ChZ} zRpYD5_D{?@|HgRv>0@t=zumX9?eei_9zImLtGD{Ns9tvQh4sNMZ{;7~zV-7zn1ANr z`cGc7Z(&R<(UYgg8rpAuZmd|>w6b!Iu9>MMa(i5;(YzgI(!^)3T5okNgQ!xYigwTS zbd-A1bM-dUO{9?H>7?B4Hw|g_gcV2Tf&$*myAm`cg%4`eXv>@z*kD64y?g7mqx5X9`dAW(S=N(tYLmLbRf&` zO9B=qsK5;8uOEI)Ro61~mBtLm*q~~naGj}@F|{sW_EGyVA)sgeKV6{yKmITU_E9YV H3k3cJlB7`c literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.NetTcp.dll b/external/binary-reference-assemblies/v4.5/Facades/System.ServiceModel.NetTcp.dll new file mode 100644 index 0000000000000000000000000000000000000000..e5909b8311efd0994bba68a3a13b8ea5041fd1ba GIT binary patch literal 5120 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 E0LEgTSO5S3 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Text.Encoding.Extensions.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Text.Encoding.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..964269b1efc9b29d77cb0ec2a6058324a78cb8fb GIT binary patch literal 4608 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.Parallel.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.Parallel.dll new file mode 100644 index 0000000000000000000000000000000000000000..1d19b8b1effc4678973186b9e2ef78e62acc790f GIT binary patch literal 5120 zcmeHKeQX>@6@TlGIBsG$O{=ICq+QD?*ukvN_BCl5r#;6`>?3w;d~V{V4e{RH_`GCq z_q4m`FM{LHq6#EvsN1RuQi+HPp^yX+5>bGvmD2o!Do8{tN&&Sf2optWQv@mwZTY>~ zJKvpsiI7SWf8_1WoA)(u-n@CUJJ+-8Ae9nP8QKRQ5S>EL5R&-XXd3G3J5E>APby!o zIi+;JTr)6YxN6F=6ONu#W4dM8o*EUZleSdDQagGhYSNAit*YvVH5u1^TZp<9jvxnb zP)W@)Whv1OkfCGvdL5987D8jBqAT&^1|{R?o~F?tXDFr6mx)%$U#`!vz6pikcN^0o zq9dGyg)l_4e4*?=;nn%jrS($qU3ud)PmFuupWyXDC)b*Z8=M4{Xh?HhCk9T&76P#Z zZ9zZ~hcri+HVma|2sZ3%C0ZVYh&Jc3l1y=40UTQimD8_PqId<7!ooc0Q~lKDiHedJ zSO4sH&z!jQ%DxK!A&Qp@7gf=_UiM8I!|61J{}2gj(ldbl8K&kF&fkYT1%j% zX#r7xP|B|%*-h*w93yN&&@gHK1(xSg@(#3_4B)g)>0d`^Z|)SC4NHU;}V~h z_)Uo`6t-L=@qH2xDz37GW`NnJ?~&JDNfA0qH%WY(#5EGvOWY*!28r7w4g(J=pOy3j zz>|tDu|~`27-@8~#2=Hmmd-))DY^jMLRE@J8)+MGyTsdQH|Pk(fFGnO;21ruluhT( zCr7EsV$VNp-&W?3NCs8nA1S95Bs&A=Fo?_Eht~_ZcM7;lc*$9+1zc+Zx2u4gEZ`1j zI8{#gQi&gn&;7Q5yO`l%*xF;q)26tWA``ABlG?zCBlI}RN*mDKy{^`$JGyBKliFNY zB%|iUfZ>^<%|q!$)1Jr<>leeOhkrwl8XWqO+xG~2_u_iYt>#IWy>uJ+#GY#Ec ztZlcGDczb_tmtzPbIe<;Xtz@nj*%ECq6%BXwv*I34&B@#9JgpdTMbiORoNj-eIjBc ziY#QCnBbwgh>#EA2rDMCOU zqxgPNw{52e;Mbwnur+G$75B#W>}j)XD}r4S6HUd%&Bet5YTar(J8fsLa0>mj48ha9 zZe6fY8_a08=&_MvqwgBRgcyA_{W{iTrJlk2C7f%Ru7_zhC%pE4;i94nL=jI%p=OPG zWi7gtbYr$-8qsV8U#;-9xXCZyQvV#if2?)pRhsR7_E)7p|L!tpDNP@tHF!-- z|8n@XSAPHE9}b^icXLh2!DUYCKc}DEf9B1x6_1^*80)Q{ZLWU&V)>;Dvo$X~`_}B` z_(R>xXI}jNp}O7ChUY}X>bX}pdAsdT|M~LN=T6>u=BZ7e`1n^>wu@WU z%2Y+Eu2b;2xb_M67rIiRszE)eZhOL-}Zwq#qGsGlZ))9$=cVpxY#bXK)5iUIw3wZ&$L9vA;;$Ya zBoslHl*=#TDur&+v_|}r?y!N=tEJLWxgkm!-lB9nTMd+~+Ue-2?Y6aLJSOB8V?*sR zS6TYg$%l5_7JNf~>0s`|Nap^)+!WI)Q;Q*c&mh{O*`phlUpqo%N&`30J4p>K z9(-N$Kgxh2?>o0Hy6VaLA(Yc}VIW*K{@rmfgdPVq3teSFkUMY}*aN(U`ay-Mm$ris z18)V*@Qbpy-uLe=*};B)pVa#I27VXhLkAcIUUhQd$H1LVz^6sSWJ|L({KlXGXmvhI^lam^@e+kSB_GdPLd;uO8oF@l8XCSw_4;L5F)3gEpyWu+_J@YQ5kU!2q0z1P0xfaV*sza9Q5nD5&ZNkk~ zU6AEmj@g#|c<_4EIlmG`L5A)fm!8GFb@^*x%2XYHdov(T3Rb-iKGl3C0uz-a3 xbr^oQ%K2pZzS5w$a)Yu~3g=l^F$?Pj!>+?enE}=Re|qrlk8+ahzW-k{@NdyaElL0Y literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Threading.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..80023959f65698fb579fe89af12caabeb820ae56 GIT binary patch literal 6656 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 O|11S{J(m9$f&T(5s*ec( literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Xml.ReaderWriter.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Xml.ReaderWriter.dll new file mode 100644 index 0000000000000000000000000000000000000000..28a3b62a6ac8dfab584e55441ca7c9698f29e594 GIT binary patch literal 6144 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 E8)S@cuK)l5 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Facades/System.Xml.XDocument.dll b/external/binary-reference-assemblies/v4.5/Facades/System.Xml.XDocument.dll new file mode 100644 index 0000000000000000000000000000000000000000..3555b3864f9714c517ee9ff491dea74b22c6a5ff GIT binary patch literal 6144 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/I18N.MidEast.dll b/external/binary-reference-assemblies/v4.5/I18N.MidEast.dll new file mode 100644 index 0000000000000000000000000000000000000000..160e210de4b7f4cd6d0d500cc13fb5cba53614c7 GIT binary patch literal 10752 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 I|Bnd#7uf@zfB*mh literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/I18N.Other.dll b/external/binary-reference-assemblies/v4.5/I18N.Other.dll new file mode 100644 index 0000000000000000000000000000000000000000..6e93690efede02c8c1720b320eabe4da76fb09c2 GIT binary patch literal 12800 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/I18N.Rare.dll b/external/binary-reference-assemblies/v4.5/I18N.Rare.dll new file mode 100644 index 0000000000000000000000000000000000000000..1721bc53c8477117802b038dd052b4ab617ff087 GIT binary patch literal 17408 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 z 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 Tf1oxJCU|%D7u*hC(B}U??v68x literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/IBM.Data.DB2.dll b/external/binary-reference-assemblies/v4.5/IBM.Data.DB2.dll new file mode 100644 index 0000000000000000000000000000000000000000..240a75c5e1570856e496ae7bcbd91a344194d6f0 GIT binary patch literal 35328 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Microsoft.Build.Engine.dll b/external/binary-reference-assemblies/v4.5/Microsoft.Build.Engine.dll new file mode 100644 index 0000000000000000000000000000000000000000..f8ddccee66634cb35586c00b92b28bcacf359190 GIT binary patch literal 74240 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Microsoft.Build.Utilities.v4.0.dll b/external/binary-reference-assemblies/v4.5/Microsoft.Build.Utilities.v4.0.dll new file mode 100644 index 0000000000000000000000000000000000000000..a8728d37885c4c3fb3bac9baf2144018eca151bc GIT binary patch literal 30208 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 XDOGO;x2;TQFx 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 U+TWI3Q2T$+^#5=1|GozPAKC?Z7XSbN literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Microsoft.Build.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Microsoft.Build.dll.REMOVED.git-id new file mode 100644 index 0000000000..d75a39c116 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Microsoft.Build.dll.REMOVED.git-id @@ -0,0 +1 @@ +8aab53eadb61b8614b222f4a7c8003e3f3f39f11 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Microsoft.CSharp.dll b/external/binary-reference-assemblies/v4.5/Microsoft.CSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..187c87b384e0bbbb88597c4d4cbd0060ab0d55b6 GIT binary patch literal 18432 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 MV1@tu`V3m&Kl5b&NdN!< literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Microsoft.Web.Infrastructure.dll b/external/binary-reference-assemblies/v4.5/Microsoft.Web.Infrastructure.dll new file mode 100644 index 0000000000000000000000000000000000000000..48fb70bab08659258a8d9b0b2865fd6b1f492182 GIT binary patch literal 13312 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.C5.dll b/external/binary-reference-assemblies/v4.5/Mono.C5.dll new file mode 100644 index 0000000000000000000000000000000000000000..4c10dd2ab19dd0d35a8c3921872d56e140a1cc0c GIT binary patch literal 94208 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 URnpuOj`?rY=KpEx|1$~vAFq&PNB{r; literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.CSharp.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Mono.CSharp.dll.REMOVED.git-id new file mode 100644 index 0000000000..cb88928c76 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Mono.CSharp.dll.REMOVED.git-id @@ -0,0 +1 @@ +aa939bc7d394f15a9d8fea6b41b70574ad74ca82 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Mono.Cairo.dll b/external/binary-reference-assemblies/v4.5/Mono.Cairo.dll new file mode 100644 index 0000000000000000000000000000000000000000..edd1fd76b9bbd3c4b66ad8accefe615db019cd5f GIT binary patch literal 47104 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 OW;p-9_y13p!2bhM!S2Wa literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Cecil.Mdb.dll b/external/binary-reference-assemblies/v4.5/Mono.Cecil.Mdb.dll new file mode 100644 index 0000000000000000000000000000000000000000..70fcbf6c9549c80710b2241071e0ca5f88761faa GIT binary patch literal 19456 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Cecil.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Mono.Cecil.dll.REMOVED.git-id new file mode 100644 index 0000000000..3bc155a792 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Mono.Cecil.dll.REMOVED.git-id @@ -0,0 +1 @@ +17bc1033ac1b7989014fc883d6ddceaec77df03c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Mono.CodeContracts.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Mono.CodeContracts.dll.REMOVED.git-id new file mode 100644 index 0000000000..50b2894093 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Mono.CodeContracts.dll.REMOVED.git-id @@ -0,0 +1 @@ +678ff49d59fedeb7fdcd30ad656993ed2777bf02 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Mono.CompilerServices.SymbolWriter.dll b/external/binary-reference-assemblies/v4.5/Mono.CompilerServices.SymbolWriter.dll new file mode 100644 index 0000000000000000000000000000000000000000..74ea0b404d05686875833600d1e59902af937a2a GIT binary patch literal 24064 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Data.Sqlite.dll b/external/binary-reference-assemblies/v4.5/Mono.Data.Sqlite.dll new file mode 100644 index 0000000000000000000000000000000000000000..390ee3dc6eabdbfe4fa5040e480038368881d209 GIT binary patch literal 55808 zcmeIb34B!5`8WRDJDD&EWK5!jAc+jgBq0ld5Fms-5S9qYl7M^TB$>cSmYHMv(5VfxT)unEAw`x_~>r(OkKF_)L+&cl({@yOW|Ia@#&pqGg zdCqdr@|@?Kd*;skqs}1@5vAbs)mKEf2gnm8gf!IIvH-5S$?crg!8}l9>*0ekl z4|I0LmUV?z23kYWXe<$E2?x5mqk%{?P`{uturk&buFS|t4_ZktoJlm#Fq1NRk<4NJ z4Ij~yU|XW!eT;B`)eL;5sW4<*ZvL~c6oA}{|9rr6G$N`@gx4m3cRm3EnfqRW9GLOd5^1FX1@KmFhJB}gRi+>|4LTV#pnLx!oROPE%mj!OP;BY zAGvGQ#>-wQPaIh^^t~gxiq5|5%9roHaMN{JSIjIv;l$s+^6Hy^Kie~R;itw)p@Y}` zqPOCR*P4zA4!qg-)b4=!D{t@-ZN zS8l64<$-rT`T4sWFW>Wv?|t=b_V@3LOm94Nx*>f;)!FJXm7^-FM^#tVa-qG{0eXLk zsPJT>F)c)&)*;-O=!!&_#aW}`TGeiaOB!hm!stCzID1J$J+Ae@3r7J@?}#C){GqF5 z9^QP*&@=?-bEBGaRNZl6)A7kclkI_Qatcv8@JM`Eb}l|V?l@W+J_GSN4xgXmgDCQ0 z**q(Z=vE(pv5w_Lsg&W%1s&lV=S!s)gwv_pcM`%g(m8x;I){Iqeph-rjqHDt4^q%n zda*xCM-4d1=ciu|xGUXH_kyO<`vblhkV@xeu=JXY+cVPXL7_+ZPx58cRsI|OsZ@~3 zsr^qDr*nGtCE2NTNA`W7f6X=yOr_v~T%Pel7YZ#Mm`i@zK5)lCKRqpUcn*gr2;Cs` zM?$v?y-VnuLbC_4X0gzzpsBQe5T}1;?$2{m>0wYmjTy}R`GeaA`>6+EKb9i{E_6$E=oX7m9@;=H-rGEKb=7J!nIa%oA!#SK;$~7>&lxtv2Dc9R1 zp__%1Q^x!+%b4GaXE;DXtk`lS)g3w%4%c z)*4Rj_F4|-PvG{NJBjP<>Zxsm(JO>LDfDBZ{%OoF5jtJyvC~+8)iloi2h+H&Zk+aq zX{q$C(9ebL5&pnBmKN1<3e$xiD|B_;M|t-dr(=Yr(#3VZ!qv7bJVJYnOq7l2d4$oU zfwBY*m%g7#Ln)VDqT$l(GpPzFlS-){bTVn7h1kMo(lQJ2ILf463vt?+bg_l{3))FH z(OtcmeD|;NW8@o?|U>&Zg?3`mC<6MlPpv(vMm;xV{m>yvCuq0zqQap zK~Dg^NiEa_#Y}n)Xspq0p^pU}PfHB0Yp;1T>Usq&HN4O~7{=v!T1m$s71T9kwMHi$ zYxF`kSu|JCX_CWSpf~Acx>C>)f_`A3;{}}w#P!)D@y-GAAE=SJO+9%F{s4)7A8fVGPTpw}4g}*U_7j`{zJ!(vRtVLFt~G zsmQojP$uO9y+rrZ7q|zs9MJP<1=IAPWK&^kpQk72Ad_opK4iDhQ#8=z+Wj8Tn?Qq1 z?szMJs*GnXbb^J3i0mv24V8F5l6cQjp`h)8UIa?Rz3&2=Y`h9YKz{~$p5CA$vp>)q zD9dEyZ#2#H0KF$A`w*xX=rhs$m}Vl)Od6DOGYvHM&@4e!K<}U*MI_BSpy$!=&Jo!n zput9#aUohYlUhY~ka4BiV;n^7f^v)>i|hoTb;cm$LqS_C^qIM|=cbetTH14m(EEh` zN$5*L|0eV^p&oAvE$YbvUD^{6Izs4dq3uF93%y?G?Lr?E`jSv1mE&d#9V)b1XoJw> zh4u=)Lg?*69~1hnP@^BGaEQ<

u>DBeX+kkI>77{zm9?pay*bnnDB8YC*HoI6Ne6 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Debugger.Soft.dll b/external/binary-reference-assemblies/v4.5/Mono.Debugger.Soft.dll new file mode 100644 index 0000000000000000000000000000000000000000..21181cf86090b2d390164a113a5b5843fff74e0a GIT binary patch literal 74752 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 bNNy~+^J6B0KL7uO#+r{A@Bh<1Egtwcb)pj3 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Messaging.RabbitMQ.dll b/external/binary-reference-assemblies/v4.5/Mono.Messaging.RabbitMQ.dll new file mode 100644 index 0000000000000000000000000000000000000000..fb689c77287f4d910ab0ac9e252dbcb1cae0b18d GIT binary patch literal 20480 zcmeHv3wT@AmF_xnEX$HD+p;Ccd4Nok;s6l|PMSbMiEJy0h~+qz>=4poWa-2fktJJ? zBn}L*38i$}4x~^@Q*I$G(z-YN6Z_V&^Yoy@=1 zdFc2-GThtJ%=cX-=Ra$$z4qQ~uf6x$`|Kkta^hFfY2yaN>8Pm&aYep9H?ZS_d8j>*~#=( zLhly(0B9#26-lRy%Pb0h4rr%CuA?qDz2Wjy+Ub2&x7ppayoyV>teSIOA$Wt}w>?}w zH8eK3X|dos!KC1y3Em<2aKj7G`MJ;qDY}BV8ceBj7Hj&GZ4p{aX5t)ZR~@67C1WT}_`B z&Et|UPM;CZu5f)Rx{vzC{V=X?`~tyMf*pcAf*%yTMz8?fJbr`F`vpHI_%*?w3Z4*b zv~ih>1=k4n2<8MQ1aB3*SMW)}mjr($SX(9~2nGfF1#^P82!3Ah3BjX+FAKgY=$^$T zoG%ywE~B*IUcpZa-Xr)og3k#a6Qpw1Zx&oG*dsV3I3ak8;O7OuBKVBpOM<@^blSO` zg@P*uFSpO4W=hyAfN8r6n77xUPj0l=1HWKz1U_h=3;a6t6?)o!Ht>7)bD;SnXg1R? z?Tdg-6`WTqp`~I8bhHxIR4fCnl`vYd0y@^ZzFcuOBu`Xa44vmeEA(>3rNCcQtOdR$ z5~rgB^iszLV7p+w4=cC3uJj_L%ZKyDy;$KijvjIidgtogetOk4 z;+=1%z2(~N_3PXnG^=XDdydJut8Vr#G`UNwZt*TMx!$TfyzkSw{j;}M-Q_)3=eYKJ zN}OZ3>OSvzMw;Wgss~JNpW~*gM=jhfRZn=&*ERP!?yP#s!X2!7#(RODc3k0pFt`cY z=K79zsh&1L_g6jdZ8bHyk5-x-_mM21kQ`UIk1jFO4pkj#Sgmst^sI&ZwsNTIC9jdj z?R&+$M%TQFeq8ms_X8&PO4S?Q%M1>hzwxfsx#N{@RK4wOGr1F0iqGT}SM`yG636vf zxg!njMwwIxO@o^df0nq$>T;jK9ambaos&4Xg|V-*$Yey2rO!=Z;t24LeKRL)9;N zOWf1dTYNpH<`1j4S-77eU(`(d*Gb&l)mK~6D&4Au^SO8UVrITYZl{G??S9EyO55xn z@%5UTL++x5+v~pC*Jq~PgfdIqXWZ9XxQE<(E!=mIw#Cf%k4P(VZ@LxV6=oXM+-Tuu z*L>8%Ev<3-wwju4leoT`m%OF4YibnVm8RyNnp-T~zM92eBW;2{UUR!|o1rNq@od6HO2T!}ca^D`aQ&69-@-lUitO<1_2zI_(%$G#6+ zxMRMXP41s+{-^I_IyXVTt$AY-cfxmzCC%P=n}w@wyu;ueR6DQnfX?lw`r2j-Hyhk% z4NYpPJ-6{L>h`nXpUMKYFErdmSD4(3;Nm8Ctl_`W4wHMW;cnWgbG@~1HhiA;>f9cb z@&)>c$-M~fR+Br{a4#J&xz`%LNPnqw_o9^h=mDMkUhP{A_tWD#_iy07OyAVGC3SB# ze1*QNbN%4{ntrHrx7Yo9!vpk^&K(B#AZZ_tU{84;GC2C*bt}9N8=Ry)VsMi7sKFua zg2u;mPK(fAH91}lOWeu2)<%QVR<#nxE7y}oK5}^$d%v!8$17)hRy7_nIAww7NJEKR zJc+w-636RbNt4&Vr}R>8a_n_K%bm$9_4|@J(HFKfT{`X`{g%R|;5H zN?gzrG}CUPe$P6So1kIOM(@*lDaV!T(Y|k)+@E_o8=o<`1D+lWchGZ1*jXSv@d4uU4|AqtROJ8qFn_>Atc`N;;Z7R@)5UzT48c%$a5i+cuM2>pPxPW%``r zkuZ}cTcY3zj?wC?v^gql#B`a=GKFq3<(j^hYNaP@zSBt1MwEt{4H~UkqS23t&0mo5 z%%fr^`!%^XTC|a4MQyZ~B7hM|N;<}PZmF0>TX7~+i)$-RbH;FOB^QNo;xme?7S~ps zwEY=4j;~|1-uXhqM+KRFQRo*%eoW|NLcb>TYoI^rd=oU|7=1zVGBVA18JXt1j7)Q0 z#xZ(G@-mLm-#XudoNRBmRC)gy| zEVx*3nc&5OLBTK(yMMv0f^m_j1V@2OnOhP`%BK)3ZasbFL{5c`y&|jYR+KNdsT^i~@h@*$MoW zXAkg%XD?7oy}n`}=!*KAfz|b&0M4o34?I`s3k6rze+rUd{Q+R7Naj2427Q&t<02oa zzZa5yg16Um`FGcU3HYe!KP~tJk-uF3*O32n{UeNGp=Rxy^^ZgHyZWyKud3hKXrnoZ zH8z@ymf6s%3bb+_&_-vYoeG@=wBaP%1q@I%uobh?hVfAcTub%9AbFwL2DDK-@kv?- z(1y9(1YC!*ZL}U`D;PKPL5EScjV{O8lY;j~&7eDJ0q6+Oh8Hu7fSc%CV7HvUZU)+@ zht7vi6llX}TLSE*3nA$P+Gq>T`)nA0t&nU5+UQDJ0o+C_A^9NCMiX=~@Bpm_eirAq zHjJdpfcKyUHu@rLcac-609Gk3pj)W{)++TtkJ1QiQ04-C%Gto#$^zgV7xL7ZO~lhGMY5S}Afo2;@j<*I3G~DV z22zE{W(u1!=*#=Ha6S?*B!;Lxr^X8^q!~3)NM$n}YFZtHgtQ#$x_F|H&5h|S3N;Ft zT4HxLnvkLZ>vpe8rB#FL z%aN1%~Dv`_Pv)c>(mq!!1)JS25l)hBH z7*9tF#bhdbn&kd1>cC7Y(GE4A8qA>Ch85h*{tbn~$Ye=(HlNx(Srk`4p=aMg z+^;o#YN~1f)P!lx)eY8b$IyTY(`>N%UC*#3l}ToI<@?uVbHmg0FX~@9rDAwZ?QiX0 zF-6?Za?;Cci|1LVl+_|P^L6LcyqYP(yWQ=@FfIwS2nj}2AgzOAik(+ zF((@8>In7p_l0_*;Z0rr8$(+ux~aFPJ=7lwwr>b`g+$c0sbgz@Y-_j11=}}vZQ9Zq z>R2DL2s(Q!{Dm%jK!?9pze>A)vI=www zJ)y4lo~_+tZm@Ixrk-$YLqya=SHwbHrav|WqZ|4sD|80iLY<#FJ6XOO3V_MO% zFxnE^)ZZ5B?+LYs!hN9*Q8(m0A$Zr~q~2(#e~MqYD_GnS3U>5&hGH?esN_{nvDnYb zaD7)a*e>k}Yt?mgw?@&J7>enH6+K(~Bbz!xgzu_ov2;jHk07=rrYsbc$WXYnZkWM1 z(4J0Vgi=CVXk=O7uePMI2+3_In=eo*-;v6XWbWnIj75jyIW^g%CRA8XXi{!$gqOn}b+m|R znxxQl(QtfsYPdLjdA69#V6{o@QArnxb40-XFqF$?QhN|@(IJS-6porgHJsUrrB1gv zz$rYr?vuQ(<=)U5&t1%o|$^(X_1RQ7tu<4`O*o)ASL9tnJw% zb}c!=_kH5&@Cc3a?jcX%j+AT!;&6}VNSKvQYa5w7jbc-@gL>3Bb_84COf@G0T{AX> z0iEQfg=gHR-WUz%2Wk6of#N(4y5oqE!CWpr7A)ZVCIdxuOn_G^DxmMO#R43N{S%Ce zqmr!Vu3@z>luZ(1bTN$?5KpHEI2GHhA+aJ)83bP1iGh$*^MzDK;y6z=%&Q3 z;UOxH9UWJb=OMCP-+>_)woLi}r=(0DHs3P9taNN_M78p8zdkg@@4VVjn~H5>x2o=- zaFDydM>AaCEvi~qa;K^Kco402qg`=Jo=_&K6{J_9m2Hetq#9&Ane1mx9zbcefbnWl zGS@c5Gs!gEnp20fJJl(woLMi(%w=d!lSfsv){-&{Cs(gGZM|BE@fXhwJ6Vx92BG7- zi@8DUR<)27AHYUipA6zaokkmVDuUj}RL&R75GKRV@QmT!wqh#Ho7Jfi1fi~giA7Ph z&?kMqA)X&9NVPnejbdQ1_Dv|lc1z`m63YgMM@N`KpABR4H;FT}CW~WPQ_dMVD8;go zR63o?W4z0NA5;t2s2C3j#H=>y^PnWYvq%V*Y~c9L5+QVVZb=n}jJ>`d`Qd4(TMAw; zoIIWMs0BnSaRj=A3v1Vczd`4-Ic=a&dm5{VR+c1A3eFJ>p)Rdgc{CY?7(FmG0!^AB zmdGS?NqbTGU&FOvkU!BfzT^QhRBqvIJFMLMIe z3Y@LoSRy0~qM9}uM6qMqg26eaOF8Qd>jo>&AZBgE6TWp~m}4}gwvX}f5m99NV#DRk zAm##eu{cg!hh`G8Cc8rKbY@FSQ)#{8dS;TdzNJ4Ae_7HyWzpi?Q)R3tez(-TnRgYe zEJRf0dCt3tv2bR4mLv=^w2i?>8iB2P>G9SGF_Ny&kG8SND(lsPKGG}$tRrg#C$>r- z%*G^<(xw*ErS6LDp0Y;@7(-WF9w@B={M1<5N=;Eibd!diQc21(Y&@kViu+ILO4Tp5IbiaO(gC!!B#FRI~uD*>5 z4rFr$Z58Gfb~sfa3@SM%3U}+rKKc-w76#2jAqmDNrymjNtD+X_P^NYiB5a;QyHk7~ zH7Qt{n%4R(XHt0V)*dx1i-ESn$f6=GGeS4+rP!|(JSnhFilOa#{KQ?0oo1-i?30i+ zJs4uzP6=x>#I9*^%MzYu3PF>@&(ttu4KWf`rp#_*mK&X`A2-EPg|u4Qpz2#&geQFy zY@Qq7oWyv1DXAOBMIGw)IJPXobSj>op2`CdXJ^wB&~1E>Ha(#|tDmZslA;))*i*T3Fm=)NH{&ga&%Zq zcKX*$TEj?g#r*5UDuI5T+&X^z5bD%gl$os`oReDh!srX<9`?FLcud8A0 zu~AI{@(jt~B(#4K~~noOtpV7kmN$I~ZP|NK|=*@?C<@BPsO zH#9l6lFjb6*&Ste&l+6waLvY5j%y*VN}Jtgv(Kxrdp*^P#}7#zE-$X8GJD;8o869E zGpW-VKN7B_&|R$wdMdt3~98QyR##a|&TC3i`a z)oPa^&1fv&{R2>4iKZ9Nx&nB86h&$5z7g>6jim#ywH5WRz_n5=T?Q*xKpKZUPUDZv zWN9C4%)?h7VvLmM$7&LbL>FLvTm7YDZHGYsh9r*w%t>*EsEYuU@q~zFCdPb zAr?MXvM?eeFOS(i2pf4-2;kLq9CKzsY>wd1hRzVH?-<4$NualJUJBc0p4ET&{yy#c z^T{ZBme)-jV!lVdI;~B2S#1g+zQkc){7kX#o~hQAqThQn)=nF#zdF^z6hWftny0nXu9g=~di-On|6iZj-tB71Ps<$bXYv?7iLWp%JkzZEV~oF3_vfB1vbY!n zt_{mg{uHh&J#?|_PW_G68P^MvOjJ>_l(*W`wfD=OD3TH}BnaZjZuQbA>kM|IC*0jltLxk}G6)U4E{>W29? zT$d^*#ZfoE41ctO;uOz3w`VrDs+^%xELq4TKvCRixYUZ`95$zBx&xMTqGtX)51Z`q zyCth%nl#T-$3;YtTgq+%VMDsDZocNCQMuI>wcC6#7#p^M;gU_?xgct*8*T@g}G z#0?Ip^>V~5smvF-XISnTHK@8GmpmpNTUV5h)jD}pXi>9BYlY@4wXnj|;AV0a+vR4b zlgAIhNjFg?bE9ldExb$fJt5FGPaT^Uf;ZTExX)_g-UC!JEG%mwHxm&MvzcgO2!X>- z5W#aTa2mrf!y<^BoW7VrimGMG&xuRM@1cblz2k&G*&wpp0N{I~!DakCcm8ROG4E$~ z{qXrq{$j^3_5=#A|KP#z-S+y2n+l&g|FQ9d7wliYJ~GR`aQ!payNA9x9?gD#&1Fwr z_`C0pJ@=U#i?7;Wf9{5tx7Dnue%gK8Hv(^b|05e0?yBmZc`n>O$U!l3Dd^s^kAulWV zlj=_Va@5E$zGLGrsB!$Qbc;d@BnfXnhO-&J@e;|8cTYKd!6Ap&Tt$3Sm*y)pyCt#M z-xtUC^NM-DWa2OHWpjD_5|u&~`~yb#hu_jssK)#?qrkG2OD}@ZsZhC^S%P0H;@?EU z2Z(#ELaspILR6g%j1&jpU>?fjhwxh<_~R{nH2zue_&FDR&f;t_n{P`lKGK!Vgmx!X z`3@ky)P`>*D~^XQ>)%`VW9KD~idFyX?)tz_`y7w&`Cwnu@>f2}xwVhO_>*z4XEE*9 zc2&rm7fA2#l7mcN(P2~+78V?2Royg)s6o>+cJvbI zZ~ zGrDqrv+CfcyS?LSZtLWmJ%_&i<!pFR0oKh8en!8;$iZRL;SrSG;iRetxrBc6yC`+YmcZ1tZ%<$?Qu zzJ0?*Uw{ASqjvmm&En#<@4mBd&(0BxW{1BzTeG6)^R{wY#gvMvQ>IoP#S!OF4EV|+ zL=(;+YC4qY;<1p!>0~tCnPQKZ>do^uVR4w=fQ;Tl6Xq?huf_I5@NJ{PXU7t4?2Hdi zN72%8cWC*!ARlW}snl${FM^K8cL%<8Xv~kW@Z{3nBEOo?nimRQF32VCFvf|)rVPua<-=INdbs!t z9$(0Em*9nhcL;tUc&~S6UICp_lq$-l;vjp5#>^O#OZ9@w1lJ0FOYly?C&#=8pX_q> zJfxiEhVoO&bLs2lT*GCe-zNB|;A`a^TkcrK^0Ad;H&QLmK`w=%;o~)rmd|0oRzwBR zR6>RptXSA2=HrRJL_wNPlhB6Ds)SWC!&#dLb`;fEwiCdhmd@?6-D2awD!~pHTNPL} zW{x8@4d-Z~*zTgEv?cw^^lVzvpApA~#X@DsuEEUssk z;C~1v1kV!OEO?jT!-BsQd`pnBx$JnsD#0a!3BmP(-xa(|aF5^{g8KwZa=3;Gf-?kL z1Xl=d1m@_=#Xq9+wINHTqH>_wbs$5?~#0JT>N(LtdOW9`Xr!hdS}J z=1oDVcEOn7-W=APA@VxG3k5d_ZWi1kc!S`rK>O(S=1fD`JM$Rt2HN@^c~#Kt&0%~H zvaNqCZzeRm1)mZ8mEhhS*8du^Mla=YCci7kwJ&cLhFTfa^W;f!B%WEuMvt?-T1T57+P;PZ;=tU|#+-$fNUFGclj{I5nT^IWnK?oG;ia z8Y6!xG%NB?1g;VNx_qwfQYpJt@V5L`XztDD*mg>(XY$)1|3Pq{XbKCs)IkMY|B-_A zf=dNE1(QI#mCh(Q5v_5a;5P*?7raXFTEUwHZwG30cfm5?Bf#hRw39+0;C24KybVYXi0oI|Dv_!_IQ{e%i40*!x<+iv+I(+Ob_b?0i`F z<}ls@+16LlQfRI%VEnXltn-{+_`1ci#PiRkJk9gWyi>cp@WWDbg~#mMh5Jf*t}<=kLpiT7 za}Qbm5jLZpg#`hZJziK8;57z+cG52k{SM>E%3S7ov2a{~=Rf|e^Sn`bh|B2Dg@-%L ztcBMZ{NY*_22^%jz;BvR3wc`uSg^=vXHLG?P*{;S76>@D3Etj7nZu@fPY;Z8She>o zg|&K*Q`mCv`T&+p^4VEC?4spsI zRP?^Wjw-q^faSG(b{5tZeWb8+i#}17iIZf_Hj{mP-O+d!yV6$i+sUKhwUpmJup>aw<;{VcvNtjW6LfM1*bc# z5Vjc#3k9njR+M*o;An;2n!&aNzO2}O7?`QB8v@5DY)9Z&hmFVnsudOr&Q{o@V6DQY z1m`NOD#+J;{Mnf^zIb+UzDd9iL!Ap0778v@*rebhg-r>D6;>5otgzX^;~Z97{7&hK z3Tp_eEF3&Zv7Hz^*_0n#Wfc+jUZnMHqidO{_4)gg=Q`i@M zX9as4+flyt3R~p6Kw(keCBYSrXPlw1|$`x5-wSy)lBMPZF4TZ4R^%AcKuCzaf+u;nF}1Xr3S*jATpQrI~qdjhK* z+vO$CE9|Bce_*v^`$mrJ%Q?30o^6*g+*_TU=F^YD>(Dy(+oJ;75Q z+esrIP*@t}PIGK$p`6Pu9{F(abjNn>$j21+@Cbk4499lI$W02{mBC&ese1l#WR2qa z(a5KQUw3NB_dlz!Qva_NHo?Cs(C>Io^>0vEjemXcOvkp^e}Td}{o8|QIkwaNcPeZn zY-c;RE&g`{F1y|TlEUuu`xW-2|7E4zYyQ_2_E*@}I&~J6zOJx|rT)M32 zOD|AZcj>0UI>+Uw637&7+crBIXzszE<<#UF+j5FM2oZ*`sPtI_cafZ8$GyHPLlQZ09oZ*`t8)vx7 zIKy4W8GeQ1$rj5Bj5FM2oZ;VfYT*ob8E3f5IK#I(o}A$>;|#ySv2ljGj5GX3$Hp1% zGS2Xu92;l2%Q(Yb#u@H1&TyA;hP#Y2{CiHFoZ&9x48Pg2afZ8$Gu&mI;kP)RoZ&9x z4FA4k;|zBhXZWp-jWgV3oZ+`QHqLODafWYmY@FdXJCn)+S^n*|P2+sG*;>i>pIEks z3MU2D2W_^_!)peY@tWZt%X6KF*9`YMjMof1Y(~5ax=&#ZL6wDr_bav&gFkf`uY!K& zFkS`iR9Hh$W#Qn%itWVUqYmR$&|?nc^~)}Y@%rU)i=9nJ1YR$F!nUC$w6fh6+ex*7 zO@SvBmRF{-!m_88awE(3SnRd@hQPS8=NxuoV1mLDsMEEbr?9g>=WEzp-o&5tp+WkL)AMUd*ul&S6~c6{XHBzshPdY;}QGEl=|v z#OoH@&qM)%>;YbDz}s71e?nKWY+>_1pe&U z8iJPu-?P{zIxe`l%w;DBPbz!gu`Lh2Q2L)vIlcq(fo=2j2P0)Jy8!G%%VxI3$6y*Q zAI_Kn>XZ`s8o?U{Zx#IyMZQPm2M5SmxWmOyV%Sq7vutA?%O?IzO6?Ns3DE0g*1)oc zJEu14w8!zW^}jPUs9&RZME*$8oB+LU=}p1 za%n3tk8T5caQ~VpANQ{b&*b(2H9ByP;7_cE@_VrAxNFbnj`xx+b%)8`X9y0qR*C04U>5GqbIh#KaF3p` zPD+`$K;*E3iy`Z@R5Z3+M04=0cMhJyHsDEW4lN?S@;YAd8ek1ptBl(Pe=PWb;G=?1 z3O*+9m0E=jh=0!}6 zz#yFj97Cr9LwMrq#dDIYfRpGR;ACphy)=bB08XRtWqGNJmSuZsCY9!RX%=k*)>1>R z7f+i10BoS^^SsnVGd*5vq20jaD4y@7lc=b`OQ+zujh8woHq49HM8*#H;w^@qz#fVf zdMQm~yPcLPtOuZ{3hKYapROIH_p=^J!(v6n8O9|A9?u+K}E(qDm_>ADgxT}_Ke zdgyu@?)T7*R1Ca@N`c#GH1G}z0q>%TztL6sH!xMWTwWE%+kINtkpQ?I&CemK|2@Nq+JAT(KZ54l2WH=n;~~--vY*@Y>(*E zQrl@7$K0=Rgli>|Z)hCh1>$qDcDP@sTeNGTnWb|)wK~UBr}JJKbdID+=h#|wj`=v9 zqdH0FI4>3bW|6NJ&n@C}qiAjs>o(EcC7OH0=YD9sv|GO(_>BHE@K^egc%t-c{pY0> zG@7m(RY4O34;7qBKY`}U^h;n3?E}uI^3fF(rbB=y(y_pH`YLcaH33tCr_vJ0XN%AI z6oqmFs?T9@8*?3^VJA!{Ldl>rCQNI9Ij@k{JIf^~!jN-kA zN3k_Bifc%Y+5L?gK`%m{AoYBA6vuzJ;Nw#EFWM{6JTvM|;9k+cDYgAY z%I1&eI(?)0=t85p1r8p~dz>-)55PLX<3-asnqxR)G}nKz;B|uLv2Pdof9Fx(BQ5jO z(eI&Uc8&fEaIdt+`+_uv`=Mvd-+;wqxNYx|_ADK9X_*JTSVuok0r`!&EcE_dpa&x{ z_y1lX+jF4tXt|K`fx2XchYIjsV-fM&jXLszvt}$ZO-F7N0uRAkNIF%(SEIv$I_405 zU!xMJ(-GtcPQ_bAI%btJ=%)j9JOv*OoPjrhFz*6&y!kW^^3gyYqr!OLOpF&g-hrA3 z{V_nDj>Y>^8s?%eL9V8QfwSpQXlj5uW~ak|a}b3_bAdYEsHz0kVgDN5h?)v{HTJJj zA5fbI)M*pmLD1-OppH54c*s`(b-X)uBJe8u58&0*3j7vDVEr~wr|)3&)M*Re z#lq?esMEF73Hdspj`=eR`MW@!wqk_U=mwyU8MPaD6W;gJv5Hs$yjgn9E$AZ}eIKaP zt+WdAZ9pBfZXa+vT2Z6hfja#Ft*BuhJ{|H8(TW<~3DoIFXhjV(^O=x;j8??^9YCFa zf>zWpSDypAcE~!OjeY^tG234bc^6Qp$I)gQJpt4)|6c|9NuW+oq0KaU8mMDM@Eyo|fI9sWZKl(+ zXe|wEgzF$bht|^Qd7w@&ptUrt8g78R7p;Xiaez9#h}OcJK0uv*i`LTVWwet{ze5Y@ z^a|QWqgR1Cy@s~Y>2;0{I=f7xEu~I{gtXq+>nu z0Ps&}6`lT!_R#4)w1kEg%EOTV6D@&vf`B^x1udat&9V!ckAOOTj5g5duRtBEm?t6s z9jMbMXakM*0d*{Y_dwQw7%jACA!h+~%F~_$j@4cOj??x6L)weL@!D^JU(kLBoT9x7 zJX(7l_+{-);7sjp%I-Jc8pSk<+VC9}1ZFd}K3hkx7|UX&ZYHku_zKR0@uL*;aVf@* zQq0h$tj3u14cYpz|8C2q8*qlx&O)$K+P3sjTr>q+x#=RIA~_NHWFWwgUc zawIe--p)2SRmVCL$!NN(ThTQeD|(|zql4-qsV>){-Z?V6F0xd{oOo}yk&L7hNk=6y zwj?9*R7AqcG&qdRN{!i(6xvUk&S*+TIi^0FOI6~~(v>tK9ZMt8wAnONo$8CXHyf$m zSXvyKjdmlt(oodYWEjg;ZtY}XeBpE?-J8nTr4qfgnpIMj7sn$jBhgr-EoQjwZu+4I z*zLsKgWHDthhud8C6s1knSnFhZqUj|tk-C574IcRGR3EoOLE_c#L+5{QFBLcd)m_X z^d+O6U1^%T+V-EjdTumk*lbD4l~jFGZ(A(dKHunTNh~+wXv~z+-4^SsudG_&kj7|x zGLcFwOSgVC+@6f~q=&F9iKcoZv2eP#BbwNcxpk@0Hk3=a)<{J=BdEly(W>2McpvMeW|q3?O09PS{q462I(Zo zL0TkBJI-%k*hsF7wsWFeEooPkjI5FYVMukWdFTTRIq?rP3_4tEFV^1CH4ws}7}R#R z3M`GrI})o>t#cE}?m_-Xv`!hYW3-ylI<x}Kw25Sm68JuW*yuqxsK{&GK%yio7;6(xAQ5fHR4f>s%eX;JJlt6po*t?{4hFDA8g7<6^WT0M~)#wZ|eb=b?0eLOah%c^ zI;lMom!JK_`L{nSFbq;HdN2B9+E}wDLeBVu__`wTPJ^0L5k7y|u0ShMI2EIC8mDUo zZ)PXs9lWha9oRHtK*6RtkwBE~N8me+W+yuOXrau0I8}|2c53W60^e!)PN#5Jgd&*} zx58!Kj&yWK|6HXI0krDH_8ag63hMzV_fg~T>-Li6&%AYo4Y z^LnElXmPA1ViG(e=@{4-6-BtOyW7C;fOw9ej%a5zjbYyDnV78xts-y|jkru%T^Wl9 z>^7R38%?It^>L+FLfH@*sKaz>#Hia`49G$B*eimh(Vkd|l?LWpLhtIq^2;z!07ewF zY>kmj^Ep7PlBvNFnu0wAf~Dn*q!PW!b_3_XD~gOy<7~AgX4}I+2eD5W6Ru@(dp+UA z+p8MXt}t^AVaC&&GOFEk%yT$2wdnN?MmlXI9VaF2;qX<&6pzFlE1IgEXO1Waj~F@? zuga?1&;$!GW~2AkVcr+ONyI926@OW@%sA#gabbbYyclxUn0DT}iZq!kEHbmS!eksk zgcn+TeCUxZDr+!BjHcYW>QhS++{tjJtlF9}YN1gp*azyQGhME*Pqwr*k0@A9$J&sF zm@}}m8k-rI`P+D8=-`!dcN8tzLG^Kry^$D3tPUJsyhCQ%-gKfHJ8!2jC_-p9dQc9& z%aFQeO7ec9SiVPi(bZ!ukEwA^I9xrie!;xfrsjo9>TBmTx6Yq)JT+I(o?YM4+PJ8- zrlC3mL*2q~ z3!LUwFK%d|rsn!3)h%;c!!6C!o$91z-D!*|xH@QxV9vuF6X~l?BP-i_QAq{oHqDJi zI#aIF8hB+TNr|?vVE{lAr@In%GT?GOZmi;~2TJhlg00ez(Xl$BNUjt&rJ`45$xAd| z+E{4TFWsWq9Py3S(KN0|WL$5LMN%ml${cB7vN{%xq$q(gFiAa;bQf*`M5v9ds^%H# z7M>0GvVuB|bgT3NtM1eQ?p{3A$5&zY;;4kOVyip z8AAC$%t6b{E3@sa+>-j0F^or4oCgfEM$Zm2-bj2Y*6L=_ z8nhZNKl`L&he#1=Q5mM0V&&9_i5a7xz0}|x4c4-+JD@t(vFtpAn!PcA^M)rOtQMoo z`kZ}QDlGlZHeu+(yv2Ku^6_T;9p&KJ`##<#9yA|73XWV8Bzy{j~=?rRO9 zJal4x8s}g!M{+=}uUi3Etn?`4Giw$Pm|wW`Kpp$Z39>?DAL;6{4x})~SD8cvX7{1_ zcuJYwhjqNNrm)VE*d003MY5F3A`d%cD;oR!LTQWhoK#Y7GekN%S~DlJr1bIuN_MmA zac3sWbC8}7Zb)V3j<|`Givx2Y9731rCo4x$4Y7LUR<0gGFaFBPQv4Jyc4f6GJaeHb zMKV?5rKGW$0!m^JT!Ts-Zh?X30re?nw{3t!u& zxoD<_OJ{aF(?{*A>@(Zs0mu3Jg@Tr#mLOciGr^D82YQi)-<6 z7~3-M)v-NO!#?#xt-wvg;8i&58)PNUm6;OjtZB_T2N`3(L)a6!?4waks%mqAq zs2cX+oE*5UA4==`S|hqy&|dUgW^>^$BxCW<8XovFE&w>>K}y#X;_1%n zR#?iYY)-u9G%q!{&Z>#)!6==Xo-*^&;FEhAyI1f}?-fnNRYgIIs55kt~5UVDe zh7Dd$@pVZbR@Mos=`z}vTNOthK0E9Vjr>aF)LKLs$dsq^tPwF zL~knAC#CC^iw<_RIw;L^<_(#)oEl`oNci(BW@-Bh0PgmMHy5?#8fW=xF5zrFR#mA) zY^B`UCrO5ic3FyZ2z9*BXQAF%?4zkfi>=utb5`J+=JHi$aC-rWt-EBjSAXvK zj0Lp1qO%uo*qRGBXPsuYhpd+duf)*Z2dt@vSU3$@G%0H%`#h`bA|-jSq#3w$QI{

m@?1F<;~D0=^Dy}=FDH2Ggam+rA#koXHgUx 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 AbpQYW literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Security.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Mono.Security.dll.REMOVED.git-id new file mode 100644 index 0000000000..df128266fa --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Mono.Security.dll.REMOVED.git-id @@ -0,0 +1 @@ +751d9bcaa363b072ae4163773e13e8bafcdc05cb \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Mono.Simd.dll b/external/binary-reference-assemblies/v4.5/Mono.Simd.dll new file mode 100644 index 0000000000000000000000000000000000000000..ee336021e5920c9acedf052dee802a4961587814 GIT binary patch literal 38912 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.Tasklets.dll b/external/binary-reference-assemblies/v4.5/Mono.Tasklets.dll new file mode 100644 index 0000000000000000000000000000000000000000..d40fb351ea577eb9330fbacf0c332c332b331388 GIT binary patch literal 9728 zcmeHMdu$ZP8UOBKb3D8lu#uyZa9{`~M2F4U1u7B@90nT>4xeMUG|I7eH$FDLyFKmh zVINJ%B{h#kGzujlBq9|dfRLJ`DT3glrb$REm6T^9Aw*P)+NPl>B~evXBBG+dnS1%p z2KPaX|H$6$Z|3{vo7vxf^Uciej(hcUWFaCe&Koy~dXVy?Uf``EiDGHuQHc%>KRKz# zwEX0xmbHp*k7;U1lOy(k9F3}m-Oub=JZe{>cGpU;J)#DgqoicSlyuXc#YD?Z=DZ7C zBJ-q?CL7UYsMAG{)FW@lxdta^XGelE&YK^Zl#&qAbu3iBk*HMsb7@-Sm2i~S6DD(eYJk@WN4|!<|@`xU)T=Gz(3+YbC2g)HY46A-_jKd6*HuwugL|>Vl zG(P1!F7xKAa7s8i7w%JBj;5tkE~otbxiys*(>BXKOEDc2_;-PKTe)Vs)nzTFR)MPZ zht`R-1I-uHKI;ekGU;~sohMDDGyg2?X`_;Z236L>{niHWy%pTKznR|;eTHwt`S;A;Yp2s|n9s=y*M zZ=q7)Jb^6&HGvxi?h$xc;0b}31b!*dYT+$R68NCNH9!+RVG(YEC!VZ$-J+JI{7tlj zj$69&q{qw9r{dToEHm|fO=nRrBmKp6At#k?qd!`@Gi8u2TekF){$}}68Si%-D7$Xi zURIoy%+_6HB6cuaY@!iXwQOXn4AN-pYrUj$>w&UV6m?_5HqjQKnYN1j69s6dgBCO9 z^`5MrYj~{;S`ih)iF;x?aAkQ7aCP}yV641R=p{tRFvPA6AuS<(7XV9X3$ToS0j!|k z0w>UCKs)^tIE99pBt%vf@P6t6R+HZ>Q7w(PNHm8&0?wnStP<7Jgd&Mt)B{{ftBWOC zPNl;n^3VZb3(d1h^j*3De3%{^F3}pQ9U)PW&I8xdGb1I8<5{C5iqUzXLC=&()J6A7 z5Psgal*O$fb5Lu&y;K;TWT1we2qudm9Bi1mj&XQVkGjlZl>#U z2=lkES@!!C!@Vk7zDU)=N{)s%p&KlcElr6&mu$#=bb@3bt)j7jp=t>))7B{gruQ+> zMz`&x29-{V$L9&K5-6Ny^0!@<>3k)pt{Hq4X(I=>!Zo#Q&`0z@YFy>bX^vo+KU#T8O5Imn5#TAcT}Nu?-GJ0^EV>u`o4#VCSY6cf80 zCtMD>A!oV>CK3F2RXbJ=8EJ^(NJB8TQzPVd(je=ouAwA=G>#mj>M97+VbqFZjTAHz zhnbyn&CAdjSY}j|>m(Sb*mBnQ@EhQw6X>KGnu~l5&4x4!rvpX=x zUd}P|h;gRiX|}&!z60EL=eT*%uK|oDKJE?7BSVDYp&UcEh&&ymJp_(?Rd7%w&wyjAp#Sqnk_V$oO^+#k(B`WFo|9kB_v_7{DR2MN#(>^@ zvydBK#e?u+C)OkfHHi6&ubhJwqXWFH4Y*p)y6tal1Fql&t0jM1=Cgf&9^-G~by6QyE{%Qr~6x16b;##NdY4*TeG;`17rs`Lh9j=HI&*raV4y zI|gas4(Qp}^QY$gg^s_1@h^C(PfmrOt#Tjy_~)y^m}c-5(j@j&tz?pmQADP(B^5TZ*eYzLV@puXMXTLp<6yESck?ZFYm%^4giThy9|*bGyP$^e`|$0= zMEOgdAD#KmvmIB~JB-U`e|BQ~<&Ae4FU&ZUeD(fqwM*RA;wei$*dVQaFX>fJ&zt|N znb(ddPQBC}|Frn>si%Jb{n2$L?@Qa?bzD8YdD)cCQJyD1xneB&*M+a9{b2INCFgEj zaqTenUb}v}`>aQ?ZBJIY-}%_raPr33SKsOS^B2UbZI9 zSW%DEp2`Y+sH K8!m(8fqw(#=+c$| literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/Mono.WebBrowser.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/Mono.WebBrowser.dll.REMOVED.git-id new file mode 100644 index 0000000000..3a5210aa92 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/Mono.WebBrowser.dll.REMOVED.git-id @@ -0,0 +1 @@ +05db7a0baa8b8ead1da627f56eabe6784aa5688c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/Mono.XBuild.Tasks.dll b/external/binary-reference-assemblies/v4.5/Mono.XBuild.Tasks.dll new file mode 100644 index 0000000000000000000000000000000000000000..87f7c9c32c4fe627f66b7ee21c41c238b1be63fc GIT binary patch literal 16384 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%0D;QrIubsJZQ-StA; zGB-EO6$eP*bPw8`lK z+YR|tr}pLgl1v+oEW~*5p^w{iS6VML$|vL(CL-`%_KelePj0#4&X|rll<_2b35Y~_ zBMgrZlfsjxX6brd_SDLD0ekhjIk<*~P4itiP8hD|Arg}+L0++pMwrT^#>Qk)y+G)- zeX?Aq(O__aEQd87l2i?rUAZVwXzASS->H35PpO7RbMh=cC&#iR- z&Vb=jxt`;ajkSS_8oBJXKM*uCrYWkF^obzYn`ozxVRSCQAvf1Gs2+Tbcsa=Qog*}x zUY89##Ihh`g+xeyb{hfvUQmSYhk#Xj0gzg%syH85A%*^gnB8Mq-7MT{w8?b=;;}j9 z_atzigsbRe&manyU6b^!v95vc1x7dv4JwRgU|pk;>mH6{)O1LOjr9?;!|cJOgFN4! zspkg!66);9Ygf|dbkL##Gb4E!ECSvI%jj_BgNiAxD{+je+$QK6fN*9=F4>tHe=1cx zh_arN%zY`$DVridgWY$#ps61RllE{?13EXm2=j6m@6OFHa+;w>9Zg7PfwpGEIx8M? z+h4r_aqL}M;3PLKLq_*3fo_ZsKEtX_=@9cw5!g4wGJUAWT<9WmwZ8X7XpWvgrVu^X zDzWo{6--H9{8qs8>bs=L`mnF(k{FcOfc|EJIPp2Skv47!b=7+iS|R-&wnDN^vMmFK zut=Ixfwe;}84(mmr{DCP6(#y6QJX8;VYt?9N*2eTDk<_*}hB&znlf+tJ-)d?m25iSk=Q^_#bbQs$y$VKt%MPN?q(O*N@pr@)O}lFhA2hMhUbbb9TQCuyX~ zDw3jlPDc5vmRYH_3FGz`-N@@wR}XRlatT#(@#8|LyMjVzZ_GThq)Bb!dUbT#r>T>+ z8e1S7;W;X-o1#R9#YIhnb)3^;O|ep=Gizh|G|#e=y?~D|H{c6(xRo{AY-eMjw?lC_ z9vzb2aMtolZ1W>H>|xZ@@$Dge$V9Giux-*kquT&Ok=4Si^7a}J35HWp&rxiF&$<^N}YAeCMZ_?>3xj@^fKGsq@#@-13+>%4gd83n!@kFWqDRoXP9lW)eHbSO3l4m> zi}IE*$z@lo89HC|>)9Y(&0&bdabYUMIZbb!#bit{uEaK*mxPlg%2yrr#iNO$KSFN3 zG}A6*g9W?7u4{?tHJywQ8zv(_Lm;!)2)+4|)kYRjeRYA7oXLRjOl(}`;z}E(o@_=0 zhpcDc99|>o8$wQ6djjj-qK+{04!48aT3r`5CQ7D)6eW7~w6SjxHLVecm6Bi%Zr)M_ z?wX+O(loj`>eGh>2Aw-mGIs;aEYdS9#StWZfIa;&!e)O#HQGTiD1$6FY$Q?xhZKt= z!h;-4bPVQ?UU!N!_^C8-6Wl*ZOU;+9M0Hj2dP*p+vYcxyaV*Z4fI;vD6Mc4(2=|qw zy|J?QXL@sG@5;o;v_vZxE^{3Z$75oiTpb~E?;cZQ=p#}^T7jL_?2n!OrhC6E#o4>Q zlm(deIQSc`PF+Lz3N61bC=-dFJb{gWU)b2B=~5(;Z;P0g8s_u_uS%<;SgYV*?K@5x zaP+9Wndw$3A4z~?sf^LyIBOZ=w+mH`Jk@~{gXeReMkqNhvj5?>-TOIhY7izj#A0Qp zq|}`%Pvt*lM=pbL8;jk>$}m2OB0DzMMp3T!@GUp&yksDf5&FtU&Xxzu;Gduz)^9GC zxKt&~H$sw$`IYryxP+IlwJUFsZ?_bk+2z)blBsKlJ{~>mm_I(PEPp4<~WaunAIC3Uy_Ud!Lj z@*~j2@^_WUl_h?EpPoHEog~i#Ouk!kZWXuzaPD9V_XwUlTLjZ2YMa0wz{>56KOner zJ4*73a3ASDAB1U;Ngtex?&{S?BB_ft9boyTP3P7MRI`X$=0qcVtvrC7o$=}_vC_#| zA{{JHkWr%KcPED7*V*KC)C?69 z_dU!SRMm)%s)Y(4LI;MCr3$=B;R+eQ_JHdg#Na{>h`SzDI2dFI63s(&8}7tnh=_wH z)rTO#Jr`o|H3`KU>)J|xf`Il8!>r zrKm=!8c7Ak_?0@;48Kx0TCKRa3bHaa6Tf07mBc61Q3k-CB_tkX7F2ir!;kFqe(O8Ju6r((R!V0A~q3mKb1fQIPTkQ_^O&jVFLy80%beyVzHt9axX#R(4T93LGqx@35MzN;>c~T3U?PihIAWrt?t8 zIC?;OqlW#|2ubX}rOprjzp3*ubpprf`z#~X?*4CB#!vS5-QQpL8vM2*KGuX@##f6F zYWv>4{$Hr?Mth16!|y&O@L%iq*6e>_j$NIs*=)|U2!2uW`$qYHp>8)M>sEu&#P?S? z?-TGN|0Olto~+>vS{|O%!S*7szJ>5rbHM8HUj!pQLmmI$QtJ))EH!#l78&u)_5Y!I z{p9*{Sq(;3)=hjM{lBG7o7{C82LBR5{X+jOwY%Zq+9kc;e`bdKq^JJ%!8MG)>SQkC z*)~FWh6L7z?U(Ekr1t+M_1=7Ny=7Ok)XePvk~(htu{w&a{?}QR?I&08gH}s9EsMARz8;g4c&Ssv|F+uw|6zYW zKAvZuz{SNjxXD;<;y==L$wQ2E-H#u%<*opqedl3Y4%Q)Y7s*Iyr*L4W7PoI{4ZudEqB_VgCs?gIi^f&x4y~pCy1_aF*Xz_25V1C6p$RF3?#= zNGwwO)Cz%#0Qn_WUr<1Pv(|T-0RA~P{06kZ3W1dZ9%e&oAAVpKfYd$}6u=L?QVi%J zp`h~hl^hcV5UG44B{WH3DrNWuSYIJSsHIP#mcA}Ry9#s@=q}J(ppQU50sd|*{hQv^;Gs1pbY)C)8SGzx?TngkXK zEE0$aoG!3fKpqzOS_Gm3O9ajoI9Fhmz-ob?3#<`1PhhRU`2rURTqtm{zjbVBxIy4Xfz1N<32YbmmB6nB?iYAK;5Pyf z3hWYiPT+Zg7X)A1z!1o+Pk*csEROr&e=U@XZA8MrxeBPk|WlzhFU;N zL`0!lt%;Dd(r6P&#D^vrF;rQ?auN4zYUBa6hH6Sej6{4R(FYQF!7DK_K`u&6Beyc!%&F;akG@gjRN&ODGaPA?*<1Q^F!bJK=sp z2VpT`Dd7RagM?1PGQvZI<%EX`D+rGeRuUd1JVsbWc%1MAp__1laFK8~VFBSDLL1>e zfZO8E_jn>Tj+J&i94=jSJfs5Uc(WZ3r&9-xhjXcMD0SBHa2$2s@o*5eaXcJEjZ>&Y z$B$gsE>$jA@#97Cx@!!&8B;2zB1fmuLZjfZ;Gw;?8&u@E*t{zF*+v1|SpjZiiwYN= zTwHAQppPo5DCH`JtuN_TMO%&zXSr92|qoP(Nsf@|Jcvw#le?W`W!`Sl5MZRlFzUM(?mUW|?f@O2y zo`H0bp}l~6P=JaVJ0!Juv{?&84Y}ndV@}8rwIdLTW-}sBBx-jhqeJO*(r5}hc^T*g zIUpjg(CDzn;7OrDicch*kNY$W9b&`~wJB`}@-zv>1J@B&urG*RLF@^#ja_LVhjgEI z(*ZwnKuZLefFhLA2U9;2CCW4m>dEjh!8pg&S`^tRhA$hE6R9SJUPdQuPzIDtt`_6N zw0k%{yp57=XITv47f2ap9b1!Uo3*p7*$5#pYM0pMxGxmpRAp;vxvS9+I$*3R3uyw! z#qg7edIWDiN;k+PL3X7?TQL#GFD2uTP4hA65I1Ye-cse>sR*!_%|*>C7?5Ec7xM@X zj?Y*gr`>251Y20U0x~^m%UUCL;R|K3F&yEYCg=)q>?WB)Vgm4mSl|!kT^pgmibrU8 z!)HvQs!OT_b?9`K8+Ua;HN&o4l!3NNA)b=JD{`QMw2H?Q=Nx9BBaXw`Um|+#u*~li z<;oKZgft-_WCaM*9TO_!0^x#5t4F! z(}=ty5*}&sjm+2>loLW^+#1uEYqd$(5CrU^Lvcir0c%XxNf-zF`r>Y+)AR6#I2cI_ zLu*TyX`ev9X?jc3d73#~GvsuRKwoM)Sr^3Iwc+Hlhx~mzKx^B9uqsRkK-Ap(hg-vH z;2;TvU8s0=04i#&={&muv0q11STQ9jqm&AtgfTsBkP$tmRbKGJ1JZoKv|vUs5Y&Q7 zFejK5%nM3iRV+dvrfZs3Nn2NCX>FAkEC|B#pp<;ktlm$R6n<3ExQ-;(`WgxkQ!)cK zNc{{2g;?m9t}${4R>;+4XS-FxZVlVmr@>DOYmjuM&u?5g znqN*`XM5}ZZ9kn}@$M^^cXU)H&wO@b-{f2KDjzI5QajlGerM0xbkNrG-EOn->)N`_ zr&g}|a`Dw4wx8TTy!H2B@?`zO3$vCLzA^j0>iFZ-+t0LZ%lF3TE?0W~{`K0zoeM7Z z{Bq-R_lK23SFfKMKGXZM+E**DJ@)g9PyKi!Jb0}7+n>(h>A9DD3W4_kI=POH#joN3 z@{S=KEb2%=4C1*HkFEI3XRCg1?(?s|G=!7Bnm=dj=i!Q5T=m6{_0P@goZ#24=4a2f zX3_bG<>+R8W@)6^j^}E3Z^94y@PF3w&%1+z%^!{3xYvnR&+K-){9i3_1@F}XkI(s) L=l17+XMukK_o5Y+ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/RabbitMQ.Client.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/RabbitMQ.Client.dll.REMOVED.git-id new file mode 100644 index 0000000000..9c09cae423 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/RabbitMQ.Client.dll.REMOVED.git-id @@ -0,0 +1 @@ +c1e947b00b60cd798085e4d1280a1bc417c6aca8 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/SMDiagnostics.dll b/external/binary-reference-assemblies/v4.5/SMDiagnostics.dll new file mode 100644 index 0000000000000000000000000000000000000000..30bd81534dd489dd0ff601d0f59a49c4767cc1fa GIT binary patch literal 30208 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 M@&B{_KidQU7gZGcRR910 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.ComponentModel.Composition.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.ComponentModel.Composition.dll.REMOVED.git-id new file mode 100644 index 0000000000..d3c060079e --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.ComponentModel.Composition.dll.REMOVED.git-id @@ -0,0 +1 @@ +0c7f43ab72f20b81790326cc6c1a25c7a1d219de \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.ComponentModel.DataAnnotations.dll b/external/binary-reference-assemblies/v4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 0000000000000000000000000000000000000000..1e0f3633f27d1de3f27b7baf2763b90e888a509f GIT binary patch literal 41984 zcmeHwd0{oo)Hj@U>4}(OTZX_}|(DPXpB2P20a_ucWvpi5TXeCDy&zgqO@ zbFV$O;=NxSF#2jAJL%f{da#g|I~#apS}6h z@4WcTxZ5d_dHK41k^hd(-S^x%XMSna+r9-Y<5#R-S@G^em%n|}&gs)n+IYm=XYROY z&w}4yGw5gUUi;$S(RA|9Pk+32+fD5q@w*nZoVdWSt>=2%GPAa>c1GQdY4h0P0Tc%g zpG`FWJd_9Dcg_Lbl1ar99ck8>oKW>P{*)G~1C7>0cb zI!f1$-EEYBpuZY3XoT_|lBMJD_Zt4rhBK$(kNa5#{?5YR0sI|Om_|(D0bnjr6-ZJDi{~#I}7#kQw&jx-S zD5gt?arl3g-d|cwjb)4};2@e`zOuZSzB%g0ql)RI%8ix9)FXIhCF|cQc;9HI|8Fd( zSseT|(ySD`S@0FXzX6MB(nQvLBE(o+%~)E?v3_35xfD(1kigX7)MA=1*gusm`9dAz z(phYOMDQHJ8wBqYd_wS*StYZJ>FC+4*&ukvY!2Bmn^XR@gnU`>@!3B`_&c-5%_*ko zb2e7~m=>cNis_U&KOV(iRX*j`(QA~_AcUL-n*S@MIaEebnhcuj+yd80A&e>)K=Tu# zSxrO90QY&wN@yyT3wNJzGia2g@;JDDnn`0s_JYV}bE=5<7Py%-8>uqqH&}BvRf8iM z2ktC79z5GpEwWY2L32L15?X^U&axH4ok3>^X9>5SHj3ss!dXa(<6Qx6CUwvj;cgXf z6ZHu9pl~tTA>4k6cP3pzdr;C>!4YkyT_XFN$Trhe;upVJ2A^%Ft0niN!Sz#;ZV=fN za3SPg}W4em_7dun|ocjeLgPxW%N5K(f@)gq08xQk^Ro*{*3Xal-@(PKaH+{9@on7 zA};$?G|1?KtO{HSyg3whmC`J5r@@=!j0?c6z?60xeU7FWK5(akdyH

B4Ok?q-@J zX>OBvx6nM1eL~{hMN14LSW0(8b`jl8t5Eb(>KDx~(Z`HF*zzOc?xhV9?w|+nowe~I*TqC$%Fd?{2aHrsvz>|AFFZ34$9~69A@DG9`iaE6z zf{O%C6-)?TA$X(U-Gcps&kDXR7#PSY)CevTJVS81;1z;j5PV4R8Npu*{zY)8pHm16 zE)k3Y4Z6fX5O}xX)BeFUjsD~h082}b0G?Vh8hBR86zE)D!unSU-XM5O$zX(hS#awh zmR>6u9?WUZ8_Xe%gI5F39L$>MOUS20`q{y)2zg-e8B|<6bASQc_6}YQd`$31g3k*6 zMDS(7Hw6D8_^zOD2*)ZD93yy)V71^(!4m{e1RB&oi17un^RI(W#0WKV@Ct;SJcMnI z48gcUX9{)+o-25f;FUwpg!CT4?+n41Lyr&PGQKKUG?dFYVJL?z7VMCaU4r)uJ}vk= zU>TJMwn6jw0OxyZfMc}>&H-kGK3`B-wJT7MHg;2h$L)IszZd8O{a%1`96XFu;BcMh zm|;x_nIpJLq@BYqLdccFIG4MIalZY-IPOahR-x1^{k!OVX9(vtu=H}LcIrU4_RbPK z9;o!IXh~_2O~Z$v4LYrq<8BjFCAzNkDug^$dIRuv(eafPIo3WQZRv%QdPv_BdgLH3 z(TqWC;o?DDmQ|q3Xj0kdK~F2Y1@wwC9%p+6uPyrq==;l9^E+i6_p!472L7+mua!Lt z`fnl~T+S9ADLA402cWCVp9RJR&n$D19 zEciviCk0;@EFZx-^@8gJ`vh+jd`$3nf=3+5nzIF$3vLtqjNrEfe<5fb#hO9EX2H#Z zR|(!P_*=p8BUy8`;N^mk2tF@Zel$zx3w8_MA@~!)_XKB*Vx3Ju_1SsU+oM`Tm?GrE z+`16275TG|-WuB;@@mFI#Y#kd{+Yoop%RB%8Eo}%X9l;2cn!p#KL3v34u{)E*90#N z4OSxLa82-&A-xCcqi+XyIov*aK6rg-sI7S|l~U-qy78+*DcF_rt@oJhs*V4zT z?hchJhISowR@K)+!)=bs_khd!w^j9rj?^-LUlw~hSda3FOSH|A080l#K9%;H9joaaJ(A*z7+R^MC-yf1?CPMoBSB>BAa6A3CLRM*O zUf|ygndbJ<((wmEqixwf|LNnlhsN04BlNNHuQ}W<`q_9h9JFP-Q12z-aW*GyqGEhO zZXZ(lWymX=6rP|p{k;>mgeE!MRTKIhZlC|g2~)yarfkuivU;)|uaE9TypY4~&EgJZ zaetn$uENzEF>zX0b6kefaJ9BYyj!C=|DVT?2v5;D_yTU4hvT+8 z-A-kve+gtRw+iuQII{JSxm*`yGacD>$XsqGWV0OEHITX7%@enTu&I^LPXB!qTRq$( z6Ss$WSIVEA{ud_h@NjQHHdl!t8#rl)hZ{3#Zdf+Y5^wUPdY7Z=llnu)>UeZQ7Plme zYt7=;XK|gA8pCcX=Vx)(Pil5$(k2{Da3_a(kIf&hm9^pdia{CnAcqE<>+|0?X}`nm z^gjw&qa%A7GR^JuzcgukXn`a96Fi|gRqsu{%yzX@Nl1oY_TKz5@as-IAlv4*>jLN9Ll~Uq)(T2`d@)&v#r_Z|06Ut zx6|*NyghWHlgh}+J6sN_tgAT5mZ|=rIn@J}>3Gm=4LO{D>f|k<nc`j&VSD2{*cREHhI6p_4#jrti{&s^WU4reSh*Jj!cbG zT2tAwM#rNAlQ)M?(fOf7`$MfB?&R=V57!kwO>_P?k>5Ip^M$}T zt}CPCLcerU**9S8_`dKNI!&pEk9)ZNA&2uXKz)A>UH;2LSA^SaP32ve<5{iUmi5tH$lcOu zBEPG`n%hU;41G4-;iU3B{1Vfg|CP{|(3zT}zl3fMJDlGPZx3zOGJjcki_6it@Mpu0 zjAn)J2zP2tY6#yQ#zCHZ_EB^Am!U4r`9F>{&$2o0@2xK9--;Yk9$9_Z;lxX6Tc*6E zIpvp(&Ov7TZmlVP+2ToaU4`aUJk6>8x7DM0Z`jM-AMWwU9tv;QIY?VNPs{w5ho^)! z*XREX{Gz#?{@Wniq2u|#0-5G^`oD#;_d2pC!>u0fr{R6!K1cSO@c+0R{Vn`__ zU74l1D@#*z%9g9Nrg*~PWG#HPmic*Rb~&DzUG66M>>5Y&ZurdMq)mKU%fP)Eb~yh7 z)qe?JYs>ol&s4wZaH>|W)A7WX>oq5KI-LLa$o(@O*}4iZx8IdXDmQ3N|GS9iawRqU zT@E?ahd=9R4zHOT{+!MA`6t!XJKRqHT*&YULq0qGCqkwNG&zU= zvbjEg2fU;?%MN$?})ylZSikIJeRw4 z+hPQ3Jx&0X!ktLDA1<}RSG*9@q3x&1Ze)!()? zFQC^T>vy<8Q_8FNI^3iwM^}Hx;bu=6SN*Wf_0iHPq3TC$ZWo<4Wm@&4nvDg|5;NORDV~?{GXVz%){L@7`OiB#5BI~;v=N?Y~!w2U5~a%T1SZLW`A zoRY47(&nzEzfL*N;VzI=exT#Y{Qg6my=dY@r5`NaoXeZa&0wE887`%~@9)xY#`t)W*O zj%|6>=GcR;SO40>{i*sl9&TO5?>yZ8ke7R}`VCvg{e57~n_APqVrp5%%Jc4u@mQ_J{tYHNj1&dE4eVzuKC=Xqo@&sgH#I>To?W`$r zIJ2&^X0V6ruHmOR{JECO>dvddk*|ENrm=OG*BoJUyJ$|`bu|?Zx2W#(HAgz!8FjbU z9PMyh!Hsda&(wXrW}L%4Soi&!2@dyzx)*CEYfk!fjm>d8d!xqTuz#2mo~mWyd6(n* zt8-*re=f)M$Ir0&bAkVbx>}c`-_@$;k5^G~# zxC&u3Dd~}F53px?B>a2_P5M+0?V~*s@?AmYbLDNXXTC2|Z-~leKf+D=sYqWJ`i~Bc zrzj3>Qf|0uw+E&3chNjpE-K$)V>quPfd+YL)#^CJXG^_ydTBS7kH$(mN~+2d_Jnw2 zdHt!vr+YNLbiU?s9!(`}kr1!uI*(3%zGsS*QP-VIXV+bRxHmObzbfP`N%Ope=)9)1<%UNjXGI-B>#1!DHE;N}$hf=j`+BkUB^W zVl-*4&`X3~CbZXPRbMKFH6rEoz2lhjypPsPxbgt|_Fy4JlyXw=#x0^ta>5OnBXrGr zQ_fF8#dUQIx)G^4JzYj@t~>1$SJNl<6ww#+?B`ta!@YBaPg;W3VZZ4TeS55lxQ|Pk z&pVd*DA#+O+AQ2(nN9QYcP{l2uK_OwTG$`IJt|XimxN3+cnvg9uu-sC@MOW$1fzm6 z!LtN=1p9zHLYE5el90~`y$86i;x6DDwGRj#fX#1F0JjuWUGyk0Lt6s@ z+D1nV3(z_AFtC@_mImlT`XlfXy1FbtpQJ!}fUcywf!ENQBLZ|iy#xFl-80-z@6d=5 zel+Fv6@Dr*MuGMlLEsQ$BCym51BV+^fkzoLftAKQV9+=oIKgNFPBxYTYmDW=T4A48~_kiRZeKcyymje2IPXUMcYDb}_d?y2k`|brE<@-CZ z()X!K)RgagzzM!1N28{EX98<{cLD2szZ`>_^3{w*P5I6O*83g;HuwevQB%GXflGZ` zfy;bP09W~jR-vYRYk;TvZUnCLy$M|J``9?tl(1-Nm0p2mpj2Ze4B zTrb!wxLdGa@PHuU-V);4$Z;ElUN6`y*k>b4cMHAOMh3>+h-H@V!Fs6*@SA!y5#nHnL8i(0wDA z-XruLp?4q2`u&0j1nDRa2?{m{t{3c8AtPD3Ua(hiw_wB35-!*;ct9{Xio+WOdn=jV zEl6XS4hl91u2*zW(h=+x+$|U!C+P?tn8-9uV(bqy9uN#xi;iG#Ez`RN`vngO(o_x) z3i1uFVyuJ);-0A=cb*617V}Wd^8q@7hGBLurLnlXH38ft8jc(36&P=i!tLgfxaoK_ zM%_`k8C{9FeGJWm=6tLKPQb0O1{z0=G#+=7C(vTFDYlL+)3%8c%V3eMV`^v{+p2to5X@9FB8aoY9sBT&jaF*bF!Nn5ZGR=?h z4T32NIaj2Y3EnCp4@o*tNXS#uN})f_7!G_vLVi7MBcm@f=LNKPv}nx-XtOS3;saxdBK+i|0rp`E1D%UILFa~(`RsrnuJ~@ zxM9XPgec215~A!mdj{LkH=`Q(*%@r%T{GCiuL`|a=x2piny=2_vcDntX9+KwITazp zW^(Q$19O2#&g2wup~OMu6II^nq8ahchg5|hCn1VnDD+7)*{ah7J0v8(6#3x^(d?6a zRjpkoA-4*CYbKZO*_lm9`R6m6f%AIjHeir*#<)T7d9e&rvXZH;gy<-4qKhQ)^7ziAW{$ipx3*Ex6QFBiwLA(q1-d4B##rE7XyH~c&_rJt z5BfNui5@l)^zlHGn$WWhtfG$ry@=l%KtBtCUV>g`NMAFl8L1l5=S-}Krh;AuG-)|{ zosCapw2#;sAHNhhNh8nhZ{qIb>#y#{Dv1wIdS6ll^0*kYic9tXM|78!USVm{~& z^nC;U_5{!|^nct92AWuL@g31P(8OC4i$EuUI4y#u2G;OPK&N1-f%gHLL1$p8f&2d_ zfj%3S8nhi~VpYEqbRW>9^I@rpm0Jt&LOKO_8Lb6=661-9oAw_AUV-t%#A-i+Sf2)( zIC+hNz7A+&<=+PSMxcpzHZ0(6D1k|Lz;=`Fgw-Z}5%!w&C0J_GSMcrvZVm%Y`W7rT z=pmp<--e~QAq+HWFKq?=9iT}M^Sc!E2+*YOp#%nfA867O*x4EMB+#V&{DuWR1vKed zl+2(X15J7!CBwaIAWpS#Ki{OE(ZvY)Inbm7bSdZ;fhN6-avStZph>Tw+$Q~+J_Y;@ z?E?OvyovE!ph<7Q2L}BfXwsYTfkA%&;!J@)1AK=*3;a9$VbZ&Jj{s*K#vbVSfY`kn zw}2i1G^yCQ4OnX20W34_LU=h4{lfSHaJcbBgj4|0FN`mNJ`#w2VSEMjNT5mMjr)ML z#@B#Tjc*{l4v02yJOHdW{u?;o_!jVZ;e-N@Bh}LEN2y{2lq%Fo%ptk}|+Gachx(8U)>%K3D zV{1xHDFYVaPk+WvP0wLEJM1=WA^9D$BJ|-YnAN7CM@_@bHVwP^S?I;{SX{q6+1?$u zj;E$%BArQ7OHVpub=Ec|JG+tzE0KZNiq|fTW}=P!dSo;cgB~@e)5*42G-I_dw=&Uo zNZ0gqS^T%qO1GtAU97e$mE00*w^HvzJDDPHZBkD)MG*>Ta? zHqwL}X<;ng6_57h1vDk&-JKqbZN0_GRA)5fYA=EnTo6x4XEYXXY;R9l>9i*_(cPJ! z`QljITC^==CDL3Yt~SCmR_c`IrLlx3uV%YwoZrd~XIgC-)GUwX%aUy<``Ij3Zx_8lVNv+z1*5zufjwU+1tkuyS zkERxF>tau2RmW=UtnL^p(2d*D7Tvfp8E?<^x(;8H?c?{=z-wF3{5qrP6xlV&tt@VB z%Pt<*&4y^&T4E)v6!!_&wmi{F=^2EkV8uETSyj-S*kYy9mUgb2$ckiUIlI@BZf=?6 zh0t6duZeY9=}fe<%S|e`St!1l3)P9vE=`|KNyXh5g}Ow6u$Bx;M1sv2KcqLioGz0a z;wFJ{N8T;Y3u&=ZTVib%%cC)PmRyZR+uAJUNH=V?mF|vbv=RmsSF|XV0{{Lh9?2xT zQ*BmS`nzY$a|K(X@op;;q2iedshkpU7-jIA6zK7k%xtn!OvKXeY{6yI>z}+*MJyiYRI{`wi_?Qw zV;eU;42Fxl6K(6K6;@ioW)zGr>!3(1-4u<-;qH}NtW-Q1ZKp`OC((u_#Ad2*l7*Cv zxV9xNRwmEX`juQdJuMtYY%ibKtb9!#1=y^7iL&J2@~l-^Ui1j+ND|gRwxBC6nNnUr zL)nx>(baczVq=o9`azJ8st4Duwl>Ywo02K@n{+}kA?8M%q?j< zhiH5wdcM`}^(HNgp54PWmqDSM+ewv@Co7BRdm%_s-B^t9+$3wQ72Vtxp{|z1w1$7r zV`-){PRlWE#!#J>1TFF`L1`6wC3FA1o*6BaVj9dZbfl8qT}mt3ok{A2lW2T8VblP<~u)Lp%mYGpaGNKXoe z?HI6lHHS@zSj_dWmbX-|zVma`EeoTY9$2_ic{6&j)gO1t)mF59Wg^}qJvqv~z6m{2 zb;0`Ou|%x1yE8AddKgw%uo5MUCfW-+rCzlHUNGjRC!m{SqSdRq zcAHf?Uqx?(@+2~bNF~&B6VKYisEtZqloi;vQFA+nFJ8~_iWggQjDornF%_ttllIU- zYD;_eAmT_HR{g1Dd{vYe5pW1j;tn_a%BT@*L!BmI6kMH?K)u@R22Y*{+zRlR=2VJ36s!Fd`i44{i6rG5pc%(L(L@`P=#=G(>Xhy3XhShE?C8>{ z+1w3Tv%QRCU#l&eJzj9T@SYy2Re6LDXcAI0N?WIhwDF@+o4wAk`+t1_U*`FOl?n}H zZh3I5)h#O@6hbzto^(}Cd5P*-x;f3m^vcxQP4GgxD+))s3rkGlGGefU`Oh71B3_a0 zpY$n-&57hzJ{RNRFNQs)Q^8Vg5nCam$1m<+oymm5<0N2lvO9rU9}f1Oc14zB*|j{H zY1@=9%FY#?)|tMY+#@)9;C5)QCJH#6%Y(Iz@ulUlGXjlv-75UN}`*ayi83r63_Vw|&K*gCku5`mo>SztxfHvACU zZjsed!@<+FHPs>#j#P(PylRuhrt2|TDd=GPNG^9&@U{!AvdO!4b5qiF%j1qt(3NsQ zo8*`87FgWU>ELQBEUP`eCb__BOt2Ci zE=gHf!>874iY8F<+_a=AqK+fbj5H?D5f7nbuR$W5Z*D@lMUiF2!AqLA=yO%2g+}c4 z3f7A`=dyWKq#E(T+^K}gInHLd%2)CXTrev4x_VrRF7_*yNUoXIyYIj!M|qzlOX1INf~Q%RhFN+C1cU9t5j@MMkDT20hqdcnrS z38t}>-Y$Ed59s5EZmiQgEqR*9ns({ZRLjSqw1q7owJM{iJ_Acr5~tO%1n=wh*_OvF zu>pq!2}QVT#)Z~~?v4&CwIGEvOCIE$_M^|r7RI6-37iR>mtq4GD)Eh|59tgbFzlG$L%hNjYY=aZlR>y;Bq+~D33FA#WS_7fjIUC+id!X!8+gr{Z z9+4*;T~XPXQrdppChjS)Wkea&?w;&K)KE^{F@7RRmiLU(%Q#1qyxVXRaaYt%kT_Cp zN$ed7ntv0Gw6rBT9P7dz%aCV zWnytGmCmT~3w2^Y6?YR*5|?+4w;%j2u`-;T$Fz zf_ROy^=fAc4;EAU(7|Ggumv02E}fP$AR#n2Y(bB1mdldK&D~x6Kp)4$UX#dPG;!;( zTNOGH65^pnH#4`wbb8{5tfwRSI`%%$@kExoSBR`VENpagVIMgY8vDdySfXmw31WFp z5T|TUk4`hTvr?{*a%6`rN~Ez%m!j*qQa0Ne_FT;QqxbQ%6(+e}_%TP;6`r+LJkHs; zYfzPJ6ssDJAX6kC8#<0wDZ1fnHer?0ywMpVuz2(&x+c|whRSOJ*oGyNYkRl=s+2A{=})$IB{BCg5nHv$WwWKK2KZ4!cK8Y&cX4qoPk^qT_6!eB z!V(`RSMHjd6U=)AAZk2WWv{)LSlDBxH^~FfMQ7nojhb@RD8U6#R8!oF+RyzFL!WwK zOQgh{qrEETI5x?l3$2Y&%n#mq#CDb%JeOG=(YVsbqNZJKRGP4!??74klmOS*X$iM?Boc1Z9B!X=IStawvs`sD*}-sB z4{JAU7)#!hIh3fo%cI7L=tC|}LDL*AhiB4N6eV#L$>O|cb8fHlj0nmb`XQaDI1H!4 zMRTTlhhYg1O@($~Z05ma98cG;GzAQipO|@CX?BR{sLi5RCo6XSU3qGn@(Do|ELc^TFb2zZ@#AG_>Zl zR%MfU&u8cAJblBG!CCC&Eqn{+&)&+*SZXr&mND|u*}M5+$x<*JPkV5#lBb_$i*dge z*9&9bjgo$(hX`s*&1R{6qvL%yNSwi}ZMf4+y*$g+?!ys#SeEh`n;7Jc=5|jEDtr;t zF=+`_ASy^T;M~WO7#FqN{uU?jrE>cSK#gfy$=${yM20V^v8;PM_CZ>f0v}adQ5>0c z=vKgmDNwo6rwfH=>tk5uy#WWh4ocISq&)?oitR+4`s9&IpV8rIvPZ+->w7{F7c)U# z3Oc}!pjoA@T8|xum7OjqW*0mL!qsft2*t$Xwsqamq-CI@RH|+QGP6ltD~Z-Gq~Vcu z<0u82STSlOoxOV2w%nHL z4YyX(yl3;BwQr*=&f60XzKga?V(*;nT@xGbTnuwIT6ThJ9YyX6-n(pv!+B%kF4*BU z_byld(mgvw*6nK1Zf9mM*gb1;COwPpytQ@i8XE1b;I%0#ya@KJc-7pCJ5VH)J(@@Z zlI@&Sud^yllS{fwO*hQ5%ya|oC1%!QGJj^{E|a~8R7Tj-=D}Bd+3PjW5>59DDMG>J zRsPaSFQx2RoV?2<BUX{%EeidaIVq|v>9YC8?qM&c7}E-?YY0ey0-A)kynwt zjBb%)K_P)S#hI$yuI?-Z(xgTnM@O*|&)e(VA(+(sq~{XUr@Fr4YG5sHU(H_=%XlAr z=wMGTa}06f*iE1@9*cV3F3kyNa)OxJhaeCIimW6(AYBZa(3S>RZpccjZONhu@q$Ztv-27W>WOfUmfGfLUx7 z6^|}2DJiZfA8M8lC?7CPsEYD3Z~;gH9-j5V;)fi};!0m}SsjvS@D-2dq(-u2v=Q** ztIQ0P4?x&@gq2kp90^~3giI_dF7Le`L}(!NrkItLMa5;k*E2KC3?R+X2q^D;WDo*o zu|2&{aDwxU^4@;Ln#*?1Lh8LgHH;MOnJ3%Gz_HGb=c(4k7v8&nyl}`M}QG<91Ig0NN zyfhmHS_o+dzY(tiNAXf^2H)LyF*gHDL0UH%ObAM?5U22dZW4ktcsKbdLNa*wI0<>0 z#A0PFTRnyg!0Zelzmqu+^fbKJT!*(b>nPxAvRdgh$aG=(JGcR=bCC5cm@x}4b8-SR z@M0${!;9MUsP~Fygw4h4)HPzHB}TBB3A`AsGgrB=MiY#UJEfZsElbSj(#Iu@Rp2*( zjv>dBAnn0x*h##S%nqK9T<0MFx!^V+_l?MV1`1-KI_8Ldy>~8`m?^};(`9I6P@og> zvUHocuM7N#W9bIiIs^I7!rvURbQ-Ljh0rL%qtttEAxm3feHtEMZ?uS?+NIJzA~rwx zL2RzYYw281g>27mcmIl(aae!fQ`q(v{EPse(89|d(i&4A6??DOUAz`QXpq5wT?H-s z5A?AcT+3ETKa1ff$O_f+f55igu5B%-*EaMe9yT)=M?NAJe$};bxwO1AdV2?K zKR^*hpV=TbFULbFFhnzYoiQhnX3_o@-$Yt&aP0M%rHwW=39TY(XDslOFUDvHRv+ zyLnZ!)$Z9J5gWgJC>y!0e&kxi?b#ORkC`74&)%AC=YMAQIqWJZr~b2h(kk>STrQI~ zkp9rdtHX>2H)Q+u;A_f%$Lw<$+wRG=jc4(8_;4%cq+0wa70;JEbADKD^f0@%!_Jn| zv$lV1^*_5~`=GNW@0NMAFXS=aiO+H@{HR&??`VIAuFtdA%H*OO+yYED=|i~A-E^_* z4!zOlvw{uSw(@41H~vvH>lygwt^W*!^nULB=l!pD%wes&orf}>%G9|GFTm8H#E09w z{yld72mJZvgZXnY{LJTF7KS|TxSKzuj(b?o-km)(XHRsz1>+Mub>!3viqFpUv6Xw^ z$7f(4#xR2;SEIh{7a=CCF^9@Yviyz$e&hoICCv%^yakTi z+YPAU2i^~>HWH~p4L@&~n;J{xpZ_Q%d8DAkkl%qTGLc}BkAeB30Sv_q0~z?o;ffHQ ziUu(ZW*EXSlmWlwO+~{PN&&E;zhF*;;&I~a1y7+1naa*8P`sk|@Im^VN&zt>7Z#4l zekmw1W;UYX@L8@t0B%MzS^++e|5ie_76-F@`oKd`7di^Bt$MF%1jnb7ZIJQM#OIg1 zuH{`~yM#n>>e+)BsABtDt<2q1Ozv#>VW@+|;$e;tq@&0ofxJ!uZpI(4Oz<-uh|9;; z-0XQ^Wb2M^1j)zGF^v0sqKx0z0;ZTj(xJ-PL$jMCH$GC$U}3{~w-?NtkL0&N&d1R0bT+Sn z*c2`yAH=I*HcJf|h0W*saj~ZmHsK#x_)Nw8akrzL%;hx8jhulV0OaD;uvYQ|GPPf3hm2#p!dD1F{ z+UX*+X?`lw{<1?ikVo$tHN#ThZiv<4TdgSWXqx|ZBB(W7pfEysLTp>YDt`SM=l#X9) zx6nm6SLcD4M{qULyr1Ir9qY9FfP$2_hne#FT< zk9ue0TaS7{Y!BSN#I>t^6~qrSZ^s7WTzu#DfG(t~pYH{cata!}f#J$?`$-!@-1#er zeAsGlOdgMwEp3o7r`u|w^6@Dgw=TEc@j%0EPT4wLY{ib9XPa$!NXt&|kSK?5Px)~c z<_8r@Cc87M8eW8QaP6dM*}*3FLP=@Yd#m2tOi?iI$se>}xp7di+@M0%9J*jNt56eM zzlA6MW=P!5x`rQ!a9tEu<^`B~Si<{|6oxVF2{rFE%QV14983Ap3J?7ahfY)#atR{v z!+h?6Jk0X=hM(UAZllGAOF%6cB63uXU(P`^_FF{yxmpl#GD|;bGAmIKwuUX?WOQNI zuzB2=HzFV2*R+GyLv^QgWgbYmYb(UR90ZzMIqRt*SS89lcZXWq^!^g<6d&;d&Fx+6 zIbIjXA>$ryp|Cvas3BUlbe(Z6#dStpOFVjW5!td_%hg1prw1Ms+=ikCy2E8!OAA&b zdGFfggE!!1-l_3}cB$O)Wt%Si`>8rEa`sr~j%+OBy4Z#$z>ez#&y8IVWIWn#M3}1X zS~~NCl;Y4mn!9WpGV4aW<96O*w|8yGrc*ElFBMS+6n96qjK^O!%Ii5ruiAJtPeNyv zv>!E6t7f6@gs6QM&&7?hP0?fjx_?hbYD1U#S0}y_PHThHczw!865KzyHE>5)E)|TB=3CWj)v|e$8#L7 z+SFwzcYNed%3EZ14sV**yx$DDWw^Q#IDuP9ew*XvSHe}~ap&NhIqlg6lGrBM#AR7$ zZ_*o4Y3+H^6(}7y^$qVgyWGNO@7H_mGI_hNo(DGmqgm(#7NUggdF8gHu$(tgxdu!> z)R?7qJUk3+L3FiOuBC#OsVy3JY+mTL;M;wyt7Ym4gC)Ff2-60v~biivM%1~?DcCTEj%$i0lAyg^FRP%I_k%ql^em8F#+{hX7Z zGv|Aq_P3uC4+NBTCM?1YOqD|=)J^2dW{NL|3#r&UIc&6idM zL;Fne98=0Im8PmTt}=MZ9K;@BH}}K)s0Ajt5rDV|jRUev%X%+|U-+ghGQ^iK2Ur-8 z7N&v^3?rY(O{b!~cNZsFN<~?`IU*-O)o}knQcaHk2~Li025iEXmk@i}Zj^GL7jiVt z%3)NbR9=;6=5R74?~1bCPfHZBCQHdq5?LtQP#QS@Rpo?!=pQJW%$;yDnfMC~#6R=N zeF$_V1Ze$`Hh}Z{St1vb{b-!b$W>*CCk}uj+K`{yP>D(a*>KFcb}Y19aPy(a-ef$` zyPGE9SiG0;FZmD^n*i{uTN*iZfJ(z%a~e%gG{dLTG@ z{b|Qv`^Z(+m`gsl_k`gUuYc`?yUV8CGx(_)kN$RjRmYU;j(Tm{o%eie=hdLDeAue~Ky1H*!`c6K*H<5x3`H}yB$iL46Uq*96>Q^5B O@5|!n|LlM5wfA28we~*yoX~c`4U|Ph*|?7!A-Wg8d@UC|I*cINd(wSgx-0k5S@$Zf zkIw4c6ix&NmjdFC~l%=h>fT}^dcOwq{&Y^m z`g`t~bw_sKJn%=T`%30 z7`VLp&S&r5(0T7YvFm>DiK@;!mb`t-b3f~7exb3xa{8gpyLZg`)U{Kd{rv3n9^4aO z_S$tne)*MqKKH3xmhajy_Xk%V*?rcpMt|6}qT`$uieWwX+qT+ZRj{V2rg|}3>!b+q zuO&otK1|eGN>pEra7Qv8j`k;5#nR^CT}P;G*xfA8qjIDd2D?Q_hq=bO=sdR$Bkhx^NwY1<1WMR65K4~8+qd@ zDdsSdiyn7A>2#6bm8;}YrRz+Wi&CyDTzOQVvk#J9po?zE$pt=>^J zS>Nwr`3?`~@H@{Hu+8b^aFO7A!D|F}2~H{Ga%T&kCAd*=o8Tt}_ZR-S&_#zNoK?iR zl@+mMNfD>*5{wCcyol}JU$jqoh#n~7wtBSa1^nvm$cQ#ne3S>t`NBrP3JsPGiI3{Y zkN@VulY9Z4em25Hr%|cIoe#DVY$_=MABDiew1^hd6-bu^^HV)76V0m;J|Aqku$^FA z(WlMAz66${rPM+S%()-z3Zz;uaX*oC%jiO3PlNdpcd=-`j__4rDlGDmPsvrTMgBUQ z4Yr&bh^MiS8Vsfh+hDLhVR3`?3;USCHc5HkQ1&SS?ea=SjfD&KzKa z#Gd1vg8916SpdmJ&SGF#a7b`e@Mgiif_DmjTQJu(8~U?drvNv)xU4=G=fBxCA9%B? zfLyMpF(kT1cDsVWy+DQbi{{q_zajXb$RCsNGlFjl7UgiB0l{F-0)%zVuAGJFYrd}V z@5?y@a{by#f69GfS~`1Wn(k|eMnyB*&}25-pU&p{T~;o0^Q-;ryZ9QT*1V~H@q)rS zz<9RtHAcS#o1zo2!(ir`I_h4OztHb7;zr#~`AgE+dHD@~uN9}}H(PAXJw4CiFRAW39z8Wo&!7GVy}Z$S@tC;S zU#An|xHI7S^=r)O@@RgGDRVqq{PjkhK9*$D0SUADev7#md$#&{rRQsuR(ZCiu??OB zB}?@vx|u?r%lyj>rssKP8k_33m^_Cad+}C>@{!m6- zChN_J~8Px)7V2OJ#1+n_8us)+3Seg zY{eB894N6_d4a>f#foc0oXN(B$2ISi`O@2EKqp{4%A*!z9}=?|x7nbKfs+Yx889R)A@WiyWWQTL|{UbUIbzod~)x6@|ae<>@DE!$=>wrt2?qwWJJ zeY?fJh0<;IDB^~#xZfboW-k}K;lI?1V>@lecG~Q%f+POREKQFuyNsDaJ8~GW20G|E z3GbKiof3X9E&Q-Ze*O-4Smfg{zy&G+h3?Ez0uEY&#aW?r9X+=ni~OB({#)efdA=9n zUy6nQ33Ol=#V_nnSW}@*g8JClfw0++>HV@_YIJm* zST9|ox1K%*^fpY-d19(`{iACh&hbzQo{D&lYyci8X#qY_a=wIB;1PI$eL3FJVUb)R z;cJ0IrMrNiF8zYYzXCjQ8smYIGKF!LV7Xwm;9|iB!4|>u1kVS0OH~PnCA?L_!-7`; zzd8L{;4h}{0-ix$w0k4aO>2Sqc;@lqIqD#=g#HZlQ?}xz88inNpasCW)CinMy}$~3 z6<9_8;_y-}t7^!m6}XCay1dj%tvOz5r>B6OwB7Bc4Ky{^ zOBd0-z)NT_&r7{jGQ~@qXbc#kXug*Qsl?;ObLJRuJN0(H9~4chPy0zKihh=n(J)dS-er zO+kr!shI94*-IzT;gavu9D1qb5j;sdOCO;chmJca-2(-m*zTHGuOefxekuab#SUV5?d~@rm zD6uUf2}w9C;T;mb))AsP)AmaED~>J5?GXc|bjN9Q!L-~g)+x{8vdR$-O*@=ZlvP$b zGKKBgBe>kl;Y$QZ1osGjN5=w=JuFB*4hID1(DNlH(+ef1;@1U_KzQQheQa28NN`l} zX2HFJcM5(R$WMbV{FjUKjy#%z|MD@WJvhDa;!KL4S{`@il@XojD*(>-l>lo5>wWyl z(d?UH$yfVkA$-2?6yPPk(|}uiRlse&I^boJYKLzL!k?1xZG!g+J|_4x!Pn_5=sYRm z=LG-kYl1|V|BtVw%#Cv~2ke{=bim>))WQRFW3*&LUIBEV22RKefNrWp9eor8a=IKy zPRH%Td~`!ni25s31awn1+QCN)fDVktDUg={-57z~GPOVlTE+vpALzze5PN}zKnInf zG&lDAIC;VB_CYcoc{}I?t?IxWp9VY!DHNRhl_4C0mV-9q)K8%;KnG?t zKlu*;9TcTm2*-d9%<(x0Zv{GNh)za$JJ3PHbSlD^0v(vG}Kmmh;$JUFHX7<2Enn2~&zWoGHs? zW&K*(7VAw#v@@wS7E&V`HO8WeWP&<|6G?3#2-X+wPsP<_I2H}IAWDrys3DQi26`gH z2G`=$(xyh$eyul6qU&;;9$L9Qqz!U5C}LnR7S*E33EC)5&eF{!+o04C$7!ym*%*sN zw2)+zuCz*x_C`?FcrzL!Y9c|MaW$GyL&Yk%_`m`#^Ny5 zjxqY8DXjKKV~J!ql%SQ|GOe+Gt6ivFi}%Ii18Ov+HO5k0vK_Zgjij{hZmCL_7H3N( z%pIXdhb7z|$2bTj4f)`3Jlwx2NzL0${pRh>;fQ9ku7n**m$#>SBH_@v+HhxVix#y9 zN_G8ei?oG9@mM0(m+U^LBNPu0CMSvM3MW!(q$8Q?4abfV-MwDxnM|dlNlS$LqZkzC zaOJ-3UX@G^W=h&)iSYJJQHK^v#ly+rOlg~zNT~gIyU@K>?db_8+s?D%8)NZE*fzr$ zOlHA4?QT+&s+Gc&iIEee;W!3)EI!C}c|@hy|sWHbewr4|u$LWZl_q(uhBXBqAU(~Abx zIIN+DK6@7GWG%c`j~d#dGs^|h3Jr5tGbXITEL}a)R>rJ__kf3BN6H}{2;J~=;*+g5 zF>>2kwSOcmQl+aXj2&4QX>QIL0QO=0nvYJAu% z!gk7uV8@^q3agRurLZp&>+kM^*Wdsp)NNWX)(^PUmZN4tu_2zdt7C>|UaJknwrRw+ zbE|f9X5EQcDjwoWjC14NAr#P$nX^{YRoFXG_kc`YEmLUKEK_XeunIj(R(`9|2w=Kv zO`z$;$2P__Srd3_+pS=y>Kq=_CUMP;hLI9Ikm#qrfh4KC(6w`GH^k%Wum739WtFVN|R9{tp{%(?g>ZWaP8#BP^1-cI2yGll4hX{ zt_}>dI2rv-;b>osM~=SVpjdKK`nrgb#KWUqO>W{js}4x(!G~$v(HrOkibZ<6c=4pD zHlzoP%C=#$X>r@!SkGp7Y?Pba6ze58qh45nL5uB@On5jbG!f5OscgF0=y!c$k(J## ztTSm9v*ex7)v!BT*&D`?u*AeYg^7%sqbqH(VXGK!OV8Glo&3SV8r@`M2#2fhyAo+( zmh%)4T_)CkB0)?sQh7RZ5+jJp!5x`|=nmSVgsTocvH zWM^oF*&SMG?CjOv-tG*8;^J2_WtNhaLAsVDwAAeE)AejAD`wWp(90CsYE}^$dY05y zw9ClQw8gAyw~nD?3(}&w!7}4n0##$yG;Y#DTUz>z{^vO-1Hjzf$PloIKAh}jMjui( z*M|-!oIY?6V9C0SwTPoKC7Jtr%J3d7JjV@hWBRlV1zxu_bpVwz$GNU;uW^mB!Qtk3 zY{0H_OIk3oa%(CKM~dNY%>i=?m`h_zLOeIGlbvz+i`H1bzTJZRSK|rH&derYH`S}V zXx(qJ^XHam!DE-SjRYEcdkObiHQFzaW=S<1<;7JH+E+fcNYuXxn9+?5-wl=J1 z)>`%^>2(u9x`w_HNJ}CD(J=Qg>FTl*NzYIO>7&+K3uL*>oSx>qvZjY@WVjoxhQaR9 z9`Z7_&7L;vr1zxBGMad@4zY61(Bx(|+SSZSn#Ls33dZIQ6DfTkX1cJ>a58;)HpSSG z$kS@ZW4;|JTcCzWSWVa~tr?4&@^kjY2;-r9Vg%1{c>=eiI$&!Adn8`ylX0A87*F77 z8v2=y*&g--7<)(@4e+Un8kvx+v9*H@gy}eJv1Z+BErn7dR%WemL8;7LiSfh%f1nO` z;8EL7Y*rix0ldMQ7{StshUg9$c4CQ{5Zk2nr26|acYL}Gj-5A`2{OFDG&eFCx1$`l zM6edDh-0bHAF&4#A^j=-sGh7B=U;qf1>~nL@#1v)-p-~QldG=jc5gmJ4wu{E@@Bb; z=Hjlv?Z;h(+nME>>2ut6L=Vq1z=2?5+1J|P>RW?QupDg*eBlLqjvLd9=CzF1R%8YC^?eT1h9 zygf+bH-+=fB#<|)Rr5f~q11)wI6fqcAtC{8XRkt%#EXp>;uE^Xy0vWeiCh7uHNYAi zTrNhq8pp0xIJT`KudT^yzG}pomF3?+4^$VS=sK8Dhm%{*pav(qunecRi)rK&Es)jI zYMdjpk(wC6W=8R4omseE3TrgN*oalTWzf>Ze6D>&@@NO|K{$*O&qeGo-sr?|%F7MB z45cnY`SoBuD7_D5*PtRAx?_>pH}d5+Nf}3)1nxeR6~x(b2Xf=)8w7uUEbW1h8dlapszR>P$k!*cv(7lH=viJjHLS4jPY)l{rd!i(3c|mruunZ+tlKl*I@|lbU+s5{ zmGPeO7KSnEcrGVp{Nbz{ERO9L?-AJg-JJYIkP4zVn{)y;yyY;i+yPZyT@T zy=cQBc%>lzK8e>$UOC^dF?x)rwPUW93o;)6*y{i56WiarTJqB}d;7^+jGx5oEDMh} z>)wm;cl7?ebiFJt=73v)@XL?>HIR(l z`nQ+;?l;Uat-Fm~882n}xeRZ>^h1gFcX+)wc76cudB;1oXEWNF&$~3ZJf65)-lvIs z%$EIXrfbez==c$gPw@03r}4*D_JJRtfxRDYCOe=g-g1TJRo4odpPML3+o zPE@FjKfns8ks)_hjQiQP-Raf`cRjD;<%FIyze9J6$T?@Z$8DFTb^DdN1G%~8t z$cS0E{T-ocfd2h~d?$dn3)|!~f_K06=qrqe84DF!S7F$K(k6ai8XW&NOa>DMl|uqt znRRA2rhOC{ocIZ3`uiQTKL1FAE?T74h3XboFRrQ8s_GXX!Nmg)Lkiz3d%ZJfWCy5d zE)PN+`v>r61E3WQev#=|DB-Fc48E+-|FLH8V;JUqT zNuw5OlBOtEGzWl=q5zlTLAyF⁣i3h7fR3MSeG{yTt~ei}N%Ls*tpP&K4p!&kpwt zS0D>GgUJkN1B>S61+t5V@mq8`z z&-v*a>kr=k>sR&$uiRg7``e!9pL=`ri=Vvu&8%&a9j&`=Jn`#Gp56WHpZ~{q5AA+@ zVeu@-4O8MvUmv;UBL{yw5zQgMF0+BW&Q5mf`nWo{ zIu^A)r0CqlUu7xoZ(Mp&S6S`hYt8if@58+|{|$!&Hctmcsr_eD{C{kL{{;iH)_(v1 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Configuration.dll b/external/binary-reference-assemblies/v4.5/System.Configuration.dll new file mode 100644 index 0000000000000000000000000000000000000000..d6cbac98ac822064d2085ab05fe4f5c6cb724bf9 GIT binary patch literal 67584 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Core.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Core.dll.REMOVED.git-id new file mode 100644 index 0000000000..f08cb6ffa0 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Core.dll.REMOVED.git-id @@ -0,0 +1 @@ +d3feb4e276095b21c24ac01252ab9913b6c56dd0 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Data.DataSetExtensions.dll b/external/binary-reference-assemblies/v4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..f0bacd3cabb68016bcbcd85eff7ece5e0b122aef GIT binary patch literal 19456 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 E1BMh-5dZ)H literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Data.Entity.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Data.Entity.dll.REMOVED.git-id new file mode 100644 index 0000000000..678bbe35e9 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Data.Entity.dll.REMOVED.git-id @@ -0,0 +1 @@ +02057de61a23f51c2f3d2de5e9cc2230e6f4ece8 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Data.Linq.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Data.Linq.dll.REMOVED.git-id new file mode 100644 index 0000000000..d1e99cfd97 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Data.Linq.dll.REMOVED.git-id @@ -0,0 +1 @@ +b936fb21c7587e16b728cb6eb48e2eb4c07789b4 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Data.OracleClient.dll b/external/binary-reference-assemblies/v4.5/System.Data.OracleClient.dll new file mode 100644 index 0000000000000000000000000000000000000000..d962c7fb21c4d0e2359c5b022276c567f0a0c60f GIT binary patch literal 74752 zcmeGF2Y6KF);^4{y=Ril1c(Ts3_%Dry+MdnNrylhDHKJ+kPI-AW(rjgAc_qO2jz(U z*b7!Xb`%t%ctkgO zyo6jt{~T6A9X0TgD7xRfYtTbR@vcEt3xch&%`HvyTl@{Nwf@G& zrncC*f!LPz#@JwEY<^i~Y(rCBAhlb!$f1_&@&ck_!|asM0Wt@5F+4=E29c#IJppno z%(C(1+_4ND=bQiRC(VK0isPc}vx&OPztGd7DjE^|PPOHuJ&|75qlN#wuvj9LK>vBb zCu>HO+7?*S23|D)`Gw9|R@)50b5dIZ^-Z;;@_@WZ*#_h3_{%2BbYwP{l;*$^EopvC4 z)05p=>4A(nT|XW7P+(G^^zrBC9Ct;}kGJi;d{8vbtQF&jNU^-CRG>Z;~5LyH4{9yzG*HS;}2b}`;3YA_wjO{``H*ty-DhB zDQGEPL4*%Q=Ufs_6c0WMuTxODFX1^FFOJ6JZzx_{@rs5n5>E~rhZna4qKh5T#!A&L z;q-F1USZ)B7o8CuN%!{J)+>@e5X|b$^4-92D(KTIERx#$u>5=9uD)dS}@r%C-d z?q*;l?d!+(i7|}Xf^PuB>5~|?d9**{JA)a&7!o!#ihM)UfCYjx1e*lU7Q9aIKEWpi z_X&O>=o-dxlLd6WhB!^Q)GRr$Mc4vgsm%vE+A;TCEPQQ%c8i>yvln_aC z1kV+`VibowBKT+)%aO-3jsb>K-SJD052y2v-*|i^JuTs13Py|`l+c3`#$=6&qS&#S zW5cQ2cy68gi5z$3L@vvONXBy|3 z>XOf?r{;56rV7p!Y!=Kb9^JOS}b?M;@?x=yuTpY8Nld#7ncq)(UGA z)}1Z~%cS)dy9=zCE~DkN60^eN!fv9C@ZFtWwAhv6^CPfrbQ4`8Ir~|3_keNgUV~G= zmu?ix-eB8kGZ_0E2DXKsuykpndx{RbeH@XOhA}ux(Un{2;m?MK?h<*Y4jUF=& zq5is)&(&&fp_dIGCg<*yD(p>TfXR880_HW|GKL774fYj%VB{dIJ2imqqA!ePrZK2H zoenn5_{O+VEZ2fn8{ZnYf)U*U<~P1K?iAe)uzmEsaj)oJ0NX~t8?T7ZcffX$X)5-W zun6-@iT5wC4=CCk>*AdCb+?+IQ!jI#D-0|i!{Q8Mq#sA`2@kKf&sy^1aA@CF8H$GLBZbz z2S%{BRKW>?(*)-Wo-25*;1fyKp1;-1P3CzZV`N1aF^g-!8Zjz7W`81C!j%LU5^D0>Kcs|C=T+pm8o3~tXbo` zq7`V8$kkmVAaCh15cqVL!N4233?h|}X@EyU=1%DEBcVm06;4y*&1yckw1hWLk3FZhE z3YH7b6r3x#2x!px-BNV@glfs44c(#I)Og^)sBB$($x-(!JuHP;8LJ!N9-7*xa}^8 z3bjab)MWU)T=06qI|UyT+$H$B;3tCL3!2Aptgb-iIgFyvLk#NGwGXg=*BG7WB5w>V z`yazNSTIpAQ*ex6wqUhb&K9f_ERygUf^!5L1Xl=NCU~>pU4jn_J}LN|V2?;n_hpek z5d2oq)t$q83C0M{?ZzRC1cyk-PLyK$%0!XV1ZRqNtjJRYX917a6I46S>s}0PWA}2Y z6O0IJ6l8U)g69k%heSYL)_o>$wcuL8%LK0xyhZRH!G{I63%(%uy5I+bUkd&r7=A4K zJXWy3V4UCx!3lzs1uF$l5ey2p3$7BpQ1A-DTLkYH+$Q+E;2VM;3w|eP_TbdJ3l0!W z7EBi$DVQZVMsU2~M8QddC4!ZLCkh4xTLf1Ko-4Rs@M^(31RoXLF8HG0n}P=gzY{ci zat@;eV+7*_(*(x~<_VSw)(D;^c$VPBf>#1nAF$i^p)RxGIi(xpjXh^WtL6uVxAx>2 z)j50I+j9;=9`0GE!r93d+Z5{PE37i<+=Cb&xQ zT)_(k*9&e0+CKjteHP;0B)CcNAA(N^J}3AhuyZL?{$G`{sPXk~G|$GW4%N8hTAjY~ zW7NR(mEQ_dFP3`?rU{M{ED)S2I8SgHFpJLVb)Miw@VvH{S_ju7M7~Dw z1|YAMY^m&T?R6F8T{w{%^jfd$fM4~x5%{Zki|TzFWMA*QfWvxk1{U^y5EzZzX3@;v zkKraHDKZk6Dd_Lb@~MK$dnZ6XzxT1gjR-O5rrz6txApD-KGFMGpz{2*XkQgP)cXa5 z|BP72lG$f3WKW;hfZh6VKk*3;>oX9t>ThHEyal&tmKSMV~y>&0f1XtxPI zDNvZ|ujrg8p6mz{8?`{efoy z?QygzdZ00Vh2;%LGSB$TcG0BJv4>=k#LB zD+KS6kQ*R#DN-$;gRDB|os2<`_T#*%oll39?w|ceAmn2y#W(%9Uv+e2{0-$bC?bZ- zI4~v)He+JO0w=|A9hOS?biqMgPe8cZ5!J=;9z*S~)b8js30V@uvJ`lTcUFSN<;Yt!UHfE5rLUb`@MCmU9JP z6Yb}M!y?(HhuCbCkiH`C6S;?I2T4erV1{6}V7cH7!ELZN=#>6k1FDSk`g2ci>pvUe zr%U*`f|m+9M+%RT47vv48FVvH{jKWzLVrKvs=p1?FLCNHCo3Pux4rzg29~c3!$DU5 z)_AIu0>i>It4VrJv+Zj(Tg{9euO9N>z(U$YmJj*WXnvv-pQ#BJ5=tE8m34$aKu(Q(gd)+4zf4mV}; zx1Js!P!ad4W(UCD)a-lY3^!%+x1QVse;xk5W-$X#j{8Wn>VXU5zR=7+uqEyr%~pWn z7ES)v)1?EK$Ni$&wF6hj;SD)Uw|(HHagkPMT2C(zyebaI7)$r@z`Now)mZH3fe*&< zn@aq*o}y!)j2oia_}G8O#cNg^`(j*@X0@?z#ieVuBKFd_QJP&CdoXT{W_QGX8)v<3 zgcM$lHR21k?uXdO_^F!34*F-@G|fhVRcTf@$QM6Dv)O}&#GjdVhbDL&7Rvyrd$I(-oy>Q&*_}!ZE2zX619s%!b#v_1lC5brK zJOaMbj7Pvvn(+wuRWlv|rc5^+k4Jz%W;_C#H7kyt8{euKkANkb@d!9WGadn}G`l0VA%2Z!JOVD#j7PwF&3FWC)Qm^K zRhsb#xK^{-gOYAOsy7|#@}r-&+OzY*x-|KT_-!`x+?4!u{8O6Um;9WAZB5?eV4RnbCFdo?b|>$P z->$v9k^Gv2eb9-0k^H7Z_XBi0biA;XHyw;u$_`7nipCuCM0|+#OnD;y8Lb-v_N->9 zV9#lm4fecdQ^9s?HZ$ej_!l*s3*A1=>cL*o>%rdEx_eW8iGRmpYRn*3*#B=*~F`d{i=0uCEh;F2j_;>+v8ja#A(ot4oDidR<5Q=F7!{|^Na%0tXh!NO z3CCGXm0^(9%}(_jgEb4J&QA!jg{gbuhicuD)P{r*J2SN6i8sz>)HiKY!UW9* zrd=05(PGMHwyl$RIX07e${67r++r%%(`=pO ztiooVYt#0`S82wpQ;2cdLyXH%tu46>A$E7#3klP;?vb>;4%U(Ox@IabGi*zGG3}j% znVP+w_EEwti}70JH%@Y}FB5FGh7P6ukT6@v`xWeD&AO)lnsAE6R#SBPmkECDB_Z8! z%+;2o(_M)nR+PRkKE%q>eLl^k&T8#=(nA88aV>=y*U~(#<66>;W+3(XwvHM*vGvhT z-8l}OsmhWI|Jkv6g5^c*h zo;ev8B!pN?C(Bh1-G^S@OWBqko{KUvw3iOg#!l?!j8R(0Hw&!;7FzlI(70w;h^?W` z8DkS|9kZOodR-HnGl~)$Ev8zm#V##9f_iDy?99~4#1Pw>aZ=(U?dA21+QcQ=@B%R%y0@ z5=N{^TxD5yQ2L0!Ca$*F2C%;+o~3oikJuBxM(gsR3$Ze=bG2?R*!h|*1Y4`waDqN)nJ!uwh3&5W>11$uGwy|D>T~=c9mv_M%<8ijb;;)?nu1WVybqp zvl#D6cKe)cbK>7^ohM@CzWD1k<6akHJv-^DlR~-;G+^XIiMFMx`5P@Ss;+Oc7}xbf zi8pH<*Y&Mhw;Z|<8$5D*;_X_OffVl0EOX?p#5=W@u_G@?xJ&EuV5ymB64*Vq&QlF` zpJwZj-u;@*h3)~(P8+#5@gdEggyqAUEkn*8)$Clb$27YF@wRAoXvE&c#~tjA#3vkV zSK?O9CM3O|xXog!#h$d7+Uq-+&*x;HCO+k`{3daS#X3CKqh6lT?7opcUx+<9@?VKN zweH1{t|XhOS?XEar{~>~UnbbB!}Hb1J@Nn4@!Xl46K%HL(I{nssnv`T)cF-#5UbNz=nbv08 z>D*DJNg;Ogs4C4?)6=6;bgL*TYp&LH(689{?6bVAq2XDl zCWYAetkwZ9>k^e`wItbW4V{#=H0c!`@1(31nsrbR@m|$ATb$J|(PpdY>`v_RtVu~B z-R)qnS@Alk4D0*r7E>#U&D5RT8@8oqN7lZ0&FG`7bCN>ryQ~Wx?2UA~pk=ty3e;W@^Mana^jl4v%m2p7=LypPsbQ7bMthwP*b3 zrAZ++b@W{h#`~AItaz&Lh8XW(LhQuRQHeI|@XSLBA=WAjtoJI`pnX;qEBFHv(@ykF+V$WJ;qY< z7uvFNY((-Qi>>k0jqR5Fm1b>VUt6q$&KVn>{EdV8I~2W|NQ*pHfh3-*&{u5oe6KWo+t>=(`A$E7C!s@eE)(aHbP?4(Ytu@gIcT$Z*} zBZoh+$$x6(IGN99GiAx2<`hfm*CBTKIG-=XZW*^PovW=t68h zbY87n3|)wwGk#xuq}JUyezz~g_$1s#>-Z!bV%rd}tJb}Scp>%`bltS>H|RplJK=(a zD6Na0;PZvpzzO@}kI}lM3A=qZ>+sy2HZ{4srCUYEPw*Qy>!9(SSnh;r+OmU6!H%`! zbx<`}56uD-rYHB*K2Mu)a&j-tPM=Va+}mR7=XZA~j4qw< zNYVh!uAi_Z*=DP7s(U19pw{u-p=NSc(~Rz)up-%J9mX5!=O+*D6mN*d)UBq?RKIqz z*AtxV)5M{+7o=C4INWBQ`-ksM;7?=o-x|-J;jcT`d(b6l-FMK1SVY|3ghZ|L#l7xe zNzf%}-2~`t*5T=xuqQs*(sg)VpRhU6X76~vm|zS}v2^cvV@`;0u*oMFgHyGx9l8*^ z9=bHGdjYx-`xUx$txK2~q1kqtK5>0=hNat18z^<=zHm(z!lD*HNo8F1> z91@Dxd&Gg{eC@LqUJ7hRyvo>Y9WBoOAlYUev^M(_2m4$0;>1E7@7nA`$&)m@HT$RJ zV$JT!{#SB|X0N1rQYth%H@RC%rDhLj_e`nMY*X;T1p(!&odnG#| zWu|8DXQ!vk((Lo>Q7I>C_I>u)l#?|3EAleiVr%I4?1?ESYZjGLm~x6{Yg0;6YBU>= zQr)OS*J)Op)0`5}tTks*$~=p8(Aha>q|CS2 zD!K%0fo3=4?1>L*_CU^=DIxY^&f1iPT6ZAl(v$|x4(42y(qyp?`Y9(mxkWQit|!H2 zYp6%=O)0Hfw-LE+(`-O)b4t5r@ws=TEYd7D_mgCst)i*9eq*uL&C1;uA7W?Xb~(iA zatEY@*s9zE$xC#+E0Eq&i}4J0Z^|+U8sW>13sL$lpr4{Ej_>|xCgjp&j3sDpJ$eavF(sDIwn zVOumi0qk*$t*1J$Cp23Nw$-+jPg88O7|*o*QfD*5sn2OPFTXH# zx8+ma+U{|%l2n_iJKUEnU5AJ7a6^pmaBa56b7uY?2jd&vknWQFkfrL^A>B0&ow~yf z>7rAsQ*E}|b65UJnyLF;Ti4;?`(2x<``x`(uGi2b`Eycjwu-jp&rjWF=~mHRuvawW zdyUsL`#9gps364F;2potY(|0|Pu+67Zh5iJ_7+pO%WpVXPU3zCD@uGzGk&M=UCjci z8HrBTkZQ9Ixp{uyvg{zfc@8nYdHzW2_^$b&W_;KDiN(|@<6uz3-*&{3&DQT zY&qC(nq`h$oBF%O)L6lPb(g;lm|s?=hS=3$rq*o&b8Ge_Sh!}p!91Gn2aD9~(1`V^ zT^(#~YB!6i+KsXp*X|XmPIg`DF%I44#O@9@D)CqcyD7DY#Z=Arv~{TYO{q59Kz$4D zb+G+XyyAvunVnYIXziS*+P6=t?!a2dvCuYUGq_ z-9M1JW_SnZk<xq%c>r zePDH(y#qE+voBGG1)3ci@m^}s!9Gnr)xo|_UFcvxrPezbr8PKML|UVR9h27NV7=3t z9c+K-Zk!T+NCK|C(sCHB?l1X4-iU-L&NMHQStVUfKnk z@rmI=i*3iJ4c4VO+2v^$XAn zKajRTTP}+plXkh*l}_jubA{HGPIxTsO0An;xH<7E2lM%^w%9sqE_^EO8qLlwd?xK$ z%{DpMD*9*P^IErxJ}i7W?eCT)v;7WcOxm1yy{*HV^H|yq7E`_MMh7cMcCz=zD>Ks!TyzYw}VBcKWH&^&#=v6t3BN&B_xGd%%s@#5aUlaKB+DFlZ`g(@FYx% zOMlAJb$Bu-B|F%}Nh8v?YhB5t;~ngzN&Dh=Xx*ukcKd9$#ZOswANiSX+pZqIy`qy!cJWKd}0#bH?-J?-aV7@(|2n2_N2)U_C|7k`mn{303e8*26g(tA!b&t#u3#C((Y#qZL(QImK3LTuXPlJw`bu6A;TgYhRH zUeLOlq;4@bTSe`Y{l;!fx0*7KnVD`g^}fYRmJaW8P3{&GVwX+c6TesMuAQ8m9%8pm zu1()(r$-MWg;y-LhMsaTwaVDKRrJ#2*Ar~En%!7|xXQqeP_@WEa-?nsYd3pMK7UQ$i zwdwCW*v;u5XfHET?@a&D5pT0*9aMSzo#`JrbdQ9Xhd){Msp#xeoz3`E_iXy-mX1$# zFQy;Tj8Apnbn^MF#kPCyD>4TEsM(W65t^-$^nSAAdH9oDirK0EEIK|#j?O=j{;Osa z^FL1imu8&0Y5kWRt|gz(Wiho=b=x|8PG?Vii1i-vQ*ww^CtZ+$ugj4?wa2vC2Fe@p zeR{a1+dySt9?j;0MQXMXtgB`TBg~8_i>ZBNcg^?{FE-;d$@l5U>Uhh+dTL9)pTL(A zS?7nd;WNb6!LpCm9U2jpVgKi(4W6r^>!)>_!1`-8A*ol!0L`9+ZlGqn!3JrzA8d%l z)DB{p#kddl&(O^CV$r_%cuS`~vtTpzNd%j9c-}0E&#>8Q`P`b#@a`PmpSGDg!`iHa z__JyFnk4z-mL8SpWGNYm4qawOl7l^-f-j!Z@y2GPIaqGSNSk@SEZP%4TC<-VO!cLZ z&Nanp8QqD+c4E~@Q#0&%s%P0uok_-6>2WV8&%jqs$)D;kwQ>N}ssMqWy2U|t;Q%_C~=}w2P!LnRM7f!t) zBgC!&YqWG7bpKSp(PXjh^yJjrGeT_NR8LB)*6l+IZJK=uUAx6r(Z8l1NMEFN#}+@7 zvBYAk_bdf7=&t^Z_W@0MK;&LsIb@LFJ_-3mwBG_<^gGZ^9r(|fVH9~BfA?8Wph5qM z%`jM+lmx{8hd<7Qp9zq|s1S&6g#$+5e@C-7KeQ&z7fbfg~h&j3BN3+SaiKz!#TunWBo z>`Lze4eIQN`_;pP_}f4q2P!{Dvw22rc8Sd%V1#%MS(?aI#$fiA1q`F{z;Ma|DoYO) z4tA!__VdNQ0paM?qE$UP3#D_(NO9x;{IgcKCcJSUwp(*6{tL9-n$CXvKk=Z(UH`5o z>S{J}VoKj|QLWVZ0$><51H)+vFoIS9J#;?MpzDApbsxz2zga@;k>0pw&TA-(OJ*Ur)I*q64@!IJ543g-bB%FbnbOuS>J7Pb$Z&+XDGeA# zqk-Wx5g0*JfSoNlu3K!v@U03*YPsgyjuMN*FFr~*ds98?@Ep47cG#;_@NJvujS+M= zLOjw#ymUY0NO~C9g&qeUEuSy^LHHkeei!y$@gFJvyNLg;NA=GoQt7IZ&MSgT^64f| zEa&_fpg}`{cFiY3c2kCERjHj?6{1?r>Fs2(Z@ zctB4^Z`bQJWFE`^mGxSUcfDTA*y*%h|H1g`v|j%&x6$i$?4PdJN7dRjeE59$|E<^m zXVz;TgS@Z!)Abr7${Y#^^X~y+*8~uGjE+ z)b$#(y7J~n8SNGM->%p2hV>e0VZDz1AFS8#qt|Pc1?w{Ue4DJ}%fCcg8F!&O>NbZYYQ?n5xbmMXN*EsG2m*QO{gRVj;Ou8P3Z{QVqlgOLJ z<|?4;59`F~KU4z-sqn|e&o;rQ1^Jx?Q}(Ma*{|Z8rVk5o({o3)bj!{*jP^krPW%5u zn~49|TLiuLANyoWkLCG4o#*Y6IqS!L86V9kTj9ij2e<%l!b6Nv86#11slb`+Qq5SS194UlQgO12wCkm z)qMV+?@yfj&m(so&RvSi!;v=po)OjpshRn5QcxlPceQf0)aNOJ^97p)Rk@altkBsT zo#DI_Gi4uQkP25d;IwhZRrTo%IsFe(aoYTm97@Hczi2;B`N$oPv$y||+&R{tk221K zDd$sF117D}IkD>`l+Vtdo#9SDe^lQ8e}~(%0jK+4kuQ`QxLu>Yi%>gxMmt3H2Zd~J zhb#FZhX{YJQ$>M=**8Z4@Y`%S~_K?rSh*l zt8iXVO;X`%ZB?>U>y#grvZz=r+oe7{#4h!b;r~ReFnSB+4X00m5%}hJUWpD*#jZVN z|1n~P(>K5fd}}=0bFF&ueewLBf{Ocp4talNQegs@_ZGZsX5TQVlRl$KQ=nD5;?Ahv zpQ;kAS_^n3GU*fvQF5br=KQ;@aCKf-BsP3og8m@#y}+aGA$grL>A$+7{h>GKEy{n( zvznJwUsAK~|73npE&Jc`(0NXCdie91(`m^k1$?$d+Q=uTD%Fn8J>lchI$5&XZWGI$ z5|SYy9PT0xchjGRhtVF1^?%n&eTwYB{~X)I=ExEHmXz1P_`U5y)^{Xm~D2;4R_ z!Nqch;26Oi!6LzFg0lquf24C*kV^Hv;{}-+^N@ZUf#v@?qdJBX>%8 z6vpAHMif?&rNFLqBd|Mt3XG=yW)yy>Gzr+BrT}AU7H}w?3XG=z+Y(`kc@1g+b95fj48mbMj5cXQ3Z@PW&!&ervUpKwZK?o0dT0%0E{;2G>lp!8OxnaLp_+xMof_xMo%wTr+1GTr=kyTr+Ephv4TbV+U}%czZ^? zJqK@I+KUh`y^0Vo?U#@P@b9Jf;onOi!@rk4gJ&;&3C~{o7Cyc7qv7uDrC*JnKr+Vx z-DWn>V?GP)YQ6yMZtev}o38=;nr{L7o9_W*&5waY&Ch}H=GVYv^9NwM`71EfH2QdH zv>6T@Z*~D@o85u=W-s7mvtJ(%ep9vrc$LXDbDhaGbEC<1a;wR0y~*T~-eb;y&Hd(V z;6tV#_?S5lxLe}xmAJ1;-2D>wfXTJ@zIgc9GpMT zi}ZJK>ai|vk)bYbk$4xkNV1E4rn|UBGF{vvqg~u0<6YcWvt8U*^IhCmC%d?>7P~nA z1Bh8Thg5HQ;Bi{lG6>Zv($|y$k%&^#Sl#*T+C|e+qQFzW{pN zUje(izXf)8{{W13{|xNw{tejQO?@LM*6jigb%z7v-Ckg_yDKo=eGD+u-2*t<-3vJ0 z-4~ecjsfPo2LLC#2LX%SLxJV)IAE1K5jfMG0-Wtm2hMSi1lGB;fD7DXfc5V2z-ISE zV4FJ^xWrumJl#DRxY9ipc$T{qc&>XIaIL!vc!_%k@KX1Qz{}ky1Fv$=0bb{>1>WeM z2fWoC1a5NI1MhJ+0q=LW03UL<10QoQ0d93K2X1%&1^A4674SLtS-{=ybAWr@=L27L zUkKdqz65x{y&m|!djs%e_eS7n?yG=bx~~O(>%JcNqx&Y{ukKs>Vjc_Q9@{mHdu;bG z?y==zJc6nue5QoY4&y#NCyaaSxe~rs!Y>i~%f)FFdhYu zh4CoZ8pfkwyZC%2j7Pz4iM3ZOUk&52xj&4@=7BICo9~Bxh1`A|_C2tBIOi~0ux~i$ zzkm2I2#*ct*=%Sy`7p}D!+^=*k-+ruV}P0A(Y`49GMx8Q--bUw0CT%|_*G(2L`5I0 zs_2j=c_N<2=U=-<>>hwsRYIaAq_1FqAl3p8r|b4`y?MM+hhC{eFRv8QUarZ$Uaq(P zUM_X4mrFg=%d11Ymsg5pFRvZxUS2ygy<8ikyd~W_x)hn&aj5tIo^o*8(rEU-e#It(v{OTD5tzdZ$v1@zRJ?8X}k^ zIMVnIA>)khBU35Q7z3PY%m7vzb->NqKHv?;3&1;!S4Y-i2O2QmGkOB^Ovd+IjH}&@uCN#y;L8geLh-;PngAS0`+PSb zB;mNH!uVI4o)ViO;Y09=*dgIbv=ev-&56wm=eP+G=@C9LiR!k5f=f|v$_=RQ-IWOWQ*qj$p3lHZ-ETq5pzb)e3fdS*G zh))LoW#~?k-;3yJJTvs5$X-t?a_IGNEU#y|$Q(E5SxC3{U+v*k&J*o<2!S_GC2j7% z)5AUwdOjIA_BfZfr*UYg*DD^p9CwI>cF=S6-paPffKBCn(ufo!=G@_PezihL0Ap#cX) z4tBYcJOhJW*ycRQg9n}`@@9N6c! zp6vf%&sx;{!Jbl|(Uo-F5N|Yxd!t?Gt3}ZqUKCx6kfP`=#`8mh5)zbPoLCBG3(iq;JcrK_Tq(F!@PHsCNG!o@!8wB0C2{yxK}u$MrQnl^PUIloS;WY!V zH}N`z*AIC8gjZPDmfl_P>WNnjUMYB`;gx|`0bWI6+j>t8d#ZOCUNi8T1%48qzd&b% z!yfkl8Cb6fziIj^@Spf~Pr`3}b~VDF=>knx+#2)*_M&5O>hDfIoDYu!8vqsyHVo2m zNO8b;_)4HrIPH(2B%IMxXcDDTH9`Y4f*Nt+Z^vozFR)mF6aSg8x)>+@bu zz`5}@%B9>ySls# z`ROjN1IvmTs{~ctQ;Oe0NI?A57rzHtc~dy}n2!;%xR^Z`c|Sj@HYxIJgl7t_aHOl^ zUQql!w0|xBMaNa)R}^!uoIYc> zxhJSmmK}2ih!|)f3@o1MyBJ=2?Tz0h+ky>I1wP zGpKj3TWa!i+}5vZ)oxVhA>m(opGQ^ zFJZPeaI2L7`6JBO_+?_CNuOipHs}kWNrxy6@|Qq-mJBnwL0`*?@grt)eD(=*IetGI zXwom3)A38*K$CvM+-}mpFtZ!maVO;OfF^x!+zt5$ zpozP=dx1Y0n-TIe5bbXK1Nf`KztsL45bbU}4Ec8;b{6KNkPRTljkyJ~3yA;yW-yE065wF2v}qu1gH! z2jKbUPrwVzUw}88zX5MEe+S-f8kl45FkQgSW*G2(GXnSz(+hmS>;iny>;`tA)#ux@Y0YpzQj|0AL4g|ho4g!8>4gr2|4g-#J#R12= z5`Yt2Nx&0aDZq)YG<=O@O=vi1Fo`2zeP00AbllHmh0}r@@z;|2=f$zE+fbY4QfbY9b z1AgFY1%Bvi2mZ^o7#QweinJnt=Os0F4kwP0>Lonmc zb*BL9+-bmh?hN1p_ekKW?oq&c_wm3+_ZVQadmMJt10sgdO}(!h{NP|RhS7C{u&p=Z z=o@(^Q21cxN#v7f3YE$83_3%eD`?|jj9koAcMNvnc^-aSob4~Lo)?nuIOZ2qr99VJ z&-K>xGW>2h>;GmwH(Jjt=>-YD8o%?+`fIJ{-)VyI8>md4H_>`|-a>cE^ET^whxNSE zdfsh4@3o$rao@v!|3L@j`5=8S&xi4w+#LQW#mI9DRm<}U^2>7@t&rza_|giZ_^L*e1~GCUEZTn^8A1b<@piKmghlQE6;$T>SLQRe~3ZumHb}1`hz!mas>Z+ zu^qzUKa9MjlAoQ!w&A_}!^70~qB`v;GiwanMPQdR0sTq-#+NkJwbutupyH-le|>=R zni^Z%TB&krYg?cpHQ(RnPc3Wl*VYH}>VtvCw$!rPAmNqM*47f7+ujzaTG|}ofZSkX z-DH1b9bACr`RnUjSt#|l1s4T0&1f|g|wltg2qL`mZruA_&#bNiY&P-XlZF`aab_5^H#7VP>bT( zrXedO*_kYAYzwq3^4Ev5!I>;>n#n}Y1w zj#tsNxTvnP1^Wp&a&P$!WwbKT+8S(XJR-m@Qe~STP28!DbWpLsaeljhzSNQqJR+i< zyQ&s{W2?Wm4XG8@`{zr;JHkRam{i{$_`|M6s-NW+2DuMOpF^kew=A_uQ&WAw-)OPC zriKP|H=9Z4EJPlfv^{!qV?Z*c+En#o9cahY0hQ>{jq`KcgY|U*bhX3G%aQs~155mk zs32+7vgVMAfIs9D0n)E6eZi92Kr>gJ#W}MjXgWA8ScKNeY2gZ$+#Ie_ z6>BGiZf4m*Dr*ijs`iqYB~6WO3o4s+?UlAS%+)#6T@a(QUe%c8NNWz~s9SWtP$A0$ zEe%2GZnmWk&@+XlL07JBu0tKv9bUY{G@VOlE73%M6wg+5j;NZ|O5D*a?GVf`j*5{k zttLN0r8QNR<(Gv@z#;ifwe37=FtIf?mNvBoI;#tov;`V@+;t9?d7{x@e`JK>U_($j z>l_1?mF>;VO{nF%kjCzo()sPaiutEKP*Woro*ro7)J4V^L6a{Pxx5AQd~KT*-n_IW zIDbJK6)v&u3zzV?v)T04kmL+6Z=YKqteqNITGg~L&`3G0t$~KQ^-GH~Mwe<*60B`$ zYHga=Rx_niChntXrUzTw{q>b??RCMXf1|FM5tw^4lS)j7!TF8o#da>Zb!sNJwKaDR zDQ{{GF6kUpiMhQc*tWEDs2X+XMKu-vxpRYUCDXJ%uc@Uz7|Mp#LF|MTt>KZbW7uJm z$shis}g0@yc5Qt@e;R!s!vp zOoun8vXEEW#Z4^>kCG>=DtOAQm+Ta_H_FlDPT=x-xE$*Wk%Kv5lOSCxS_DrH91t$~(C z)F2|XwxSyANbd|}*3?rR+we39>-thAjtYQl2g4?5p_7aCIRZoP^?TYF1mppFXt!TKh21RbZSar$WKG+3Yu8k#ZxSY1SK zw@{pb)hxPXEJy|C2V0x#{Y#}lQd8&?wLzKfRqGbDmbTZ|6B~=Z5>?XRS7Q5I6$O)_ z)PvQ${uYcjYU8cFtSwa3THT0AbW%w{NzI7`6=g-GMO8Q|@Mc~- zD6y=i4jZ<5OCkB>>Rz0mEBWG~?ub*7pIcI?I|`wWmn@~}{ub_RBgopJaHrzkRbhP- zx~jF7!w71eSTI9c5r}J!Nritg@r#xGtj1!DRiX}#B+RyFy=5-Fo8d%mzfSvXE?k{% zfQrC8%B#mV3o`&fHmVgoK(OVvw;4F0a8CH(g5lB7OfoD`i?ag$mZ~PKQEdx!SiT<% zDQ4#;Y-9tD!w9C?pgKM@)dr>Q>*Ux|=ai*>Tj~Ri&D1J`dtNY5uPnr@k%yjDOfDV9 z!gSs!*kPz09fb1O2bMZy-#&Ix&~dyW9KHPQ^=(wOpoRCd*n6uHBKt8M8IcA8OPhG2 z(0#tNsRYNUC6*S`f*PqXlMzdD22(RASAezirCdMeLK!OsOE9Gs^3+IE1A%6dWa1(0 zF0f(s&&Aoay`>e$Lp65i2Fe=im!cCkU}II*SlM1HtD9ruR^BD$R-XP^RgB67=&B9% zGyE-$80oDlYciSRycU}5h>yBl890aPBssa}`oI#aO7x0b**;gDUU}}xmu0`)-?jkz zXPGaYAv~CJT3Y-|9d_td0e=IJ4JiZW4ZE2t8~x3#3z{(H1X|H3+za(YPTVscwgru+ zwFlZ|cEsr(dG185Dn}a4*wP0BSlH+D@V8UKMl?8Ysq|=p8Ns#%RVRje_~D%6)yrz3 zI{`WbpLr<|I+#;_&aBd$l7b9d7-0(|Z6VVZM%hA^EgVldx!QpiM}$I0hQ!Q}h@FTX zEh{7*PbFogRg+b2v^XLZIx-|?hQv`JF)JiGoQ)2JjtPkw=?*!=A#?6^>KRVbNy8=6 zW?VK+xOAFu`846`(qy!gjByfV&0&|(DGwPVXjVZbm6lOX36+;nPCn)4QGP*QQAtiQ zO{yrXE(goyWuc-VACLT;s)E9@ijtfvDk`n2$*ZoYC@9UFMa5-#4w6$ksXAv;0n#nD z#j1jeilVBridmF5Ij15g54@(bpo)r%U|UpKRg_o5O+|S*#RaALITe&&ol_igIRlYl znO{@^ry*bYj{M|T6_wa|t1NUVDhnN&(&`c^7MvmN%BsqOa&9fV$PiVjZGr8aC1raq z0rFl`k~1@RR#idei8`dPXl6nFjH3Li$vUVgA3H580%VR;U5F^shqV@0Z! zwOs80vB3AJb1g?z^xCBAZwZFu{T4WA?$`jBgZj1M`EJD+9IlSWmFg#d?k@4r>|T zqR7P@q5yZV!XYcoD#i#7ElVCTwMp9l88Lg~_@~WqCz4`2~eJ)x}jJS61ic z6;xI_<(e5qRg-IqN(;**w4$K0pkjJKehoS?LaS=3D+@$XT2_NDlOr;^YFULyMWxeo zii`4VCg+sq7h8q}h^k|VlO=#H#{zXBoalEWymzHaDt37y+Vz)sR??kQkkez@PM`WvFcsZ(*vnj9j zIF1Lo2GNq(G@ub$sV#J;NA2pq2AiYGruG)h80J;dWzi+2hg6nTSL7970xjgORxqgolV^S-Niwg1 z=cux3%&@S=BvD>gR$N(hqKaKoRN9G`=TuhCD67a9>?AZ*}y z@~N|{k7}@&ugmqXMNW=8=^+fVl_u=hZ=4AKGi0 zc>j0UHLjdiY8D2T@&OiGp`aY{amhSq#8IZU)JXwcFa>K-G`06_B`KA(I)j)q_DX_{(x*hWPNb9ltqU+RFz9gOfFWm%QS7*RTC`cK%$zn; z6j*l@Sa=mb)@W|(qw^Fb*uiiT9wZf_uM+ZJ5s@{m>B-cvLym^?e zd9AVEA&{9vGd_2#lLQK;1oUWir!6&)g!uXziAnC@DaZ>>Bh_1Pir~;PABzqSo$4@J zz%E0lSrB!g<%*M|4TSbqo)OE7cxB*2J~c_xs;u#WzfN}7Jh7GA)0o;`b5Kx@#!}yy ztgKUWYfG&ktIdxCM2l$c<$GxxnuyJnEqXK`IXOUz$$~UBr-Sz$aD`fr zE5tTZmkGhvrg}dg?u!G90`)kvccOA4<#zybkqX%-rY2nI@><-Mk;OO?2XAzcxm0SO zlPkrXBcuIsoYj)r=4)!50;-iOe!y2P7ArnV)Xh~_5vrT{t@lSxYsc+5T74dF7DTRW zpU1Kc3mK@`0-z2uNIgeTL+gB+*U(0OeosVNSvDr2>+w{+RYgzW`wVVBEc>kFI%;b{ zm&5y$%`CCdwzQeIRqAa_B_aril$MqS%^Xt>h?5XiMN^}rv58twt5>TLEV;io)7PgZX2SJNZD2u@yuqa88Vm)s$!b=Qn$~4hhnpdeKzKtI zr+X_A%#i+;7KwmP6hJ{55VWEo=#h9WFwxJsnPa3t&~-wgg%A zW9*}nTC8WoJeW7r5^OUX0u5Z~_SP0i%Bx%rh(qy#iKwAXwF$Q-HwoADVHuE{J>J5g z$1PB8CKhUNDJ`}iL|4G?<>nR1pymc%AY&1&*&qW)_3cXZ1M7`>&MLO4ElrD2>C}qb5NtKnllK$s z7{=<}s1a7Jn3VYg3^GC5YD_-dU!;EtIERCJ|2wZp?yGsx4Ytud_4c+ESb;;3Tm~aG zv8rtI<4D6J#>#_L;Z;qzK9!{r9fo@o*ERYQzgWcfQcWC|Syhu2kuz!!XzVI5cKJO# z%saFc*NK<_xU1LU%4h)=Fy6o7Tv$t3i)tko%bKuca&}m-%jR&2ie~T5R1m~-ItO76 zM>p`-ixt)xtXXxOSgWMg%E@8>@c*=Tb+K_B*Ln78cezW6>)o}KtP;|>itU6>#0@El zmXunFD2bApP!TOsveL$J__HE6qIPL6X-PqV?gA;$py^+b7DDO*PGJOo2m&K88uS-= z$b$>G4+T;n1^kcz4j=Du*0n_bA_2B&D-@;WpXcu1K$P|$1q4B*AQzJvvdV*AopGe9<(3e3LuLsI8C%1 z;LbW&#TvBPqAZX3&)Ah-1O^)bcc+;G$o(P~^m*Y7Ep)7xyVx&~9qJ1@u%z0$m~$A= z31_oBxHL6D$>@E~4iKxej8P#?_P$sTv0-modTcZskFD2GH;9|NW|e_>Ky;B-6mwig zpnPr4eG#|qp;%NY7RN<6{f|1u?ja#-xZ{5+2}RkfXYIcG{OrMU)v|sAG+fQXJ#treGI=G|AQxn698V zhdp?i>Jm8QvLmi98sLv}UzCY3 ze_6EKRQ1~tiM1zoY!o%pZl@rT>A|4OM)4y`mDtOOWa1!BF#u*l0tBP8hC9eA9#kZdcUW5Xt1KY>KBzLYQVcvDacbNeI*E1}k1p5&{OsO@fNB zZWDoCz-|vs8EVBlBl63%QE@aK**q7_e*tDv@b*+UJRyHW|L|Anf+_G3-3(A&x*`QF51gfC! z4r+|0Cbf^?Ctz`4&a&`I#m8`sAt?bGq6yDGh#*3DlB(Jojfri;eu=+vmil?lHPRzM=VtNJp z!He~Imf4m&Gg5+y=EgVTcfJ0(-iwm(`!bZViqAi5jOPiHRW z3pvLvvkw{Xn?bME&^dP2gP~wEi~7060~m`i##+{43^v1lv|HFWVXq%eC(+bS$cmsV z3Q2Wg4wRrhYpyKSR$=JLO_w-oR1oNuKLcM&Tqtda!=++J%=;^-42kjTY9b z2g`PB~Zy8 z2U*qwP90&V+z24smgdTn6FBv&&qFetAZKjKLL@z-1VApLK8qeQ+mZnwk?S^*+x!H8 z?UwDFropBwkpy9%0xLBX39>O`BcguL-i*T1mr>C6WCZB$M}%3R;_Gb9?0gW?aN~R& zcA2ZDIxm}VX|9mLA{sAyXxm-vjCdG*foY|BBXqs@#~P&SAr^#KwSr*aq(AAFDCq#z zj4*7?Am~-?k@!fx#6Y%SlFT2n6O3tLkKDC-3c-*Mpz+W!v9sRTnYx8gTDM+nx1gD@ zx3gfHA~={gJWv3-S;TCTpQhQ);)s_z%U{aW*gU6z;0AW z$ip`*@hB;d2!bL#Q@tnMuRCqGq1NuBZHtf>mY_ARCEA_TOm#&Nc`#AGpB{x&gH8dEyL5(U%LqEf(ZWgOUj3~VY;BzM0(*O+r3bI-m!sD)h|gylwH8w@%LWcs z<5WCDKJsL70UBpib*#R21!6X{L?NU`0DKvPg@YjtYBj{JxrjA~HsMUwRS_V91JU91 zfU?4Fnv&soJk{5v6_-8=yB$@WZE%UBo+_Thf>uJ|= zV(Yd=*kq@8*nf2`T3b9JUGgX8p{jM02k(H4(fa!ia6V?fJyp;gtJ2vL-@&>cp*_-Yj2 za>Rm$I+aLLL82Il^wixEns7t^fY_|@!b$8isXyebh)CM83PM?~Sai669buV_5wS5g zF2+RYNZH!TWGzW7O2Hh26H?3Q%+oV049NSsKQii-WiDJjm4VB+pUpa&sJ4E z+qjr4fa)Lu@@iv3+olSBy9u`?j8k%7Sq0a((upjLw$Z50nQ{YD9JRrZxsRU#~$4=S!i$9t%!iYcw0zaIwWFn1)B;!kAw8~W;1pK+5Sa@8lP&`;tia_EflUO*k;(zU+8d z;$zlTECx0mK0V{l+{|2uiEkRooSTt0Gi?T!^gvUrJDA4$2`4?kf{0nISD^OjPQcbb z0h=F8J*quG?zH4+p$D;PAZ5eWy}7=OJ)E8=(2VceDYu=6QWz=q`iz758G}*7nHJJU zvl3;ZnuHcF5l{Sup{fWFnF9&BVz?K%I{Gb2zU{;;Sv%Cp3|o|(Osu>Y(xig*rmMHgir;+YP#~R{Ns4uhJ2XfZ0cw?# zIA4YX=a^yIk#LS_KB?I;=@)d z_hC^n(jrSBdUY!D0ztV!$Jp-f0|-oni;dOJ#u&H8xup-nJ){#H9}ht&}jQ^*X{iZR%;i?h!hufZ|^jPW?)@q?PU zPQ!0(h*x+~5&KPOcKG96pV_Mhk`C_O<25TyBkf!-l`&%$5?muZ*k7jeA; zmlfg258Az_a8`>eWNWN3T%; znZW$y%tb30jX7P3PoRUNYn=yDHyM#)|5n`;Dd6b)oQk{8X zLB{${5H8LHNrFSq41VSE;_Z7tj@_P z%0xtmRsm5Pw5mvQB%AI@5b@6+fCvmkOH**>iHCh2Ybx&JZJ6=%K=Yy>%j0!y9@t9=>$axj!a#mr2b#VEbCtM*xROA6p*z zZUR-2EPi+&NpO0=s5%9iw9!#IDkV)=ovuEFvAH8cC;%@E{J$4#XLr zQM+l!pg;Dr$~IdAW-Zq*NQezN7{gOf zgBa(xMEaaYhL-Jz7RY;E zY~45r|cuTM$djZ>du@rU(SZj$?hkc7}QEa`N zUEYxGGqrV;w+s$_I8Ciu|*w@W2JX$B&)#lb07b)pQ)j3{NpIvO=#X)skj?iRSV);6g zma)C&km|BAzYGHudDWOJ2+ThD0?q~86vyATP+s48@27s=`oQ@hD;I|jQ8ALsT z-=pxa;dcoB&*Aq4{FV^Dir)(SU&b?^&X(KHr?aK@SLpmcov+dP6Gl8k-?Q7Y0~var zL!LhTN{o7u&g*bGI|16oP@B$o=v)VAH?zFJ&`WfFKS ze!w0=WG78$2eZG7a)y}x6@)tdLAICBpU`=g&JDzm;5UljVf>B+S(dVssf!4YG4D4R zsvtDZ&=1k?sWjisS~!3YVeH3mSbiTlZJMxYZkiBZJ;Wsz{BT7THqMvfYv7BAA$~P8 zi}1-P>2V~vjDO4;nn^@sM~+Ww%)+e!GJ)_#gV#S8+{njs-QZ#m+*QO54AP9FiVH)uTXT)I2N&?8nDIfEhj=dDyi7XaX?22Lhj#B$72jf@n7I`dL@G*1{CW zfhzAdBDTL?XucO9KBNlewDD4t_EO8jv>_>gP_Hr1#HiFPTgcblN ze(mQ^OHP>Npfj3Cv4#eH%1om)b{}rv+#yWofa`wLKZ@T$!4$87Mrar<-H%`Udz)c; z9yqqp1MH1y=_lN)Mmz3I?{10n-~J*vSIy%xPMhJLq`S9+GPcD1yPM-aZB777-r86c zYFyp4uipiHue&K;#m97T2L!acSx>$TbL^WDW>YfH>bQ7zm*DnngxfU6bzV449ldw$ zZo%-y2*cAtdARlg+N*>57Qw5|A~c78#QC&&>~6vO&o5(+%wx1yg*VULA-uL+f4)AA zk>$Es!wP$6XmCrMo{8gB1%H_ZezSKAcF%TW7jeHk)qh*8jDOvYVI5S*xeOCp`0z$e zgjOMbQAQy4cM0Bq)r~i$8rph!lF*jD`Q2{ZIM;DE0JFY@wfv;;E3TY(ibl8C zt!=ql?n`X{i1n|!WBWx{OYWA*?KkT&?!-quhIbow?*#qbdOW}MxGXM?;ErLrY2Bjh zqD>6D?$#S^>I&wtZRKX08|zt+^?p3L_1_Oj`Db6 zC9ih|&v&6eU$|L+oqYms& zu$eTz0Ag>a{X1D}P4fq=eOwab6e>nbUs1nlXS-D z9HVob&N!WubWXtuQuw%{3AUL4Rc4^qH$jgHawf=|pw|T3O|ZiReI_WF;2skcO;9pH z*#!5RV5bRonczJpc&`a6CfIF)_nF}RCg?Z8fC=t1!3RtbnqZF!K4^mbP4IvT9yGy+ zOz>e744U8}6MV!3A2q>V6AYQ4YJ!iMVAupBCfH|!{U$hIf>9GZY=VO(IAnsuCisjA z&X{1z1do~EtO=$~Fk^yqCOB_`$4zj-1fMm*Z=2wEOz=4qJYj;*n_$6=r_51WnuS+j zoEgF*{t|p^OX1;qh+)AP!IZul!j>VduW_&>1&lYsLrBmHui!*XhX>zHLwA|YlRH~3iQaRQ)JMrPt?z30Z{!@IG@DKd=YpUn{H)iy>`uwyz ziqX?wJ@T)u?hQA~vp2NIO-F{S@^5cw?Szgr^w@20nEam3k-6dh7e_B1yf`wlFgiTD zAJk5?@xe$^9$fro04UXS0zohv2B|_h(?NUM*Eho={t36LBAjdlZ5i~1N$*%Q*4<&& zs(jVPp>a;^s$AX4G*Rar_|-bE|EZKYx9AGzX&O%6#h+n44g9m3v=SLqN zIlTWsZTQe(86ghTTgG%SM(wZNd`RqA#P1QhuGlP7gxxPqP4Ct)2+3Z{l5pGX75#&U zE1NOv7@$kBaj2>lg}0S?y9a5T)LO(>Xn8j7tS9hwVpG8z4`{Fip44crg)p+htATK+ z3^vo*jnVwe%?9RH6D)ak^w)HFw}qzvWXg=G4OZA(gQ;3LuNIL*>_NUO1qo7HmOV#@vHXrk;q*o51x_DGn52p;~MhvmIaQwx&#`k}~&3_DrEOl{EMU zwb{vo`p~{-I&_9qri@Px!Pz_7N$RaBgLl@JRGCBWR z4}9#}?6SAbJQAVU;+Y-zFsw6$k^t?YLR>S`fW1&AO?QTOuz54>KLf%2@y!X&uSM(| zYf^a!)}!`yp!M}%46WG90N=4C1~U|FxBb0O z4OQ~$ig0bI-U?Unp@rJ&^0mDxY{6Ux;xAq{xe%YBWO%o^d>!)!V69)<9z|bf$l>CP zl=21lQCxWyx$lXOYNQW?c{~ksURcuMJND+>{achn3t4W+jDbLLU>X82SSkk2zP3DU zUJPf$1%&WY<#4@)oeZM!a*3r7@5zSQR|~_3MRmniLrbIRWt~+uKK3ZN)ishYZeQT) zl75UimNG}|8XBIS4(pEeI$+5B6-i;d&PWMe7w$jSO5E^3FcpAD}p&8~$td{;xL zy~X{+Tn+t&`{^M4^%W$jHL#}uPGVdwJBw7IfL&LiFwmb1x1~x`<;e>6y|APT4LzkP zAX}a+P4$F9P%4&>;+eM3jD7alXO7PuCY!62rYgmJsaVN{L3z1+v^lfmLatJ*RN&@HgOv&*@;f~Y^={T}JsBI3FPR;h zk`WokxV#zLdcb>fQgR`e*XHE6YsVm}G^NQZr3Xr17B6Y3lG`DDSqV^C=~2y|@5vX~ z)(Xd`{S{c|1W%t6CY$>pHpsN^6Zr|vO%$xT%8zoP9W zeu{&jV=K-}#nSC4His&Uy+WSw72xL{)lQwGLdZw&33~x4AGNenz+5N|5rDan%F#Ly zvuluZErYq1!!N)u%L$RqV|svGkw})hSCF^AJYe$-$zJ0TW&)@V>ed85akc(K0yv~x=_k1`oiAU&=x4$JF7W9M07H}W`GDBvdu<5j zhQPScgGxL7r9qTZ&J=XGi#-(t3uryq1|A3mM$6Dq@!{yb5@11ZW2 zIWmu7c9cTVUn!V*A{+jYoJN?)v_j{q;{Jk^(iZm{X_G4C#QP$!>?P(HrBp90B{2eg z^yb5KuXuWU!fhPW9AkP*?SDbr!59He5ej_pLfRG?Dh!8$Iaq_P>|@*`VpI7+FjZ$RlZgllVJf3purs!2GS~M${#cD9^@_W!Kejr2N+Y{GoZnNLLpBu zh-;vL(dsWqQT>AG0EZ9BQCzVf{z4%QHEll}3~HE0$NT_hy1ATIbsb{?GhKnO!R_nt zmcn$ov!~p75CUnb^H8}nB#@CfMA6=(j}d*O^|51zRP#Lhywpeha%qDG5wTo8%=G4Z zNrwn-bHQyAB!#C+L*kAwzK`BA=`^*22$wpC>Ce)U9KD3XY*`}P&uZuu4c*Yk%ldd# z9v!evWF6?2!YWdZ^kwHru~3xW?Hu7$0ihPld0E&QLA=J16@-9c1GNsZsjyeZ3 zMw*XuXFMNf>BHZSu*doU?)8COUzoFSrgzimWfsQS^Rlp@A$T~bIbsL;m?(8lGu&Sx zZvExYRk>BC0$ zBGiYpJ!ty~o?15_;9NI=LZLhWe9P@ObyVQdV2*9Yyna*2_Dy&IV6uMB4Ls2SLfqoZ zf%Gjf$GL>gs`cQ3Wr*c5gY;deMmj0C->?s<6t#e*2=96Wv8+`3PJ6xmX4<4u{TYyW zr%oI?b!F9^I*UR`@&X-|6Y(Uu5WigE9uR~0N~49+;h?{Sb=HQ1Oa>rZ$Ls9+BQhdK z=p7aBC@SD`g(ZOuJq5><4olQwGFi+(u-QE8M=C6Q3V9ycN<#w~Jiyn7urvYb^>POD zwx6EPwf-_Akx3rqPKTj#=l5g=d{v|V@E%U{7?WT%$Zs5FcF-YD^jj#%Ug@<1s(->Q zFCFq@(vf(`o3YO618!lvwBg0l7>)YTG-0x^?Uxpg_voa<(wfl;#UyS*bt*`Q(%=gH zjWftbw13D(&_!U+cGAl8Y(-~?^iV`d=?7>&i2TUF?m`DWh!!C927F+OmT%{`4Ps|8 zXt3}PQUHQ415ggX0KY5&lZ=|8Z;j3&zzg)`GjMPh1MUi)s}g<@(Y^Tfrw6%04|0V@ z{*pxgRNSA5`5f@$!%+K%%W+L?il446 zH&=KmEL`JzPR(G-+%Hko`ZOD%yWm9S9KO%9#&^(Qk7z{wJ2?MPi0@w2o9nGmGR@-C zm`z-f7FC_y7aKV{VqpL9{*lAgk%PnghK=b>nM|!QbZ*)hYAmbOkJaWc&sJB~=OlyE zdcVrES^2Zm_}_M=%#K*|_G(I<6hEbsTmbj+z-K0S&*Q7JD|o}Af3<Z9#3+s$I0UT9<-$QCr(uwf$LZ{eRDS_ucn~nJjkk=kN3RkMf=K zJ?GqWm-p^{_uc#EWySHAkcWse@b~GbMBl|Xf2suc4GEZi;~w_WeS@DX`L412xsv+L z;aH$88rc*Lwgei3t*w!GU_&SnZEp>PTLTMM)dgB2O`)>v>>(3W=+%pemK$bLMtx+K z3^lw&Jy0uC+3S!4`0K+Tmo9)W*tp#MvA>B7oyJ2|=MasM|DA6|tz^{q8qrZoPW#nI zG%T%QKgs|RYM?(}@THm&mBmBb>f(Q#w{Fz4buIiYiI zyXKXR59N&=_lsW-KWXFIb&X{o9-3D2N_dMMD@sB)Nm2dpxs^5s* z7v=YS&@}3j;tA%O6P_$T=F9Ud>vLcEQ}a1Dy6#Mn zYcn6K+Vh)xj~u)0-NnZ>UU%VN9^ZD>F-O)dJJR5D03SYXTPw?El~v5DC_k7rnbZtC zAw*PqCec&){>NO%b@6DpbyJKzp4e#}x6)(k=vl}(d#H5DF|`Zv{VMqM0Qiy3kqzMd z!QmKj?6~`e4(1c^??wgXS#8G$WHtUi#$OklUP6&FAqVhRi@!eTxRji14*m>~ALEa8 z!vBXR zc&6ahf_Dk_=DePhNAKkf8I?z4M=cqZMcYPQ2K?@**OB%G!FL3MqfZ;1MOTmJXm0}Z zs3MnBEeHB(Q|_s`J{pxbJ7Ghf`&dVlf^sM$jh31`F#@jAM_WYZM!b^JN4*MfW1+ z6rAS;fn7(l zXqtGg0Bfg175fsHj}E6wvBku8IL)JOl0+y;3&DsMgI!0<=xbs-QEW#GBZ`Ub zXu6m>&@MNaXPfP`7K~&504xXWDq)9u&NlOCJ>4ekI50njsaM!`u(1@UmxWygHXh}A zU)U{RlMwxH!ghmArL*W0Vb6h;Q72^@oZqj&X46+`xUl!Y=AtBp!aNygn}^WXX^OC1 zu)}F59c*x^4+3ka8|f&q%?JA~*cxHW6ss3@g0P!tov>D6-=dR*C4}8d8--ma>`rPE zcB8O+>2zTa2z!XWD(op?J#;OadIbGa*i&@7*!~38M?a+=qXYGulsPD~9qciK&xvX< z0((Z-Ns9ek*bc>B5_Y*_{le~4>}`qpG#JNxNAi1Fv5_XX=bshJHMwL%vMkR6*oX?j zuA>)eir8j}?N!AV2>m^t+jELtAna|$t`Ih8(7jYb|DfwkZly9XT$Sj0b8TYjpbT1@s26MyY!*CK@NB`$ z1a|_DPTVT;LxOt*`vgA~9Pj05M+hD**d%zW;I)Fc2!2=aS;031J-EEBP51@p3mz>P z7Ccw*TEPbee<;{5_@Q9t5ROnFI9ISvupMa76~GeODe|pD20`=a5FXX~hVW?m57Cbq z%0Balj-afpszC;#Z5uiUc)DOh@I1jw1$PSGB6z>xV}d^d8uT)v8T6;2g}|x9IF}=a zjRQ6fWBvJ}xno!<YYe=U`F_zC}J+Udg^{v#2N9^Rzmxa;DUt=34@Snabnz142}wpy)vAU;;hAGoJ= zjGoBeEVW~ND@7jW8)&sOv-YX4KLG3Y1NPbZ89jUcCI79%x1a?s9Nq@Bdg86adFIqJ zyj1s#SD{&(_^seOf`1kCj$nN;&`xW`89#zsk0YQjkKi6!JK|Je^9atRbHtfIE3a>h z^|2A``MRJxU+>5>5&xaxjIRO>vLah)M~&oYPF{9@pFQ#{_#ZB~Ot4XK2hgB1M{-_w z3ceut$;k6C&hw`u|FRrUE-q2>xsqTrv)}U+k0feAb+-Hq7Lu6f?=94!g1--^Fe&80+Wz zB>r$YJ-K|R#viNHZZ^Tsb8-H#ZK_|U?uwQBbHze*Hf)Fb{fc#ZKP_0~FH)?->+{!Y z*6A(we^^kgZPWa_^K91XJs7sJ+O`5Vo9&^X|4{!pI|t;q(qH0Yp4?K!o}jD!$NFt% z)o7y2bAx}9&AdI6D6}*r*}}{8UCrtv%{NH z_!Z4i+rsnw({z++g^M)1l8!9AP&4Z|Ot(EzmRi4N5@m+V=E>E}n<%{A@35~G-soaG z3qLF<(ByY|qRu7eDA$~jC0#& zjN6^3ZJE{Mp7t-a(`D9=%l9wREHv&%{>3)SerVk5eqMFs&z{WZ#=YTUJYv>bCfI&E z?sxuWnteLXle`>YTNVUH@eu{<=nY5Y1xXm2KZFZLS zZnJZ=joZv&+-9BH#%<;>ZnJZ>joZv&+-CM1y3@;T<}hxv^L09IGly}TeO24I%^b#U zc7e8Wn>nnzw5#w!ZF{KnCe5t&yvVjmdw$Jk(w+|E_H-Dx=f&ES+tXp(o|kAFx2MCn zJulTZZcm4CdtRn(+@22O_Pku%xIG=l?RkZ^aeF$9+w<$%#_j1aZqF;VjoZ^<+@4oy z8@H#!xIM4dHf~Rc{j~J9!fUkc?b5q6v)cMv+a_)O4Vy_@JB-`fW>&hLwx^`K&SsL% zVVurke2l)SJ^2{f%!+xvZIhT?Hj|hR*nF`wiO0$K7UDe!Fa&QqJ$#Ov>pnE~mq|oOfwYE~mq| zoOf#*m(yWf&U>_t%jqyK=e^p-<#ZVL&HJ>C`=-sTI^1vDqz(_*OzPk;u7kt44i9Qi zu7kt44&T)_u7kt44i9M?*TG?2hljO|>)Y~4?=fxT`Z@Q9o;YqUB%rJM0f7A87W3qYr4{=~LP%%9p!VmgdtI*emJuRS@Y!^&ZMLEDzXW-}|lpV>Ca??szQeh%aO z9LD+mTzhhU4&(fOp>3R>!`8$0lD2Jy&1P0vUbbygmS5UT%Hl9Ci^I4quV_y$i^I4q zuWB2Y#bI2Q*R+kx;;@TgdtKXZgw1AFIe%r_q?~;=lX5zY%jqyKXTSF3aypF5`G&S} zIUUC3d{f)FoDSo1{#x6(oDSO!+i$e(dDv`b)#10cP3rJFn@JrU#&vKQ*WoSg$#rlT z*Wqn#<2pEu>+p`YaUC4Sb@;uuaUC4Sb@+p}aUC4?Hf--|8bnN`0(+BT`*pKK=e za~RjpVO+mIYfrA9!?=F$X&cwiVO+nzXdBnhVO+oWwTi##|CUyTGn@Qar#&vfX*Zm{y$#r)a*ZuF>#&vfX*ZpH{;4aI;8$haorupb^oWfaorupb^lb`xb6VExso24@J8Wa%^sidPT^1&`*UHo zi~Y55xQk^KjdZaQMWYnkll=;=YW8Nxp6tIQv5bimiX2<+#F;KOZsH*h%bYWDk&7KQ zab?jMJBQ5B#1o7Bnw>szV^NW27fy^96>GM0;%P-=HG6R4*+l`(UYdAeQHjm6k1TlI zKS8r~1s}NByA#jzPqb~BLnmEblFC6kQ8DVm)y>8_$_nsrR- zDVlDx?5ig&@|W2x^NvYR7ddP<*lcb4;iO*{sYl7MuK0^dZxqefwm(dIr|1yPK7nn4 zWLS;>^RLX1N)L@*MOa<*$oGcEnctLEnp3r@i`yV>=Cd= z&F(;ykY@LRZPM&fu&`!7K+G+gJ$q1TakFMWgJ(puUxA(CVx`3~&EAG>t7ab}=620K z0o$Qj=H#)(r)o9?>@>}WgPpEfF4!5G6@Z%qq1kk>4$UgTzM|P7U}q`D zv&yN(XWLA6q0ZH;YVw?7ht;|n(jDrut(m;E_^UeIhRG{kEH-(YU)zwb-eo&)@_GJ? zbh+n85dA(+xQqGIDjd#mzX01wJqGR%^w8P$9ns z$*=n_)9Es&eBffaQ_k~WuG3AJ@>-tFI;mocC-(|F9qJb=)=bKIrB27?v{|Q@>vxs5 zas6y&mE~$XrkBg&FfPkAIvtnAW>#6QwbP+2rxk1FJp$>vY@4?p=^PfG^3~#Q9rM&F zxB6|?>Ahge%HkWe?dmD(HS6@=H09#rUE22Wl&@>n>HYDPoy9lm{9aFDpC+-9Q{A4t z6Kbckc0z5|>76k3!-AW1e&thl=h>{&dpK-2>-?5aJ0~FyVSLUzjN9{m?O8wV^)6_?)7ydEAJVqVr>)n_>JJa= z{J1O*A2->X7z_h>~tuLCs#A?P1DZvJM5`xujM)H_pm)`r}KKIzn15)!s+Mv zzo%{UVRP6q)BjlfeQj%={=UN`_a1FK3sD@l6H#pT+rhlc-K#u*JD7L59mc!dk7*n4 zayyK7xgXay-sN@}?{Yt(ZM@6vFy6`jfwu8Zw!?S_e2=#A4!Fa3m-|U=<6Ul>b$aig z{!#H$w$0#OZin$M_Ybv=_rsr6tdpLb{%P@Zn!Pc7cixX}CN20An|a?y3py-o#)kzC z9F zZ`>(98%MF{7QuT2tq2x+MzeJ&&?HM{G%3%ep9t9_)(n~nIa65=7tht=X+?J91!BEK ztapn1aEkntXkHZji}?IaWOtl@ipG=6<#g-+9eJ2UvvM4nA|FWPd`V@sVKHQr4$^V# z*1k;iTt^Rei}ha7^oq<@Joh?4W0KV-?zBG>&$nFYw!SC&RE@iBKb2gDDjnyUY z9L=PW;#nk~r9cl&24>J<2cUQR>|5qB&{Q#3N?s>QUagXg)wWjIK5Kh^p8l$Z^>yDq zAKd3gLTcA3^}0ypYg1$^j$`%EjVV5s^-hy7AMBsDDl=ILzKUwpF_`GEK=+@ZZT*8X~?mkm}1gl9|`CNuEzzhliGo@@i;$ z-g_c{B(h;%mh;ZIkw6cA;hRCWl z$-{k=pnn3-rkx{vbRHct(ud!N-VeNl>hK%kE9hh3)wFAr55KHDX0(@{py6Y@_*Ly_ z;ImW!{0WT({)`6Ydg&!9h5RbUbuabN4B)S6Ht;Q)2b^wj+F1stsuY}WaH<6cr>ZhI z)l%_UF8bA?uNVC~4||^AVb2B+dp3DE{$>xyZ}xEfZ+kfY?c#Ztcs?tdpNQsXqIt=~ zxxb1CWq7B-pxiRLoFC3qVxgnTcp2kxfxfREG7z-Q=Q;0uDU&{L4#q!)m{ zr^=nkEaoGjfZ_21$P0b=k|Em z=W!3G>J#}*=+7TR8LanYus$GiX~t>vz?dqLYea4kxl!aq2DjK*BJUD>T=0nuuH%~` zdonpfsbGy@Fq3l$W*&-}NTX;vMAIRfvqaM+nr?;cxl8mtqUlx0`o~4zCz>}!rYxyN zmgFl~BiJZ-mf$YI#|7UMq(PEu5T^==Tq<&v$PI!)g`96fS>Ynr_kTg3s{< zy`t$A&EwE)E$A0bzi5oXQij1C*)#Y8y1Aef_;^9@5Z3n&VST^I{URGf#eXR4OGGXa zxmx6Ek%J-!MeY!}L*#CeyG8C5xmVwjNy~Ke3F;QB_dagTrF}?;YS|Mv1 zL=GxsO+w@jg{8bl5%WKD<2 z9V1!p8d->A)GeBB(e#SkD{{Zc{URGVl6wxPDiOIv4w1V>?iRUM z?p4T|K9Tzs zvW7-Wc@(lHAaaR9)>MgHt&lYhA_o<+CLwZ%Le_MN+^vu`JtFriWKEyQ{R&w_xl$g5 ztO3B-xmzJ?dPMG3$eKQp`xUZ=@}vw3SrZVsL?LUc zM6OoIng)@B3R#m7xkDjqxE`kTqQ*cPnH~kI20WS<@$Sze3g+`BI*ImP?p4T|K9TzsvWD;rM_gqTvL+yMi9*&?iCnFaH4P#M6|yEFa)(0Jbcx&}*e6(3 z$aysgCImYaioeL+3R%-5a<4+x^oiWBkTq1qF$01n3Rzzza9Bj$eM)69ST{~ zC33ey*7S(ntB^H)BKIp~4HZipDr8MSnYIf(gMsL7E{xf>nYI zf(gMc!5+atndBwdAea#B66_J|6Qr3EQ?N>~ORz_j^Go5zYu&|@P7n{&Z>t`!7TQiENGSC zFp-xDTIKnY$SvZ3y2uyKIv%O4I_?zBw*>E+brSTwv$&4W&*Jh}ZS|V?=ah3^7tZ2# z8(ZE4EH4iO7nZjIk1dY@PcGjMJfr*!;3ef>0q!b47x+N=g}{F;)zjsd{+nrEEx+YPWq`tyVn{AFJgL+|xQn8MFEL<_eB2=QG5@@)UXD zUNpznuFd*2a7e{Fz+A!Ef>nZ6oK+Qkl-CJvsNgcU2yPd2$G=p3tWsHN zudet2{<|vv3A|Hsbo*O%v^*b5u|6sBe=GQR!BLeN<1oThavAnEPFf?RHCkHZWLMT; zq&iemEvw|ZxJS-)mBV4(BxsF()|lq#z4Ud{#O}_OKfx{tB z#kJGKwQdw}2Ckb1u6MbRXX5&aH{JnFT=@!svvDOgam6bJ&PP;(4hEWZ2%;Le`jtRl zfT#wpf~AlTm$#iB0W`7GbP)8_Koi%+DUfS`Cib5AJ*SI+Ca#e)ATI%$xK_@DTnjYu z9?^2hM*&S-H~GzcD}W}g#1+`U6?6{dI$VWK>{uNPJO*Vkaa}(Qcr5k;P3&P+1CK+V zCLNF5O!^Y?F|n&v3p^3A4LS*E;%%cVAU6O_3L>_Fxxp&PjdV2RCZLH~LLKCdKojqZ zJqEZL`IvY&>2c7X3^b_~Ihgci#5Sn|Q4RVE(8PO4gOJY#nwV8ILOvI0Vs;UNd_K^` z`$#uIz5s}waYQw-Q?>IRy01DytW7tq8k2Jd;Ln}8VR0Gf0szx$QG12pL_)We{=fp{ha^)TpOph@?k9tP$`7eIahwK3>HpozDfUkv#n zpotmNrI2?6P0XAwhx{lI`}KJHszKient0*%RgfPCn%E`02J#PpChb984SEuYr{hpp zgPsPOm~mYX`5B;zoy2a)&jC%$!gfLaG0?=`;!Ti$3N-0?)YYIDfF^buZ-M+G(4?R9 z+h^$)K$CundK>f#(8Mm}cObt8H0gEJ+n`?oP3%kF3%MU?(i^C^fnB`&A^#fnHt07% zlYWbO8<+<^1of2#As%G40#?9V}=KEH4x*Nfwu@#4G`m)F$nS^AjUCcFytjbjAO=7 z$hAO>T}C$K6+nz#2HrVLtAH4sr&STmNG-;bL4f1v%o-Q_KKt2^{(iz4~$Y%mE${FR56F`i0Mg`=r05R4Xb0D7$ zH0c~;9^_7-i8oar4Ea2uNf#K0LcS1)vCcRQ^4EYSU2LGe=@Otxmm1ZOF9Vu%xlsf8 z3ZO|}Hx@y@5@^y@#uCU^15G^rPz!k{(4^}OyrY@E2{h??V+G_cph?}vD#$kgP1^ey8U$lnHFIpl+Y=#}Qz zAx{IMSDIHro&iL!G_Qd?6Np}Eegkqj5Ixbn4)PozdZKwfnUJf*Ag}EE@N+9~C`6zI$`F&`P1!68?_5zPH9|s<9{s8zT^GVYBqlXxdn(> zg!wY$2+*W9^A*Ua08NUTuR)Fh(Ob=5LEZ{PZ#DZNZwI2cnr}ir6=>3F=5HXM4n)s2 ze+T(YAbPI(Hsk~lJ=gp_(0mVgk@-IGYvzZ*i_O0QFEKv? zUTS^}yv+OrsV)a%zF~d}yxufS%r{JrSwfSISMl`E6?B#VqQdn5WhD4{HS5ExKe^-X z1=;6jO^s!@`Ofh0YSuy;?inQCevenaCwd0U_bg6^S+Esv zv5L1?#am2Pyu~WsVzS~bR`C{-6>l+F@fOo853iUlrj-(RsfxQ)#a*i6;<+y==Ta4S zsfxQ)#a*i6E>&@ts<=xLcPQd7#q&{I?qw?eG8KQBioZ<7U#8+OQ}LIn_{&uMWh(wM z6@QtEzYOt*N&E{WpXDl_<;aKgU8(p=mG4UA%lg$yzgp>6tMaTydDy;2+1Duh8f9Oj z%DV>TWxsmmSFil)m0!K`t5@}^N4?m8t@2;1{MRb~waS03@?WdkVJ+H$)2&nK)~R&s zRJwI4-8z+Sol3V(wck3lAE!TFr9WP!KVGFjUZp=?r9WP!KVGFjUbX-6Xn&4#u1CFB zV!?_?Q+sphaH@&4#^Nzr9%&3VlTQ;=EL!wz2X>4x^ zwZ?<-aHMr*BpymOFWMdtwZ>pdR@b)1L($e?b83R+;g+x!EI9={>)PAeBGGuL$+1{P zD_agCe2U|CVB#XvSTRakV{Mk|YHI(B(yZEB*?2MASl}jVB_&~lm z*oc@rXigc8z)w&9W1FQZ$t*nmH+&xha}?DVq5y zniav;9ch(|TAR|Jf~d4~v6y=_u$3!9@y(H@q59Dq*$yGL!!9G#Un$TgImLqsQYLnkCiTGJ-om}{s}mj z4K?JUjgLmSEz}%t4Y@<6S{H4_aGo+u^I$xiwg#KqL+i1ghzsS~P?WEFBG*J(a4py& zG9os$H^!B|ZAX-^7PNS~?Z0^Y;&5}wW@}@PK2A#;Z3bL za&{@W`s?x8$NDwF4I9Go6-R4(O(fbJc8Z}U zCU(XaUC&2Xr?7QW$P{fjih&H*a&lb% z*;Bogpee>mS2VYAF?aQCk?58*Wl~Lnd1$CviqjZrk;^)=wWe1qk(k<2d+man_GlDd z(zj)_JABLf^+yI9x8MLS4u_hXXh9t&mhG_`1W&asibf;R^d{?ohL&Si*&f`Knii!| zlPHXQ!KPKM%{!ba9_A?4Q7dzFv9eVg_!27Bq?Hj2I@Qh1{Kx6}`&e`f9!G;s*1So? z6`0b6+c0+%Yc*y-7=%S$6KZP?HY&ryP%}nS%djF8-4vn)+-Rv)#)yIuH${&b6^^rv zUaI8F!>y;3IqDd-1h=n;56Tl;AKKm~vjJM5r?F{5+H>m#7|+{qcM+1YxHZm~h!l72 zw66nZ2jT|6Jw|GfV`4mxZivJ}a%^L%9xE_vhN9^k$DReJrW$xTN%g3W9T|)_Zq|;e z9%?FmOf;NggO04TeSItxU*F2-`>L&>XcRO2MRqSxlj`cGCUv(%>ZmWkC}PddAjq|Q zR!R=3KII4CGy4F1Dh|M>@&J719DvW<1Mr!506y~%z~|rt@F_o_hECJcEAg+=rpCwV zEu&ca4#M-H)HJoYMYG1A6x-@3-&cpXh6u9;+~2og9NC^USz8m@7{UOGQN+%gZ)UZU z?{*1;Y%CsW;cl7QYxzvAYvW;PK`oXKf(Vti@RI8SzTl)abLZDJPhZc)?aj^Udu?s3 zdP6K8#T|M|3oNJ!wxT+G=e??Rp9QpfnN>_ZF-=?6g))Iy%kw^3)QWWw>z0>f5`Szs zzS$nKQ70ZO9fSLJnAS$ZxH{FgZpCcQbx$2z)rygKi`BDJ>r>sxgKABry%mQ^Zu8R& zah8)B6fhy(yXT7FcDThOjge+G=}gHodEV@HwXbpPp%-Fs#cOH799ZVeY6$|DLuU%z z65B)@TjCVtWe;iT>S#2$!&x3Ep&Eer>-@)3)N8?o46tr*!i6Dhv#*$5^peaR%@N zCAQDRWz|^j*=jA~Z004U7MbIQj*K)}oe^{X=#mg-(dbyI%Uf%3h_NWc?b*hjs$4Pa zjzd@b$S5X-ytw0(#cmO8lCG;$EDXmmad0)bDi@*qs+kgnTTv{1X(wEWta*}MhjlH@ zJTszLC>jnnhfkGS*0yepAV?H9teAe;_g(e`xCWQ(FqRgba;k%4J0Me}Z&bHyHOuQ{ zzzPR(>!lYTksmMjNjKeq!35XBC|VWke{Jf@$3sLCiP7Tb;3n6hl8fs`nFbLK>t<>U zVgTbik~rVT%FP*mi^r><=wQ(uvT}wA4_56~!(E?2TtOamoYLuQf2s)+daJ8D-n#ly zC7BkM@w`7SC$>Ex66$A-jFBU`x}hd%q9ATsWfDUhF)ng@NX4bVNlDg(S|VGK$PT01 z#u~s{^lXS))Dj>qY6_zV>a!=M#C%*ZeQi}!*#Yj>$;ORb+u9V`uJf~))oVlCl8u{j zmaJ-vuWENSp=uO$^6SLZ9NHMS4vnq}uRz$fk`uxv_9TeUPCi@oVZjv38m=+E@Oc() zZI=_*x}mn(9jAm^m58Ys8DUXp6E$uQHE!YSA@08xoq`)^K4EyWB@y_5^S?817ojE+ z*%A&}iQEa0EAD>zin~MFKSmqFQ49^S5G+mV&|CjXI>p-gs>XMst)XqU4uyMTYjkT~4J~iZ8dq;!d8Ym$x(LPep@&Uy94_48fMi+AoF{Cp}p4M#> zEeXZzxrs68<0jU+L3B<{)>@ZvM3rQ)1sgZZiaAaQ*HSjG0lFv-kGj_*`#W9F$vud#%Z`I8ylZsk0&$PE?vSO_E-J06$9}GozGIeZs|K@gk|p^--I7q; zI)Yq1!XSvQ)1WW2uA^S-UhCb1_Vq(4%--hoIIiFkciLr&={7#1%RHDu7(^!;Q2& z9E-z)vv3+gnpp2iu?@KmymgimrqjFqT}P3F+U_p3+gsgFCq=e(>^JbXS{zf9?1=`F z`(T-(id(Wq`B>X^C|Q!<0Il-14quX^Tb1Os5VPaWcD9z6rBYtjsVK4Jh5!rQws$&{ zN~I3@>JS!-^fn$ht8+Re+t!3O;qZo{N3}+_$*Md$YFv*`JU_?I8g^Y-tEpDs@(4h?Z5MXrx(=gMFUXxDDaPZQVDXHXEF>N<@L|eBc6qh?c>k3`V(?&H+JKY+~cFjBFY~&R->=`+Ognc1# zPAr%upv*hfXwHjqRO|TYfx{Zu?0ry_#X9GmvCf+2VdALo>gyv;9I9y!1*59lku~O` zVXcdhbq}g3g1coaur?el=${4x$aFrmFQzGQEQn-k$A9Iz%Rg-WAN>s_AS+qz(-1eu-Q zd$t^j6z_`k-WBP+E7N;druUwc-g{1Z@44x{=cf0bm)?6`dhhw^z2~R*J~+Mi!Rfv6 z00Ez2DJ=_q`lGqG!)YB)yG!!yThEJ9lq#~GVet&cE=IC)Nr01k_pglcTC}8D9SlbsX7e2ZRzOoK$VIiT#7DMo#3FSa-xDGi z*&efQ!N6oAOkJ?8%atOqSrRvbeaoAaoCk63C6fqsNTq^S^9{IHuWoIsZjME0VVEBa zAz22XC35c;t;hYLTV7?Y63}wY^u%Thwm}}di;!9@-hmy#xD^l%%`waj+c(Ja60Hp3 zIN|J$#Q70D%x!RE(-h-{X0#nvSXOOBCbAY_?+9X&AB|fch!V3F5wryV`pELgHtgQl zM~>k~s&GDsTj)5<1o#mJ#9bKNK}&IwrWH8BkT;g-czL2GgcVS%M=WlR;0#-XMQE#& zp*-qFhL;~U;mEnq9XFS@bt~)>#_E-OS*+JiF@)aRihh!loxjdcRv+9}fv~J}F9x>0WaYFSmj{>>Uz`p$S{u zRnoOdQL?9M2|V8?#dGMwP-8O&N|d~Qb2#R-O=ySXBT2YB3{ctIFH$f~I6Jx7mMtJ= z&Ss2i277NtH5HE%lC#xFnsVB`9a@RBSK|`C*r<&zcY6>fy{Zy;*rch+y8W^>EATKO z&Shr>X+P%Wk)Rz74ZD|?blouNJtXTOpkVeo7}wOI`Uq%e-7?7em9N}feT;FqxXY6W z?4Q=aDP*-Qc`qmFCL532h2)~)M6m9x)rlyp6siqGrDWGJRGOve>?jdog~}3LcQ|Se zk4+*K!@6O#lLVWZT#}ut2aueW>AXR%N%yoB`wU@ zN_+Yw$3QQ&s0gV3z#uw{9@3r6ymOUjM9%9iJM2Xu!$Fjx0&yBgb^ zQ_}UAvwiNmo^!TUt_PiMmFr1oTjhGx*;cupb+%Qmhn;Pe>uG0O<$B!NR=FP9wpF-2 zgqVC^hKJ2@7-dCG{syYJ^QF*%8wdfEYKcJ$JA~nI&ikVf%iLgwkE!Egi}}@Y0SB3vJSs+qs6i zF3+mxss4sy%JoW>UorbaXpa;&M+WMGVJBA_=lbTj=t0<5AC!*TaR5UT5| zhktlU&USS5Z)f)B7&ivd*wxM9pzDzV+bSy!t*%EWYy-;5Pk5)stBI(`y&Y2>?&g}Y zeQd3J;{gISI=VdMw^wC$w{)KN(`UlG%m91=D_*+%c{Uwc~aY&zf3Y zJ!bFOIUaU$+(!p@)Zy{&R1;2p4(=GxAlUT{Cp~^*x4e3OMOJ(wZE7H}pV#5po)gB} zLB>>tpMt;%ZzYx1wjaB3oLgdz))V0>BYC1Z?MPqK91h`kSZQrdc=nb&0sbi*J#cGUIb=I8&${HU7DEU%g6%gD;vJP zBcb1(ku@@rfUki+6Mr83;fI@}GVzy%zd`u(;tz>O4Z+_~{0%d+iV!5x$C2_8p<@KX z<+1?%$d1VfTrem%r`X8pSb!qnyTn(C_qJ5vZ0n+VJv_ z5cF~AjiyhY*xU}FuP8z_wR)YB6g!hL8fgxyW!8cMAJci^^SQ_!&4k<*lCWB0Y z(^{CLcx_1ph8VaLJ_t=5FH4EQ9wRBSRa!3fSgrum3Sb45<5ezYzF86FFIWci3fU62rgzT-V|eJ zZso!rH7IPeuH9kq3Q6&~_RSJwHTVX|VdQuetUK@%!U*2f!VP>Fa-E0#=YwrP?i-PJ z1u7E4;g~1oOMH8Uq>Lg>41XJuR~ddqTZd@ed~M*LPf0hRtQE+A4*upzNy|~nInV~7 z4^rZubR}JjGRDvX+!}S#PEF86z9?mW__LI`4DavZV#F??*_P#TH+3WDz z@sOOec=88Q^ovs7tL-jchF^on@n2iolKn6Av1^@@t(JZk#=lRJ?kN8+l&#AtTOE#O zBl;5e`#8ptFGvaRb4s{E&b%0U`zDl;uL@=O1$_{GW`mS@1>TJH1u6BFE$AbSINDJe zo74B||NQaZ@Ac=hIviQPZiaA${e0SLzh&C#E>juCmmta){GybuYhdY|(eLwWzx`Yp z9~fA|FwQ#e%W*mXcHqj$Efo__l-8M6>Pw5E8lGMjeiiQ zbp^ip*1rOp#LffH`#;|>`z_tgJe2XJ%vzV>37EAg@%f%!|DAIFFSO@fduz|dXlGvU z3Sr3Oj=SY^>bU!D+1rzc=Hv?<--7W9p0(t(7Lt3}%31K^HL%ZPn8C`ZkzrtMG&5ir zBWD!g<+5Mqf4`vK%*LAvBHQfWxEhlTs)8F{$~@3gZw{_)-Hhkk@ask+@lCvvmgNPbJo zVH@Vn3(jerGq?QUiptQe`3H|mlNVPr@t{?{#IUlCr(dss$PQ@n0#6*wh_;mZtdeAcG^by>E#(y zP9(e(m^1ec#a?ZF2)|Cp&WJI!-j`+VAsJKmdU7QfP|ndX+Q4dsdc1KLJMFSnf@ekp zcqm(bc^ZgE0^wFX!4?X{@%&RDjvdNCWMiO3cH9C%esxYPuo6Ge34~kl^hjU>Kj9XP z@{S-Set&xV?Os6@c(6X$lN9>K#+< zg@0nk=fnH;eZJx%jCejik#gz>1&o|CauOXlpGOg^7zukpVqPxTmKiV&uP+Pe%gG)b z$OQ3;WEwe%b4Di4M?5e0Mz0q>Il09-BZmacoW$2f?DDB`eBc$z&LE&4Gx5 z3`PiZ2pMK>PNLh$S%|Hm#7+2Sk8JU{J(8`cAYKa2e3ZeW zDWb`uM??>c86sw|m?>f=i&-LOu{cP?K`eSjl(^CeqXu)W&&DBO>kzRHVR5L4Ls=Xq zA`n&XlQJgy1`%qI(=p69LN(u5Vye{n_(n}T@-xZAabq;i;lSLH3A{4c!olDp6A$74 zQMLuL*zi4sj~ySDj?s>o?}z~$cGEWkW?#UQ(~$uI`Jo85K0iBPs0dK!queIGY-<1~ zVKI)yqeF3!a7bV(F7o2UWN|c{p^(GHwHmG>p=`aTuLyozxj=Ezh(HF;f+C+)Asjj! zU;`%p_VG77b4J<<9~60fPFU_zI295tgcCxrD1&fX;2*6h!ecR8ax5Bb^%*&q93=;5 zKcAJuo*n|d+JPNx zizS}Pm%r}+vmpA7X~Y*7B*x7PjmCj$7TaDk@K)=+b#jemC@h~w1|_@|=qesMAJ z(}j`Nfc+>!0FO6BgLquMy^-g1gnvJP@+UV=39Q96IMN;qNTOgno{z!PnE1B}Xpou* z68=#F8qTC*Rz>;2W##i`&7OsSg~p)FQ0t6i>M)I!$-xNxI|pTDGeeCn!LqjY4Mf&S zm5Hf?yxbZ8R)NfM^Y~q(crZ@?f{$M;vMpwKA3XJhwFQ-Z=X=Y)KY#5Vb63t$Z9(LH zU5hl9<$%N8(g^LxuVP!++`IyhRFOQ>5DJyaQwebYbRq?++{ymG{C~X#eu6U=b(nSd P|MiOe|MLGUE%5&UYj)12 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Data.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Data.dll.REMOVED.git-id new file mode 100644 index 0000000000..e71c822867 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Data.dll.REMOVED.git-id @@ -0,0 +1 @@ +d38371dd12fa542396a1c1e593d0793cb0efb496 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Design.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Design.dll.REMOVED.git-id new file mode 100644 index 0000000000..f339ac244e --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Design.dll.REMOVED.git-id @@ -0,0 +1 @@ +2d6fe818ae5b4960135286c86c063d813e2fe309 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.DirectoryServices.Protocols.dll b/external/binary-reference-assemblies/v4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 0000000000000000000000000000000000000000..986d3f372f36ef002f95984d3cc36ea604e91247 GIT binary patch literal 53760 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

Xfi0>{&#F)~ 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

ZM$VmOX~9uw%oxUfo;2G+cAZD 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.EnterpriseServices.dll b/external/binary-reference-assemblies/v4.5/System.EnterpriseServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..74b2720a2b6d10ece7fc2bf7e9e50beb4a19c319 GIT binary patch literal 42496 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 a&yr>Y!vOwt@-Mc2mK^*4zI+-j@P7cfLB$pT literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.IO.Compression.FileSystem.dll b/external/binary-reference-assemblies/v4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 0000000000000000000000000000000000000000..b22488676b5239953fd3285de5e52a4e9ea94b3b GIT binary patch literal 11264 zcmeHNdvH|M8UJ=SyLkYY1U3l1dJ!X_&Kd{^SaI?q@(PJ;2udB7yPHdL%kJLoy>|n# zuhoU2@We0(wepn%3O!c&+RP_Ct6!Vh z)o0jh$})Q`EuqG=WYTohsIFS+q-rG9){d~6FnjdSq)AohyG3^{BUAnc&E{k!a$` zniI#WL})?IRX|>zlZZl&zSV(z>jePl3fl@voQl?lEIn?w|x8yW%fLKRLE?_swsZeMh%_x@cl__J0CO&3n4fB>TT|dQvzX}k|`VLH94%4HP zW`!NgNcP&CV)^7uzs*_~rcQ)0dT7>_>sGYlxe@ZjX^@-aW|R}dp*yPApR?Oj$-=)q z4Fo;g?hN=U_&M;k@Z4nz{A~Cc@SLX5^Bg2PQl7DUfc{kWQCWbl^EXj|`hit+x4#PE zNBqC^EA$716?#u%jzX)@83EQd1vtGE_)#E0_Xr*kd`IwO!K!lB)(Nf>>=XRH;I8uh znhU6kED_<`U*1j)lOir{p?3k2(dR}Eev;da3d zf{x%Vf{zRSUhsXve+epHE;A&!RB*N6M!|l;+XeRtzAE^>;Aeto`J@EFRf5+ErUh>j zyi@Q|!B+(TDp*;@ww(jaxSjMv|82oS>F!`=v=FgwPY|6YZYMp9l-bparJo1c_Uv}j zoBk()Yx;;f;p*TVc@?(UijE$bj1?S5_TCK&mndhX>LYvC7xFvs>e9> zQY)}9?4t-`$|!Y$ct33u?d?D>JvuDxbG0vu_HEJT!-ZN81^rxt3iQz>z|xp9;p3qt zk}^|QCfq3L^I;!#Nz5Fn@%UItY~>nYI(QB6NKg|r1iv9TAb5k|O@coayc76j?Y$Cy z2>530Q@}FJ)-sv|te~@j6X{A|HSGWf=^5a3dL4K+{SBznQQ-MB$)jMNhkzH;)4+P_ z^D4A}&h{y^nBD3fw5 zHv7w}6zZXaz&;w9pkV!8JW-((9RxZwG)bYYbg`n)x9DBqAf+ZN^aE0=6}pig0p3ir zYZMxy7l5}?Vv0g{Q0-KOcF{{yLv$9MQ5&LJf)@!kP!nRlO4kBgXd7@9-46^4evN*O zaEzV@PJo3%w3+^huuX?+V-j;eO{H%JpBFqV=<{%l>f!XWB-|+B771^Z@SxysK|e+g z&LjbEtrvFpQQ2Vrbi9%c{N!nnf+KjlKeJ)=dnr_{ab}&C~ zmzEq5W}OzA9djhyVx|TxqqonYwyoLpZCkn7S*hF3hYI66)6uvQTcrq#($8?&uv9&lVtjE%p;b1Rz8^G3zv||Wpy*Lm>)@sqH;j~|s)3=yb+{n|& z44s@dBSu;^M=OaFk|nW*rNSWS;KL>3N>-OtzV}VtQ+~!`7e(>d|e- zNXi^=OrdYp`8ES~PsxtX~_2nAaMoPJp{X7+GLXQ~-qT0up* z%u?drr$zq(@Doj=(5m(sg)acAs&T=?Qx0Z+LL4IDhku)5}EzFwFUD@ zr`%e!4l}7>@yo?`X;!a}RkX#@HAio=%tWqXSYU_QE@vIL8C^QAj%cN&#hflPpRpr_ zwFnEhYrcXY_b0J>t*-S@NA&BMc5dCvxDS{BH=`hn#OG@fEhuBqW(GvADa==fh|8{c zBMEWFj3zgXy9_5@V3cg<=$qo8#hXudIl}ywl@oFK>hj7>S~~7D#SP6a)v^(>=9enm z4WLw!+YL%pE0UWq(`BG*ad$^3O~oxeuCi5+YXe~{)TQ~bjd0eyqE(NkdwaELVVrBE zRzvGenwWMmn=;8TYq)o9atF6G+%cj?91DBC%!D1wtlgvaQm7}+cVzOZa!}}a>4M~2 zkr%Ffe8(r-_g=jqK;D1?l}D~8$^x8#8sO{2U)WA2CE-;Z*>viMk3&jP0-+?1Ybv}> z8sxTo(iS91;E%JaI1g%g_EH+pUL;m&1>{X+LAH_If+mJ%8X=wP=RlZ?MBPwZWT22V zlBtw0UPFw7!=nkkO~N?CmRX<64PdbW*g*4W3BvPe5v2L>NEnd+ zfiJ>2MC+xWM&e#P?oP(Y7}ehUM&=&IZB2*G4a`O!jn;_c<23NSBRj=IxJf$rOO43v zG|aKP^2|DAo*8^c9Ut?5cb;1qy&1z?;$_ppIx8qSr|Rb`=*W^c5HfhR8G4JIfbykXyB)f7k0ac zv&*l3V`aZlcE-ntGc+*jcrH6K{syo!@;cp*ITDi@G){QmH=H-0YPPsDdz^6Ge$3F*jvoFbj=(mmfcg#^YrXKqn?6>^?&h9>cp%v-8p5C*?Kj~YH(MvU5|gJJozV~ zQLVXeI5*zKdtk#Y*poukChHaNoMSacN4c$yx?9da={L47x?A#XnOFOfEXFtSg*k?t z;{Ux*o=kS9V*H)BKd)aen@e`UHDkN6Phh(IC5BCR;)^!FD~RIS%9m}vSZf&84S4d^ zzX36WyFP#2C*LrmvfIl`8E<8o_cD9{%e<5r+u?O;c%BA(?mwPA+hAvY-=$;8S`_7o5uG874M%d&2}t&xJ=`d5uM|q>2qRp)o#r) z%(SgaCN1ssnHGM;gx`ux&i(2sG;dM;{Ca#Z27Rxee_2A+9-0seU82VlS}2u{;#W~@ z-fJp6Xg4?NTu#;HownZ6QftiQvaK;a#joYN`Ye3(@>D!={k7dQ796@s4A9pm4}tG+ zSk23Yq3rL>i1@QtYdqer8A+12(z>2~=S;`yNNp_4_GS1~TL9+fUknXhda5h>vi$LA Gf&T$Y=~N^D literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.IO.Compression.dll b/external/binary-reference-assemblies/v4.5/System.IO.Compression.dll new file mode 100644 index 0000000000000000000000000000000000000000..ce929a4db0aebc6d52100fb62055a90581b477b6 GIT binary patch literal 52736 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.IdentityModel.Selectors.dll b/external/binary-reference-assemblies/v4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 0000000000000000000000000000000000000000..3a32f1a62dfb71b22e9c52ebcf90ce129ef8f573 GIT binary patch literal 13312 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 h9}r6^v1w}NcQXggV&29bvwoUQC{{prsG!Fm( literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.IdentityModel.dll b/external/binary-reference-assemblies/v4.5/System.IdentityModel.dll new file mode 100644 index 0000000000000000000000000000000000000000..a2cfc4d0cd36e69d2f67621a9dfb91bd9d4a124e GIT binary patch literal 82432 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Management.dll b/external/binary-reference-assemblies/v4.5/System.Management.dll new file mode 100644 index 0000000000000000000000000000000000000000..454a7c8d66e24bf179dec9dc0942fb2e56e66ef6 GIT binary patch literal 43008 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%0Dwj||&>C#^pf>vVoJ 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Net.Http.Formatting.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Net.Http.Formatting.dll.REMOVED.git-id new file mode 100644 index 0000000000..9b7b0378bf --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Net.Http.Formatting.dll.REMOVED.git-id @@ -0,0 +1 @@ +4df2debc9cf3ecf4856c3a8da6525005c8dea578 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Net.Http.WebRequest.dll b/external/binary-reference-assemblies/v4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 0000000000000000000000000000000000000000..9fc3268e98832b7d75eae7a3fc639d4da75146d8 GIT binary patch literal 12288 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 N=llP&`$^Qm{{w4%T*v?b literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Net.dll b/external/binary-reference-assemblies/v4.5/System.Net.dll new file mode 100644 index 0000000000000000000000000000000000000000..168ba041f3afb401174713a3b5248da284018db2 GIT binary patch literal 11776 zcmeHN4{#h;dH+s2oldfKmTXCtUB|5BP}@PdSe6~z#LCz{*;uwDD>_+jA+Ef4_atq+ zw|ngFS(53*2MHu5KukgcF(H^FctWZghhaz>7>9syVfZtUshgw)CY^@CCCNZi+L@$H z(%<)X@Agh7TQC?$!?4o+cE9g?@9pos_r34kd%HdFJwla46vX+~TSSlJ%Eu;&7ls_n zk#{^1p|95baOvZL?jJ547}abgW0@nCnpTpkVVI7R5Q>#G6wOdNcg2;onG(^uy4owe zqWiWIbq6X+9`rm_ES(bw6I}_lXZq20+$%Wu;be9SF0e6gKJr(}LGbca(xwj+)yseX z>WQ2QM-JugbZ@7}eMEDow_I4O5TOQzBMh0VkUyf17X1QRndz^E+4U=>7h; zzTEWavmbx_$-SrUs5b7sy87k%d$R9RTWYVn=ZcR#+B{lw_EYbBb>OxyEo>SKf9Ldf zUwL51(2ox9`;;k*?V?(bwc+z

  • K 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Numerics.dll b/external/binary-reference-assemblies/v4.5/System.Numerics.dll new file mode 100644 index 0000000000000000000000000000000000000000..d320afe3dfd671d195092fe797f7ca9a194f83c7 GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Core.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Core.dll new file mode 100644 index 0000000000000000000000000000000000000000..3bc7533aab4f404d767a50d9325f92545bde764d GIT binary patch literal 42496 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 UgYiL6bE^L}y8G{5PS(Kx2h;P|g8%>k literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Debugger.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Debugger.dll new file mode 100644 index 0000000000000000000000000000000000000000..a618667c28a247c40507a20ecb40055e1b608798 GIT binary patch literal 3584 zcmeHJYitx%6h3#_r7v1Qu#_m}))r6;LrcLxYfGQhg}&&PN&#bMXK%M-XJ@uEvp@+# zjfg^h5Yg743B&{=QSgVL&{&jL0#QV?5&^}kB^ogr5-WzNc<$_OTWrC^AH*Nr?EUU} z-h0lOGk3Op>1K!kfJmHIuLA7Dm5+QIZw#%dPMFl00DEFir0gSQCsJw}6_ff6-D^lb zDodKCThz^{5zwfj(c(%M_30ia#>dB|g|@CL0VpHFH3#*8kP=6t0b)@cQmwrkX^Jx+ zCkKiP>Ui9Igjc9XCgc+V`A-0hwtoX_h~-W=GH~C8L2`J^2N*fL=EhPAfEo0UXyhO0 z=Kw^Dt+J3`&y7$wI9KHCK>_MTgQ>b4iXk7xJhy)YgyKS!{-;ro`SZbJ6TktVP=Mu8 z0E7z%jVcPzI*7j>`Qcrg5>IVEQYlRBsxRDj=Fq~?Mps7LwBN+eZ0DhrH`-4%`xbp! zw{%O+v5rya#52E-Ev}uvE-kTm@>aikIq7Kb26^9=1?Ns5Ogtd0Ir%}8lydx~-laR* zD?Tpqzx~nI^_iQx_P_kqOslV_Zfdf_{DqD3Zhh6K?#i3AW?8wTyU#3iEhr?R=y{n| z%n~!itc0r?<(F(6FQf}OkcS7wLb=ey z4-B2iYeX=+NvMgjX|4m8rHGvZ(5F~k@UVJz%HyaPT(Oa&(qAsrSYX2BZ79C#722tG$#2p14t za1n7CTtbv>Y=THZ1QX%~0q=qch-~HcwG+m8dEK8u3`>xNX#&4q2HhM;&lcK(E=W6I zI#=Icu6qJ1%L7-7X)&Kz%_P}URxq(l(VAgVfEg{t%pLH0nE^H6v;{6^tWacTLdhzN zX&!J(CUg4yDu}YB8^i7-Uh64_JS*LgFxd)u3~}r~xWF`-&#ku9D3;0!ENo|Yz+waT z4Jz)U=o*9#i;hAN75e~Y1b8waT> zSimwQwVIiFz`#D8tTMw8;Bm2UvB^r)Ltg^W}ltE`(c8A%CAm`ETgT$u2i7tR-NcLL4f7n0hq41bs=4O`GM z#cfDN3zc=vk`xV}1phO_dxbXYdXq`wsJu;X>Zq?S%4Rn=EgkNskECrR^A z>{l6S5g?Ahh-!u#V!5XfNGVrjLpSvXi&pxXMr)YdsOhTiRhT)AIyD(xk_e0)CQ^WT z1hNn9r2o1Fr3I==?YGFJ1~c)BVIJH#mVkq4)A4f!ykLUE{*oZ#I+8%tOmQZD0WLYB`o4>=tIMzfrGF2AV(A`IhA7Re%QnPPWdu Nc}Lzl>HkxKzX5w{d)NQ~ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Experimental.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Experimental.dll new file mode 100644 index 0000000000000000000000000000000000000000..cc7f7254edd6098af235779a4ac341a24e978b84 GIT binary patch literal 10752 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Interfaces.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Interfaces.dll new file mode 100644 index 0000000000000000000000000000000000000000..12d9982de46884663e2cc231acb130a88bc709a1 GIT binary patch literal 6144 zcmeHLdvIJ;8UOCxN0OG!W7DQdOVS(qut3=+ZD9z|Hfa*ln6wGqZF$v6HoGUAOE>o} z_ufqt6pT=ij=btHpn_N)4lvd_SQwz%0c?py2LwR`#{p_#fbtMj6cNPVclPe1ZozTn z5C7n__jk_kJKy=vcfRwTb8mL-dDoGLh`e|{{+Q?i)LdF6emYE|yL|4Ra=N$d@x}*~ z-p3mwBf71nEHhz6N3~egFib}q5}K7ZG~LiT`oh|%85f~IVA_1wbblvNuc96?(MzN@ zPFG5aWxP|YdPODc9;KfU{{=brq@M_+yIjLEu-Z@I|(#)iO`uh@NU^MzI0 zcfZ~E@YYv)?%Z(7uA1-kjO_gFoJW1%9XNDB=a!$({pZ7P?v7huyL$io_pg7hB((Fz zW1hcjTv=QG^mzLHmLDwHJ3hKP{KeIZ>pkz=*z!u*??qxvY9!O`RG>gt1*r(`z71qvJ%O5yR1~QCtNm7vgch^F4-SlRw3C3 zn4N7_O6FHGJ5nXt@h+>DY?aGqO4jePS(0s52BekQl3nAnIg;Ic1iQ;+4YKd23f~3_ z@`cy;8<%O4y_93Q1=>7U7O;NLk^*+V=c)px zd$t!a2dpAHLqPZ3g#F8usel89t4x+D-=&`K%hShn%D2t4ld3aaU^ig~K5<;80(WBe zJlpGeq=5a}GgZL6-e2aKugd#m0ju}^9vRDfdLGhSr9q&F62Ppaux%9e7E3bvlhVQ` z;T5v?IyFFbSZz7h*pDZOYpI52;S|ln%`}US!`-wH&k4}tT-pZQqimP>ZHc!^yj$Wu z5+9WK2ymbJn8c@~+opHacA5@*F^QK+yj|ixiF^(!5nZB7agQ-hL&hn%WmM#v zhXTmWa@_kt+_p318@bv0F7#Twe+91a{sY+Q#Q^G;@-fwm_Sv$1zPAkRgPw9=!ds0m zl4@A3gdG+CN@2YeJM4v|2B>0AAFu*5u~r$d3O=fsI{=)G9u+aE0v;fQbZ$radL2f2z|+9dUkqZqhC^J!A@`E3A9q|6y&?6QJmh!EOTbhSZl`9NwJc`6SgBpL+eE}=ICRB)cmF+Eptqd3oEY`?}o#J%@k=Hvdv`L5&5nHEvwfw66@23flrSD zbJX1)HDV&keo}Ymm@u6FsN)FB7+gw`urPS4h?KWk_+~jmC2Xdxn84H-X^uvyyKl%A z)|jx^%Eo9iEhw^H*y*H0-CdTMPKkI%gXd+P9x;Jwl42ANQ1@AKwCscNJS%MH1A$#I z5I9yZFp7b0MA^Y?lNTkuCb_0HQ6r8xLnE`b)P`L*4UT5mi6WHk=4eWXMwc*z1wp*c z!PnamM>(4eX~WS+1#%&y8OFNx7&bi=b4-hDX(lB%k~pVKgW_os!H|p#GOS}VL}EN9 zQc^>Vrz~OHtlTHFg0eZ0Pl7N3~B#cXG{F>G3+G6d0NkyeKoN+%MW zOZkzmFCBU`VVJg~$85@|;r7Iv0^5YEl#e~T1j9pmQg;f%IBLgCE2$43%3m18 zn;wcM@t2}UlW)lVEBE#eFF0q-JyZ7|`bE|J8RVZC^eNR`m7#)`!XFJ()uecWbq!Qi zKQq{<;yp=Tje<>pYHn36fP%^jGlR!_f{Pj`SXW&zq)4_PuUC;9c@hiTDHkhN~xoXDaDd3q}T4Fhr&|@$g;+hNYmcbY^f+t%ldoZ-Wu< zB3{8Ftbn23vk3D-qyT~~3@aESlRNP8C+{TD^@xU_zb3%fhufO@HSe1K^s-0a9&AjU zbYtz|=DT+74eTgcvf#Ok_n41We01(L&;0J>mwQ{T>TEB0?a=947tUC*>#_H4xXirq zz~8$1U%7Ep{13I?>wMuan@>0~*!9DG;>7p%mHNJPw-Y< zt#jNF1}Cwt<*x*-S0A#X)`S)_4JWGe8(hQ70dGn@n#3<%*{dT&G#!7Wt`|^3IxSSF zajhP+OxqlGw7!%uw1|j}7-rH;=)zu%8Dbbxt5Ee(<|kUE&}l!rTl+ky0se85L75z*OhG*YXw!;X&XEDykq;N zjw6QlA6LBJd%xc~_uO;ux$ix{(D~p~U;qFk9=C1*yn$!Y?1Zz!7@Fr6pP36kNq@WK z4XNYp64wr2$TFe^2UX9o#p?+Kf?-R)Vo@Uji!WeV*X6Vf2L}{uX6BqF9D0)jphJ?U z4KxLENrsdLun=W7U0;pY7Ch{D2(aJ@Z6a^cqGxa;;XVeiKMs&h|Kew+q7$}pjJrX* zoEhx^Uz*u6yJ`Wz8N^x|^7SzWU=1syVdOXGBcM$`S7g*I0B)J?f_E$cXUzbT5Or;n1z=3alU){!w$?mZyss<&t@Y10{xt8< zvm4jCZd4rm?Bz_;`QN;L@<*rZAN|&w?}y*JzW>_q_x<4V&#t`W%aWe;eNg|(KYWJ& zte-qp|Kek>^$%U!-mrS-^1mGNS3GgCb^8nVfAUt*!ClK=T6=iUpS@~>XXu&l{pw1? z(6;UKj^6v#x}_g3TDa$t%U3>GGI_Pxd4IFS*^9dEuClJOR<5eF)ryQw;79y;4nXNw z0JdfTT*CD%b%s@6U@#;+s^)5SEA4SYJznGPfzq~~_H}sfKt7s^yxAY@7tYwQdv+VH zSGw4M|CA~L>nYYQ2M=*yS@95c7T1+{2%EUxfd{~kWo?~P;4mD66j&p*N-5Au=pyt= zL#XVNo<=-I%BzI05&oQTQhFDyH}HB6rceiSAx$>RDNrFd$&KK`6jQ(}AEObq@x%)4 zld_=#=70^aHMR-rh>6=yv?EZ35w#u~TTHoYwmuxmM1I27Cv^iZ4K=}rAzjA~0xosT z_Fc%-u}R3%u|Lqt2|+{wDNkoxDv6s#G-2zK@-;#%A}!Lf=cQsDJ0~sHvA;`YI#wc= z>zGTf(6JGDrH*|=w&~bOxhlp!lHQYRbnJ#qn+=sC@R5{ZsMFb&8X97(Pii(a>ez^( zS;t;9;G>b6nC)*3(WeKki!u7l5^TP)Q|IY2cI(*F#vUCzY22b?7md9-cGK9WV`kGf z9jh@tq+<`7JUaHU2_H|?L@wVpDLQt+r0sL9VxOCK>TKmHff%cj`cii3*q#(|GfMDl zL>b;qa(y|8p3MJt^eK#KfE&8ViHf*sr~BNQl0|XmBO0LyF*@I5db0czGfY&L>*C+e zbz+1&Q}i`THm_uQvibhM^gF9sVz24>q{CUPCkUqqK_-7fJE5C!jBuQAf^dou4CGH} zCv+2z5snj15Ka+-k^Bkmgl@ty!g0b0!YM*9kw2lG&`mf-I8Hc0XdHuB!;K5iq~I$% z{u>Xk2U7RpdrdqY=p-&-IQ1YA@hXnCfznXP(aX z4CWckGnr>H&tjg%JcoG>^E~Ex%+1WrxLZV$X4V(5zJT=wtmm_y508_7KI;Xn7qDKy zdLiqDtQWFg%z82F#jKaGUc$VTc`5TU=4H&6F<-{KoOwCtUC#On)>p8;g7pg2MO(>d z8=ourT#aW@{c7%4&HZXvuVKB0^;*_zS+8Zij`cd$>sW7Ky@Bi9$h?v5P0X8^w=i#E z?qKd<-p0I*c{}rV<{OxAVBX2RlX(~OF6Q0LyO}$gJGpL7)_Yj*VZDd-Ev#>0eGBWo ztoO3s%X%N{eayEp-^Lv3JA(rezp@sbdqZJm*t%Kqc*DNkinXghq^P?+{eH#T=A>y-Y;;Gh^Np*ZV&p20vc6!v+eZa78UT3DXVTHVA-;w<}p zeqVTRy#H{>8&v(i{^+!0`>#EK$!_Im z@S+48h0=`4I+`(P(vHGdIAheDd~>d_7A05TidDdD+=3J2;hLG<~ z@X{r2&Mh&~f}|D6$-;?D;^CGh3#YkJf@0X2{i3PII&tZY-iLTQ)`~ht>MR zbTj4LvZ%FO+Xm8o2|cDweWotSDp@gGC518B>IqwXwn>Yjxy6eyKU<1bH9lE+L4r&( zlJ6nCnpQ=_S{zmEUb$dKlh&<*79Ts{Skt>jmr{fgzM`b7X7rx6q{2NuiP^$y6Ta>6 zarbz5?Iy;&aZoLLaT7OC(e-L{DfDyF*IwA8TW0Nyy%Xk`ta~xtvB?Lw%xKqzpDlnH zXE$pA;ZTxvgy_Auct($Dcin7Rh)T?wg>aay@*+!fuD`4QALw7SQ4Ncvv2j>}UqWN}O@!~I6!F=Be6zF3CO(hE zU-C}<>!}arM+d)FwCBrDUOlkpeBnj;jB?si=MUrxw(j*Wc${_x* zA>rR3=WkIxBOCFzQuG%I{$vU62}x)^{?~$J3YPt&<_Sh(cbdd=~fw7?1`Q4W@VN3e+wV$*7IeEeHBz?W+ zh30QbeJ?ckj~I?xw5?%V8&z|fXwdbaM^r%XN9fTzTd}D|arCoi$3;f+C0MIJ;3QQE0XiwVK3s%n8p&i4#HxMdI zJ5gsP{=ezJ#CAnt-DHZ=ODfS1=MqUgSW&jAL=zSGhjrh)>dV)^)!nY7PT%|9eUHs? z-dvshr=7R0yxrXN_HeGb>29a~sUru!`n9J~lTS5V`u5iQ_qRW~u6e;bU;NDvzOym8W%KWsdF`gHVjk4&C?^9P-oO`VdjJ^O9!lJv54+p@OSRjhH83V@f@ z5zW7m=qTEeDd=Zh+c1Y6=BS`I*Q8i(tt|TF~zfgjJ_rv zlVbFgbOP{Yz$x@=)EG^XPe@6+K<553`IwZVZn;lR(lADn^jY~qIYu?gbY&)OQu@%p zkyt{%!qTn>Owk?6{Ys3!sXVJB>6G#y=1q;Tw3!j+X#z~rA~Dhv8HmJaEb?ix~G{jYjWRQnW65RWwDWfVV{tMVJC*aQnd|SY}8rJIKnl6}ru!eQsU&FKR74X|N z_bdNMFT%tzdZlJMr#L?r!=Eu{@&g^x?TUMp?Fp6Y3>kM+?6qzuCT zOxq$jZ;(c%ducgsMZ6u7Bx5 zpOjaj|D?PY@L9k%dR1=6ILm1ka+>K)xf}g=nqS9S%9s?1|8Q76}J~l~gvjslp>Dl6A-u?oN=e-~Wm^bg^ zRr3~B%?mJ|_xDnOP12?DBebY$UVt5VBX#@@oAIT!x5Y)uN+DY#3ebvy!9%vw6rpm$?J(L z7b9NutPW|sUVwS)UGCFv7V8CAHI3~OlLMOPhv3;WNrSL%moH_KjQDwSfO)>{sahex zycGhBR~VN9%v)h&s5PI)ULW&(6kw;M(fE8hz&zR}pYu8CuJ}cAfO+d(;nNO?-3Hj* ziSNXh%Vq4P_@x!tFXC$|u+#BQneQlx9>9A0%`&p0$wNJxPX%a9t2z@-6`M$V&q`~9|s(cJPCLNFP1iHRMNDXRsnY51)0X{ z_F2FTy#aVN?%Xuxs0(l}Z2@$sAMj7;lYj>V{0y1s-%a}>d$6xB(S(4n)A>{{)gbTJ zOOv>zzJym)BmE6^$>-De=zu(*UIbi>@dGkbWyFR87zLaH+f7BU7Pgx%Ue`)uJs#)N z5}N>LiT>imRx#2K*p}D@*b})1a7`iy*qs=WWk^yWH6r9DAy1|zNR#o#ssX$hYshpd z)d6n9`%tDU;RA`b1IpNcBSj`SLLd%>-vb5tC?LW(EQccR*Dw-rasO~6Dz512F;$FJ z&pjp{8P#Jed_Dzxk3!oh;wB0mYY`{4(6Sb>Qp?L=e5Yuq`fZ)x&h^_1{8shbX1|^9 zx0>JP{8sl{!*8$iTgPupemgGO2>m79$EvT{Y~@P@{c_5TJFY&O-mYso*BH~&U6z?E z*|u)x#;IpaH{CwVDrRycIyyV(VJIJhV->4J&Wt_Ow!e#?@S%Dr9sFI*X`cXVuAXNQHToWdDwc*ajQqp)NETpbB8Q@G^5*NMoxFA$1E7bBd%_aLd|Wq zHD=@?Hse~weVUsa@s`q@z1u9SP*&Gd|BNwK2>Mqk0K8{^PA{_V!J0y5m#~i;=yPs0 z#I7=KY0x>-#L!TD>t+K1fpBuNIjdy4*hJP9MqUrgS@t-sFPXVL%Y8xQJHXX!H<0ZO z;S1U)Qq~E~K)szRTvO4;j5dP%3yT30g4j)j3TMa`rv z`+mI7a9j##zMs0RLO~afcG4Sk6G4#+<>Y%2V-S-y@h2DVdp*zd*uJ3^x(%mjIoeHt4fk}nccn?^BnQVtPYR*VTcd@w+ zv3cI5AW?Qib2{>QsLH+V`lvOAzQ;x3HnPsXa>xc-?>4ky({fxR=a7pC4&tD{qVHQN z^n99$p@D=UHoQ7q^kj$;gqQ&Ki1?4se6y9kf)aEmZ&quvUx4rkoV^;tPwBl;Ku z)7BlUWasqFh=uLtzBbG!FYuek;)Kjy(4%A{FL-UQIb;RQ8}N4=tzcXa7g#3sQ+3=2 zJ`nK)?iCJ0B!rK+ys&qx z=$oa_()ef#qZhQIAZmgUkGOxUg?s;zzH+k|@0x>yhiuAgbBH@FzieY5bA zXC6Hs3r-pPJ?QiJ&fYEC`?FiNW-|kwt(!C1{@%?!+cVH6OrMA=-&^M}Q;)y9aA$$+ z50Q&xqmK?2#`_HynI}B2VR9JqZwU$*yLBgL8{(QRvj;?YW5^gT*&;uji#&>3Y5Z&g zo&)((&OMvZWfjM5em0azTl5m%D22eLPM>BDmyprQ9LPgE49CFbR2~a9(J={w9y<$gFf2-#r&>3pHU z?_5P?NP8OV@@wz-)6R!~TKm#fe|NlvcAzdn z?Ll3J+KalG7r9bNZEmF00PtO?yHPbLE=BmIA5|r(VKgBg{Q+76>J3CySxP3`C29*z z=HGtlempy!G#-0MeK-!|MLi#cSZB#7;H?_xUqr?!7>%Ag=SGnjsTY%mq|)$ zU>-FzdAiPnt_>AqQF$JIyo#ulYGD4kc;KgM!65Ub8L5ebpr5Hu{4R2E{X1oj$P z2pQa4!eAML-3&A(LCJ}S@Y4WACW!8V|6=@M2z+~{qm@4j*^%FP|MUMQ-!%MZ^Y(q> z&tExs+4D^&<>UI3YSW%wmmm7uyYzXtec|bK(`UT-jdg$3(E7yGpR|4dtv$`dOYfWg zM(blwJXQBl{Nk3M-f-MHG3^h#?l}4Kir4y9eYU47e)?CdZ@zH)+9yuDcj$n1-}ArS zua+Ud_nu8ecR$WfOSVX)hB3r%7<`PKd8&wRkZ6B! z=+vJ5`1s)*;-~?q8XQ2i<2ddt5EyYEoTG)p9u4_-WYxidyOv^_($egH1XNJvp}76H-L zN)%t7UhW+$j-iH$pYiDuEc2M9U!J+s){1yTg|{$X0eBrsiEm#2sU34JdG%nT^}Cnt z`0C0nD-bL6y#M_Ug$v|NOUs Q-&Cwq&G7%&|78pOH?p88?*IS* literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Providers.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Providers.dll new file mode 100644 index 0000000000000000000000000000000000000000..35ac82429a72e1afe00786370f25bc15d50ef4bd GIT binary patch literal 69632 zcmeIb3t&{$xi-A!l6x|lBm@Y7VYr5CAcPQ5k>L_BawkEGN|_J_$RWu`|yVqWOt+n?IJ5%rcwy+5y?DTu}st`Y=RQ`Av+lL@kJG%eOA%2{6pvO-w zQx5bfUs4rtFRSw}uB)hVS60;4`s>{beD1o2T6a~gd&2ZGca49cFF!3Uxi_R|ln61! zVvTUrEUZ0JEQvy-T7*EAV<6?-Wagn%Mkn)BC*zhsMk>5ik2W^pc~}T1{~u04RWlJ9 zU=fp%kC~9a)R-05D0B-!M_~RW62Hx4Lgd%`?yV=@A%)_lI{jD;Gb;Ax*ZHdbl~gSY zDHc992c_DNM~HD6y`k(Ubo}y1#%2|9;@55=K1s5ONDo5HpzbZ3V^H-Oi8uq8Pr@i&7M#L>!?tcBR3$~5<;~#%?aM9G7ab>rUGoqJ$cF*wqq4|YF z3kycc$m2vcVflI?dVN)h5T&8clrO8VtEycbkQTw8sPooqcA5AF z+X&yY{gE)vo?&;0cjNvX=MY`ui{c&PHpbd`S@QdMX*nxFVtJCpK`9cSAdDBgQq~dv zn(-K6rs$NKpXv}3Q;Xs=MP=$&QZvQlgbuMeRkr#yVZ1n*`YFZp371@A{FE^+P1>X~ zW-)dlj2Ar^`!g0Wj$$0kSjsq)aV}x9See#~j(TI-57Qjtc-qH=ogGrSknv{5sSa5_ zoAZ^N|Gs03!y(?}{6}2=SH>%j^mK=Cr_0*O>Dz1_#eM0?bS7Tne3mnr&Rij(LyU7u zFVh*z3A>0&Do+*Lg2w8D}sq?Ig#{nob)!IYg+FRQ@fOUtrAXTok|AGMKIshq$Hl zpXCt7+@P*9Cmm_BsGu^7SVdRM7}1}YjmEEq*bHK+G`8cIHGm~DTL+fHY#W$^*_&V) z%ua!IU}mu>%}&g^fpuXv3alHmIbd#P4Pd>PJptC2*$%M&%-#VT#Oy5C5N0V>d3<(J zAXZtNVx+Z~wStarIQ5ECjHfYLL09kB=t6diyO<@2)y$R>`;tf!k6CS0_b`<;Sdzr! z%$^}uLB04qTW;WXX=1(gj^IwKMcfhGM`#g;t#)9B=x9r%S)<4%`_^l75-zdXsifYP zC3=YUww`49W7`12y|#QR|D~;f@S?3qo<92ddS^%c{c*+|{}8d71cQA&@rS8_1PXmym3-OnViHT{NWzR%8o5~+$nXU+X_aw@hT>eP!cPGj@ zSNE?g+~sX5HJVr;~b`?09NM za<2%>-e%p~skbKgG1>9dCCPmwEc48|w^N@^?q{;&sjnpWkFXqI*1etjm*jyaJD%Dz zWl)6WV6AR;N`6G$5TlMqJ4Z`RmNsiQS^ zcdEx^-5rmn$~}erc}nzhyqG#s5oV#(+cfrG>g^`Wb9|gSMPrYqPBqy;$CcFS8gr)2 z&{+4hnHtMao29YQX|%23pQpq?$DL{A8VjV&*4SfdcW7)=+8mAjJnc&wJCHV4V}DM& zOJgaHc^d2In6I%CM}@`~IB4_BKQgj44xh$;>{zU^qmC+#S<~eXO#VD2COZ13*C@hl zY`R}#cc#~AtUkS7V{6k_Xlz^hN{#(0owkttBRzbWzDi>W&WAPD+xdvbN}a1s_GQNk z=VKas-nmv|uQ{JE*>cCn&ZkXw4~>^+G!{yIPGj$-eph2xoZmCqR~+t)CX+qv7?H6- zW7Qd(Ot!}HWX6jc`%%VA8hb0_2O7JWv0Y=inLpB4Y35Hf_CV%djqS^PS!1@WUutYt z)~_|TCF_XB5<8sKn7_lHHFmti-!(Qn+gR3~5^EgqWoKJdrDS(^?5(knI}SJ5^VGW~ z8VjXP(%5^cr5byv(`1c3*J+B$LXI7srfTffPSZ_x%yGQaERCJ(RA#c1j?~VxH8!yG z9F0xxJXd2io$u1vn$GhywzKnmjUDb>p|MXpSDLI(daoRx#)@(lnQVA^Y0eUjEzJ2B zliig5P)@bUO447!1|vv#>xV|}{ZXR9SLvQA@P?ec`i)^~Z* zWSi4p>GF)me&6LejkR?7uEx6MzM!#^-0z!gXL^0^znN@r`r6zVP4*hGmrVA%^zY~X zKx5l;w`pvD?sknG%>9wcj;A;0{@7$6(9!-xV=cM6O?IB@_Gqjn_h%-Hb9U%_Ctg&TXU(wiOU0*X>ZE@4BL~yN9sLAS_m)*lPHnhhmjVWhGYl+5I_o~*|tG$++>>1~$y&5!jOYeI%wzBtEH1=}u zRT_)$Bk$Sd&r{+V=gdCxuFhcV`+Q4dpY-{T$u>F1^?lZ4+nwL)`#p`l)OUl%-tN1} zWIuBD%GqMFmz`(&zNE31zCSS8ubdyJZa3L)oXL6rZnDFqvP)wvxj!-4399?4##(as znCvgkS$TU+cG+2(_a7Ro&)a9RxQumq`%RXSaV0gRF=yJ#8hbJC7aH50_lm|wr@gAN zJJVj%*z0+(YwZ2JH#D{>?Ux$+dD@#A>y`5>jr}d}Esgy-?SRHo9PeoCK-xi#W%PSj zWBL6KX>5(-u*QDuIHIuyj-wiz-0zsi>iWH}v1j|8(AZD=oitgGjN|=2(3rLVpG=mQ z@nY&3jScR9R%5sI|3qUCb-JLj=Q{mGW1-ZG8hbDGlE&uuZ_(I2{V!{5ZU0X-wzWS! z$iVe5m_|XI#++&K8hbG>L1Vk~5;ZnDElFc{rX_3a^}G~~y`Pt=u}x`d8vA*gLu0*i z(lz$CJg3I~oR+Dv6h{Y*9Z2h_v5bD5HJ0D6i^kSCx@zpl4wuFjINTbW+^?s`>iYH8 z*t7lmYV4=|`kAbNM!`UhS^Ez*S#iee{fC-tT*i_9!%Vg;S zvXvPb14e1A?|_?4_T7w+ouf^*kw)FE8VjX*H1=NVIFs$lxOu~9oH zrN+(=@M$b(;1Z2Z7+9?_|G;G$TR*TtV{Z(+S7YY~t~A-zj9xhpXl!k6&}4C$2Xnus zvG)f&WU|!ELphIV?4z938gmVL%w$=aT~fcLv71uAZL-dp&-QylVUX2~k->0$6At8<3HslqJ-8bZQlMTq+Hsno>y*lJAjs1Se0ge5A z$gfQ{GP76CyBcfBea~bQsP4BKYso!qvbmXSbB}23P|i_}eUx*|WM3xBW{n-n`Gdwj z%K4+o7H7Vg^P$G}<($@-YtY9gTb|jH`)7^i4E@ApD>I9S{+Grk5B-bA77V?lvBse- zCR>$xOV@vBti0=|8e7(t9#~_wSe5x$S9-7w_E_c#mVf6IKR(@>2)*Qvl{+i0{7)7ZtKg(llWW3WhLi3PL+6?7Bbs;TYwV+(3XNI2EHv4L%uxl4GTLSt_g+^4a9IbYS-p`2A3J6-Ug#_YqsuCb4DzNxW3UDjx<=df>U z%-ZEU8k;%nDU)@}x^LLC8vDku=QZ~1u`dQH8vFUM%^G`W*h?B~>H9;I z^~yRqY=_4FKI}&(yE&^v;g3x=J}a+qm&T?R?$+3Sg+J5Sw!(cTn~^mu?`4zSo%Lbi zFHBaM^=aWN8tXOuHH}Rl{!5Lm8vd5as`hl2eMjn z|5IZ*Lw|3whqJ!b_qfR(%_=E6p|QJ*PHL>a=mU+dDf*MfHW!`I*sDe7G}c`7UmE*I z(M65rj%d+X@rcVByKBT1lRcjGWCni$f@b=s#N$~%%CN>6v;N~*Z)Mmu_Kgw7$B5GM zVn(u7mz$ZUvC_;8jXjXrQDgfuyK2mq)k|ZuvIc5wOV)6WC3d(~WBv}M8av)$w#H^> zFVNU~*~>I`cgF`b_HoCxCVMJt`-mouy)okZ8vDbDO&YTnZ`N3!;+HgbTk#JxR$IJX zV^0?E(AfUsA8YKR;-6@&^T<6Kn>2E-#u`WdTw^~N8PeDvM!ur4E~8%4*z8fi)Y!UF zztY&RM;*|Z^QLz+R(8{GH1_mO?`iD#O@}qs_vRxSTYmHJHMZ~O;~Go7<%GuWzU8FG zw%_uB#%!biq_I0kpV8QlMxWJK+O3~xtm@YP(%3I=y{NI1w_ehiWz63-)^p51G&XU} zRgG1RvEZZgr^HiPYsc6%_LDL38fzYtq_GrFipEBH92#5Vacb;2PnO0Gc(OHS8{1i9 zw~Xzgv3tjM)7Y-D-8FV`Y)_4i7}r~4_l?Wb*#2?-HI^`bkj7?=&)3*@#}{bq^!P%J zjhZk*W8a)GQe(#_+^n&}lF=G_w8W#aKbDNsm}g>%#@0`qWU@gWu1vgLWBn&h)!1E= zW@zl&lgc#q=A=6`7Ju7Zjoo(J-5UGWZSysDsRX2*vir+8v9M@QjHD1y;ft7 z-M(C7=Wegp*d3EsXzZcM_i1eRnC$J;{nP)|WXDr~H~rsC_N5Mgo&KW6 zl4raGroIjH1F#P)ucq{zVXzaHc^&>5zYTTk5+CX?WX2D{WSuo3%)ZkhDPg-=_ni(I z3I7hJJnS%7;_eQ^XBg~*B>8<5#_{zjN3Zp=P7BZNA6eD}v0?1{u}*}paG zo=AK-`>4haWH)Ql37Yoo+2-lhO zMyqg%QoB*K;_RzPRG<8x$$!E}s(i`3P5f0Wx!fvm6S}>uRV8-q>{x{=51%ii#7!mM@~bO{fxeE@Us+aQ0i5*u?~H8(kib$|A1!TwBH6W+X=Z3pt*9 z3GL#mX026x%PhADeaytp+b{ydkr*Y#oSUNYb%d=0jJ@-1Bo2lh1qw?w~?&I=s-WD;Rw_p1;t?e_Ew+X$Z{kHAZM)qO2SFPeD&7;i6 z>htThw~C)=YWrK|ZQ}K)lHbHEu}4_`r)KlVsJuM;#u!uUks1#&ZxbJ}y(&?8bzc6< z)G^Mo+Og>8U6rV|vfNlrR0&PFre8gus+H^cE>vz4eYDzeiLq)c<#4%iT;Y;P%R<(a zwe|?**5z>+fj6oj_Is^JZskZyw4)1`M8-Tl$}(IMX?gwLTOY3xZR_&?fA&MTCynC@ zmqhkhxF-$Ea7m=)m-#HnE6XmHQr_6}s1XvoHa=n$wPh2~#=z&bNw{v0hNZf?qvy0B zM-{HM30Y#-))zGs>a(9wvO21*EU~kKF?*<)Gh7}QLs`|fo=a`w*(iNk5=%c^9!p=< zM(ZoT(O$ykacv%pY^7@H-<_FrrrtAlj^BvqC9=1Q?SwY5i;v=0tf1}<)##F=&L*0v z+!&?d61zClM!9~kp>+PLS<1Y=&RRtKkwnk)?Ufj3x%C>Mud1IdZ;j~H|C9Hs?fHtn z3XC35<6MmdeUBH;8)reCBee?aJH6;90Ln6KV-;7lGb_t&ZIndLY06R`C*gDY|K8bA zb6pDkLp$T#b*8)x&qidQ8&_X=Uu0PJ(^~2M89vKK+vu~Y{I(ulHlatNYSnok%2BB& zA+1Xy&#yY0%0}HOg!48rf@5x75~(0t8RIiNHmqpdR^;Qf-jI>oge)x?+scqQH za$^Ugw+i>LdU9nG(F(Fe_h_7{a`qKIYU8}LK2ocguSF&EdOujj60P>TJT_E>FY@u~ zC9Th_5y>*v)Sm%Vy9hr~R(a%~qHX|xEJ~y&LIBzJZl9#kv znUAd1@38c|eut&l6L# z%e>L&s>iN>WL`Ir=9rRuLV89=VE2mgqCTYGuUG*0Fpx9r+LOZS=;P@H`VP zu?t;Ow~=`pYE_@8;|k~La}aGur;baO7{{ess?{)DVytN4R?#JG>%{JPV-}6RPmFz! zqubj=>-)IK>+ADts$*A?hx5i6S0y94&-JH~w{eMjCaFe6Tl4UL@@Ut4CVC$Dzx%n> zJZ%KlYWauw7*&bthv@xhxZHSNr>~@He-d31{aKH)j4uD@Cq(+^XsS2VCt~W;F7+9f z`bN;(IPx#MTeKq`_*BkBc`Ttp~pZ))N zy|IZ`^R2wTtJ&b6CI9S=@N;`(*R7u3s1dSV8!alYz5&=4s$H(CRi90N!U_s6Qr;^5 z!6kZLerjeB;S!s0q{RlqokOU5#m5_Tw?OL#xM6Vfh5(RWu8#k;uVogC2xt|WnTIQ(5ko!V3v3+ zF39;+Kv`01sT2znsu&-%N`>*ZGSMwzyzMT|O9fB7L@#4gytD~1HZzI@E@5nD6p6CL z&FEqDG6or&7(Xj3LHmMv=ny zj2=cWW00|lF~r!+C{o#;(ZlFv3^Fz`h8UX}MH<^PdKkToLB=M=5Mwi=aIih2htbOz zWNcy#F*Y-bbhc;oFnSq-j7^Lo#%4z0WP3&rqn9zr*u)rOY-SW0Y|rRn^fCq+n;1ik z&5RsOqv*)37(I+$#vo%8V~DYtQFLN^Mh~NxG051&7-DQ@ z6rI_g(ZlFv3^Fz`h8UX}MGo6DdKkToLB=M=5Mwi==)(4l9!4)?kgXj3LHmM$wDy89j_%#vo%8V~DYtQS@eeMh~NxG051&7-DQ@6n)s9 z(ZlFv3^Fz`h8UX}MPIgO^e}oEgN#j#A;xA#k;nFo9!4)?kgsOqZq(m7(I+$#vo%8V~DYtQ4C~zMh~Nx zG051&7-DQ@6oc5F(ZlFv3^Fz`h8UX}#bCB)^e}oEgN#j#A;xA#ksOqZrBdj2=cWW00|l zF~r!+C`Pe8qleMU7-Vc>3^6t{iksM;(ZlFv3^Fz`h8UX}#m#Kb=wb9S1{s?eLyXOg z;uf}N^e}oEgN#j#A;xA#F`DfeJ&az)AY&6_h_RVb+{*Th9!4)?kg6=|%l3>OMlWNKv57In*vu%#u|1=Q(aRWQ zY+?*CHZzLxY|rRn^fCq+n;1ik&5U9K+cSC?y^KM|CdLqBGovVBdqxkVmodoL#28|1 zW)u_Ip3%eTWehSlF@_kM8O0>FXY??78H0>Xj3LHmMsXY4GkO@kj6udG#t>sOqbOy2 zMh~NxG051&7-DQ@6t}ZIqleMU7-Vc>3^6t{ipgxx=wb9S1{s?eLyXOgVv4jEQwECX z;@q5fbKb*w59hs{_i{eS`5@<;IN!wi5a&ajZ{~b6=fzakpUV22cXQsuc@O8kocD4* z$oU}Wn>gRZ`4HzroNwlQGv~!L)}O}uoOg5H!+8(qy`1-QKFIkX=bJd+#Q6~CL!58s zd^6|8bk?8F`kZ%j-otqh=e?Zwaz4oUAm^Jn-^BS4=bIVD45{g6obYA2A9$6q_Y%$r zB`#dW*d(#{A&EA6Dv(9b5IWE&pxJbn-I2cG(~17gPYyjBknhbG^!FS-qL(x)9NO_5 zse7PEXx$19W{+R;WYaQ;%qM8fxM@@39n?wCoqsADI>uQNVFXeD3Lubt2; zhLJ~$C?vGfTj~=CAGRhDe$$#l_^36F@LSe&!nM{6!tYvTyx+5C6TV=T@7Ql5w2BSZ z9K!Ega|t(EyV21k#-$Oa#-$TF;xY)Gaam&C4BrfUP(C+NuZNSbz|5VwgI<)5S3wXL zVtm=1{Caf5N|sG2Tf}9NcB^8Psdq?4w*6)dy5|TX z;>pCNakBUZm#3mU73HZ^E?;1jD*l!0(_rU-odb3b*g42f9*0AO*gjq4ax6~RJ7MpH zy%Y9MvX`#`aEjk^JNkCaWakjp{&;#I-Q}@ z89JSz(-}IQq0<>UouSj2bm-w5olW&-N zeKEx&`6%$w6qn>2jn2 zqzy<{AZ@8R)Mb~E)RGW{5}Z#hmk&lbT!gPk*-0y5$PtR zn~`oox)td*q}!41K)Ms@E~LAW?m@a2={}_Uk-m)d6{N2reS=bYoNtKXeEe^MzbVw) z&)x!mOO)|(zlHJxVu4+@JAi(82mBrIgWw0j-$i-|eh(u(g7hf-92Hd@$1#+@kMj4? z{sj05@RP7Rh4e$ze~9|ixXw=FIy;T>GblfU@-w*p&Y=D*>d&J7Eb7nV`aBD}bFe!H zyK}HR2fK5)j?cmVJnYZI{ygl@!~Q(%&*Qp3k9HT(?gH9fK)VZQcLD7#pxp(`7Z=d} zBHCX>`-^CQ5$!Lc{YA9Di1rsT-&};wCFop&&L!wvg3cxAT!PLe=v;!%CCpowpw|Mu z7U;D=uLXK7&})HS3-nr`*8;s3%!4h^y$s#U(7g=Z%h0_H-OJFu4BgAny$s#U(7lZL z^)mFYK>rH#uR#9_^shkw3iPi){|fZ4K>rH#uR#9_=I<-;a}|EB!p~Lsxe7m5;pZy+ zT!o*j@N*S@uENh%__+!{SFui9g+B{@-X*VVi$(1}Ef%%Uv{=;s(PB~iL5oH0?<^Lz zKeJfWzRF@z`yq=(?OQAswXd*P)Vgo6sCC$4QR|__qV}OS__e{W4SsF#YlB}K{Mz8x z2ER7=wZX3qer@n;gI^o`+AL~4w84KI{Kvt69Q?<@e;oYB!G9e5$H9Lb{Kvt69Q?<@ ze;oYB!G9e5$5|{^C-rw6;z+Ql^)?A<3eq&B=}0q>W+BZ++6ie6^m37QL)sl_52U@2 z_CcD5v_EtPA{~tKAxI057NWigX))4KNN=W8j;EU~^*pbS1|JPR26khSjz?O8bQ021 zq?3_OrBv!pwX9^_>EP4BXTq)w>1@=`M*SS{IpA|)cNfxmNarK1Kw62^hjcO0D)h%v zq%}zWNSDJdfV2VW3Z#ulS5hjEYbDyPLi!-m)s`TyyQ?kg9hr}UKMKAEd=2Xz44}2f^e(?R^FI(1g`vekyWoew4-uF9%0rfan0_7)BeiG#;QGN>Lr%-;1{L1GNr%?YP>OVyN zhp7J$^`}vP8uh19e;V~?P=5yXXHb6z^=B=+`TU->?Bo7BYk8IZpSAqPE)Vo9&eJ)h z=aF7OdXeUq^$F1|I`H#;WGevEXCD#}k+RQi606(o&?8 zkxoTA9qCM@Wk_cuorAOnsUPWbqyeN2NLL_jM7k2`{YW1`x(exoNFSzD9{0mI&PTu> z0bdQi8pru4_@m%!h|A+%i}JPB6FjcgqWwCgPau5~_D>^y7U}b-Ul0BQ(hW#AQYz!z z2)j+-o4_}NZwB9ncH6;sAl->{7t-CZ+kJop9h3*Z;QFM?kJzXaX_-U5CZ{4)3z@GIa~!LM4AtetA$<_(!$==Nx*F-DNY@};i*y~*Cy+i# zsqD`u(VtJF{8^;WBVCX51xls;3pVw}>ka7FjYu~k-Hdb#+HFO;4e55IJCN=~x(n%U zq3^Ti&DZ08@crN~gTD;^3ivDFhlo>iaTw_lq(@ej5A?_!;P&fzDZ!pGEmul%Jz=sec~n z1?q3vFBfe6xnC}VUj)AdyB4IEkzPT16{*FpbZtoEkR~8aLYjg!jZ*11&0ffU)4|j2 z}p=hv8(43Id=7YA_wKUD9=TCF3P*1yc^29+12xm zZm92$`tGRjj{5F)^}M4y?0Uei2kd<_SRT*wu599iJ6_w9iBPJhab4`#iMIL;F0m&qMn>yLx_;2c7=V z=?|U$(CH7I{?O?Uo&M1251syY^&F@_^aet2AoK=8Zy@vrLT@1S210Kj^aet2pj|yz z8VKFN&>alj!O$HH-NDcu4Bf%d9Sq&U&>alj!FKh$YB2PNKz|7Ihd_S_^oKxy2=s?Q ze+cx4Kz|7Ihd_UbT|EyQ0zU=tQvg2&@KXRk1@Kb3gNF1{tDr*5dI3`uMqwU;ja+>3gNF1{tDr*(5{~I6~b>3{1(A)5&Rax zZxQ?!!EX`#7Qt^3{1(A)5&RaxZxQ?!!EcdWJ?ATe|6=$rhW}#tFNXhO_%DY4V)!qH z|6=$rhW}#tFNXhO_%DY4V)!q%tLJ>hh-0+9g6F|8NXJqt=gYD7#auofd^~swcnNVU z*_GI9*lrTaC!u^2%1cpRitcd`l(be@2jWU z8(C*M?54wRI_##yZaVB{!fqz)X2NbJ>}Hak6r5>Sf2E=f_GPdygMAt7%V1vy``NIc z4g1-!pAGxju%Au#@#JT={b7!O4%*E@yE$k#2kqvd-5j)=gLZS#ZZ6u*MZ39ZHy7>Z zqTO6-C%?xq*ZwH`y$kK{Li@YW{w}n?3+?Yh`@7KoF0`MA_Vdtw9@@`C`*~eAvf^HRbtDsv2 z-74r-LAMIJRnV=1ZWZau?{`$$H*wrcp}!RROQF9M`b(j|6#7e{zZCjQp}!RROQF9M z`Zdt6fqo72YoK2P{Tk@kK)(k1HPEktehu_%NMC+`q{goP){Gy1{P5$4A3yx~;l~d@ ze)#djj~{;g@Z*OcKm7RNXF2>Vho9x}vmAbw!_RW~Sq?wT;b%GgEQg=v@Ut9#mXja( z{gmbQoqT=*@E3r;0Q?2uF93f5_zS>a0R95-7l6M2`~~1I0Dl4aYk{*_D{h6 z3D`dY`zK)kB29_^n;`{&XAd9+`T_UqApJ=(8F`}JtQ z9_`no{d$bw_0V|%Ixj%y1?ap0ofn|<0(4%0&I{0a0XiF?vjI9AptAuw8=$iRIvb#~ z0XiFSJ#B#AM(AyX-bUzcgx*HzZG_%N=xv1FM(AyX-X`d6g5DRHyBWHhp}QHno1wcIx|^Z98M>RHy9K&ipt}XSTcEoIx?7;T z1-e_Hy9K&ipt}Y0(-!D&h5lCPZ-xF==x>GoR_Jeq{#NL3h5lCPZ-xF==x>AmHt27I z{x;}ugZ?(?Z-f3e=x>AmHt27I{x;07+u&zA{A`Dx?eMc5ezwEUcKF#2KilDFJN#^i zpY8Co9e%dM&kp$60Y5w7X9xW3fS(=kvjcv1z|Ri&*#SR0;AaQ??7(`l1O9fx-%j}3 z34c4`Zzufiguk8ew-f$$!rxB#+X;U=;cqAW?S#Kw@V5*8cER5+_}c}4yWnpZ{Oy9j zUGTRH{&vCNF8JF8f4i_A?t)_}vY^yWw{?{O*R|-SE2`es{y~Zus2| zzq{dgH~j8_-#zfV2Y&a!?;iNw1HXIVcMtsTf!{swy9a*v!0#UT-2=aSu>S9X|Gn_P z7ykFc|6cgt3;%oJe=q#+h5xTr z``~{c{O^PReek~z{`bNEKKS1U|NG#7AN=p5{g3><)jq_rA93tQ9QzT+e#EgKaqLGN z`w_=}#IYZ7>_;5?5yyVSu^(~lM;!YR$9}}IA91`waZp&|HN^88#UuF};BO$lHz+fgd~y+y|*?GC{10PGIH?f~o#;P?;F@k{%6VE+#6 z-+}!*uzv^k@1Vclq5hKX4x-&bv^$7)2hr{z+8so@gXrgj)X%d0yJ-I|+P{nT@1p&? zX#XzSzl-+o;yk@e=Sk`ug3cl69D>dv=p2I1A?O@}&LQX=!udW#=UeI>hTdW59fsav z=pBaMVdx!(-eKq+hTdU}pTjhMr0x;u9)a!==pKRY5$GO)?h)u7f$kCL9)a!=jLRc5 zE~Wla=pTjtQRp9q{!!>3h5k|KABFx==pTjtQRpAVxIaqcUivu(KgZzb82lWApJVWI z41SKm&oTHp20zE(=NSAPgP&u#zK+rLCH=jR>*)mio&Y}yeiCt%kXy@{w~AcWvq*r;rEJNeV^}&UH#?rtN8r)D(Wq9_T~yW;wMFs_>EX#E6&RUe(ME+vU146-U>NH0nl1*NrmjMn%^Z3^gh#*ScT41?J&XF1j|{OEG$fq!^{N%U)??O%!}z}mi1@U z`R}P(=&Ng8-kM7fYGi0NvwSP+s%RjIDHZoMN()g|UsqMTI56Lk4T#xgCG*FY&7C%$ zbLC^pCeNQZYx-0!nlZM#ykyoiaZAa)%j$fAK$XAt)}{03kE^I$N-7hpeANp@xXL&* zc|`f);(!RuUuGOdY4}Ku5U6@=!0byg)mOj7zp%7+k>Ajpy$yAAsjE~!gh|!@1yZ_#k7AZ6 zA6r@3P}5LdQSTGw;~Ew%^3{#=H`Feypy^Fe7wKfI7Q{t>z7DpbJUkiO8XqI^zO?Lz;G@Zl?N9=@XH;nNY(I3}cPoRF?%!r_c`ZBm}DK|-362x;;m z9K|Rn6e4owkcnz8=K{%;fV{dT8zHpeHQrydtg6~qH_2D)qwex899vJ<(1Hd!bH+$$ zsI8~N$~P>_=u)n#^aVt|9Bx7luL-^d4U1{`jH~mn2*?XPN@hY;#o}6jpuVayAfl|* zsq=H!2Iw5Ka>>2*zFK)vhP7~g1S*&KzObrN zp4LTGb%A=asr1(_6y~KnqoS^&W^7$uMPt}qB@J4#Tw1kE$Sx>bM%N2xmQ>MzTA&Z? zD(VnbfKzKaR;4(@0kP1xs6xi2uJrIYUs6%KP#)1@Uwx^%R59x4cxrrgi+!?Ynr}t8 zv{omoBMQ(V!;lst9gegJ=?J97NJkT5J> zl_bUFubt+*x1JI?l&gI-*ePF9S4TZ8#{$idGzZh=>bqC0sH(4}6@kV|ZAEo;<5)F6 z%gqiAM?Q{4G|Prr#lnTR;RM$CYW(;33`WBD`0C^+7WEZ$7VCvi&Ro+f=wRv_m-$3^ zBEt-=t_8WS$-&CQ%^1U#70W6rtLhsC705ZxJj8{V>db;_IpfvwgeS96J;qg0rF8w( zmZ^d1s}A^(UFNH+@-GxM75CCEud<=8PR_0fR-H!b|9_!t*7QyXT`zl@wuE&QhHsg# zqJBJIOX^}Mqg9BySWb*oTVL0xDy!t=OY?~c@VqO}iZSn+()Bd&n#4G4<%kD}Iz_@b zJ8F6g2wpT~U)GhGb4Rt`zbwpX5n+LPOy*IY<1?2eo##b2s{y6@0}F+mPE3{I#=bUl`e_gf2sWJIjc?bp5py2i=MIszobvb?r>&(J1H3 z`Qd#UP52RXEOk&R^&U2+a{EZ5U)%3d3Gbu|RWe*9MJgGgl46yNRLLln(B!GMU=X0G zQ*kKK#Hl#6Xxdb~m_s%zgGx(k=?vFlIGAV8xC8_Fe4eW+h1~j0UnIsZUR}*fKSk6!_z8l6={DcFAmpT9?q5n{rL`CKPDjiO zeCeW+nq@Rq6Q!kxQC;V1fto;J%Ojt@Xb}xes;70WOs$z}-#fuqLnd`<%Pyw*>#G*Y z?F%`lkZ5kHucGzG%*>`eTJ?C^LoB96ZGs;$OH2QpCA7a2C2GYOTOZC%uS2LpMLJQf zbz-92AE{V5YucfVmdlBC{u;$*(_V!suVdldj0$y&&&41V4pU=oEH~Fblo$qv{V;QC z5tHit4a>$gic-$_7KX<^4HHyyCnzExIEd0kqLlWWbv_(Cop)n}DGjJ&X1ggg%GA-w zT&u&y_?qIcU93jPRPD4(t+-c|YGa5v#WYf~u#`jwovy|a9ka@m|pTR%FDG+;~V zY|BM6d>3atOvy)0Kuq(|RYXWjsXAWYbUEs3D`}0Y#qE|H(`>MayK}nQ(8ybp8Xvcu z(XgPpDzHQ#m4_&1$$>(*ev8y0(IM2hszEvle$t|`7j!tIOxs*9IeraZ>tpp=< zWWk)O`XvIF%>wS6h8j^un>U&;!u>=yW)({nu)bt6gNaB|Nk?+o>lV{jVELZjm&T(Q)FaD7@1-tGt$V6GBUJ`L5OZDjhrb? zx0XhkDNi?;Mj0(>#uQ=91RUge+D$K@=PRO=sT`*C(1;GqoK5-hO5~m;U*EIHRb79e zf=M`5Gh-Vgn_w@?djd5T^5tTV9qL8(@JL^2#T`|FD%!cKXPa{Qpi^60udSJEpq|Uf zL&M`8nQd(pUZZL6R#!or9NIf!M@2KQHlZmwxkMWeeB>^RrX3p8vul?(_-SXBUx`~} zUR&zxN{Ywp-_Q%dGf zEh)ck`h@Xgr%Ykx(rI^$ol;6Bvr0<8^K&Fkmw-V3;=_}oLP;40i%- zDr`Z^jy&nHp0&(sP>*bQmZF;+Pm488+!3EGte_I9;uhmYFIK80 zA8v66N7+EO)x^e8Ditf)!tgbON>|XYRA?Q$5x4X#+sY^#DTW40>CTk?lU^$5_j>wF zKjt~6N7+m2$ZB!aG7h6p>d1%e&uS_OpN$0^3q7(V73o>VC8JwTmUOdA(W-ux=SD_X zP8gu`DbM5r@h?mP};=;)SFq!s8VV;suk3HSUsvRceh4WSnss(uQO&?Vdl z(x+@KkAt3YQIGk#KbMhq6(3)CWXkg($IJ>!jq@>>dR~nyHI9ri8L217jd7;*9%yTv zs4L4DE#(x`bn+v|hdyG|*p^4EdhW(zGOqs$9)nffn`$KLqukKU7ZbU+>5(PH&`4uu zBKKd77)x;(*SxG%Beb6TPhRnDkKX_9jZ~VGEp`jd%W-atC8K|$%*r1-QOBw~=`Tsq z2P{GGCoL(6DTozm6W}=DYbmrPAka2>9IoMQ(bW=^iJah7BpH zUFfcmn`C+81Nrql=Pem0!3mL?LO3Qpa3CuTl&F*@?+rL0Qt)S4P2{C!Q znC~w0`P@tD>zCa$WXNKFeoa+noj>4TRG(kzuNksvMRir}(jjALH@viT!suZmhK?LD z!c8l;yM|U)cU5>1&le(PsKt_pVKI@*is|ni*$zlbbA# zpo1+-WRctKOdnw)jGH;%1}8N zloTnDm0(EpZY}X}4AUNLG&H%jNLHdD)3>$E>X^p8*lc)8v`|)(A=R(7)S5QT`>^52 z)L3F!$%fp3)^h9GY>>yMx1_}u%t|pN2ep=bvYjUV+1TS~OEfFhkj-x``)s?72D15t z^tOew(hTXLt)$-?Y%}OqMZ?{YIa9VB3uMx3}GO(cbE=#`CW>*$QfUPZ*eQ=l6WpP=%8V(KX zaILU*GAhlEP{*JheP$AlOS8>P;-gcxX4e@GGKC5~Be;j-q||{T>IgdKv`Cs5Nt3(6 zI6EV_&tixeq_bYB~(O{=7R&1&=JPK(r(qv}s6`nlgC8~tDQ{OZ; zIF|lSE2a-in>I?m?{!#G51H3L&R*A^#(|lqvvr^%n`TA1Q;h7FB6diVtt?lQH4cFa zWUj_WGa5~Snx4zjj}Q7fTA9}qyhhAoG~gmml{xKEe;E^UL<2JhsJSeCjC18OWui@=8yCG*3DId`~+GWOa=1RH8 znTB~kyh>0*I&p+Fgb8U-64LM@R68a*wUnoGK}elONJm9T?g%MvcKRgkKVv&}rGC}v zaH!46># ze#_}}syGnN7aj*iLx;%GY;d+8jVnF)lrtkk#e=Z^o8qCU=zuw@O&QmU%H>pR4Av1! zc$|rjyz=O!!2`6WWE#`IF?G8H?KIR39WJ7yJV?goif2qk=E`CeAWXSGw7Lvw@?u=b zyQJnJ>36htLlC1nc%(;k^BNhKY@HE2mKi*84TTeZ+E*a01D4Fuy`rsXe+x&jF*kML zL(yYVR>32^uPqfklF{l!w7TWuGvpGqsWZCY=$&kw$ry(%tLR|VnT~xx)Mc7Yhp;@A z(&9p0dW!a>>cpG-7b>KUPAucsVj0VQV|$w*Tpw!V5*~`u9gT4cpU1cyJgOkZm_1FQ znp+k#PC5oTK3(l>z-VgeWA123AMQ<$(!CV1#8j7q&K&HTTW)@qDyh?3^&O5zR?2K< z@JQaZY$$@Wmdv7jV|N|Pktv&51X*pUL>yMO#cE#Nrc$E3Wrta265XVSM;ViU@*l6|J=8hc55E`2hhABz(5%@9%NbjNtk3kf+O>{uW>B za#B@OKyKJ=xD8p$sV&BJqS~Rpw@@)@{$%$DkA%CJ&Y4jA&vuQ}u-A{!92cgROVIGc zUe>$;A%ALgP)IUMLc?QN@pMG>k;a;IvD1nTZ&>=8jmX&`{d}8x2&Oe35+0UDUsKR+ z7?XHE^eOmWH&L?2(%kVG?Ei*|L;U!0_tTVy24Pge&S(%+(tEX@pF zadc{JDhtUt&lsPq;R<(RtMfC!I62p_Bgs*1nacCBias1@^JLy)oXplvuGx~@_BZau z$VnVO2h;jJVyq1^9;aQ?l4J{vfudpxFX(ar$fMyojw($)+!!s_-GbcE<2UWB$;Gy- zgBAhp{HiiCrCm-dQ+Y0F@@{2}Gn^eh!?Is!HIUk!!zW2ACG}1*%%xJ77!BZoF5K`n zX!Zy1gfQ4;KBB^9p$ixHniNk&9gULk+GO-DE6^0RZQN&Rrzz57n$ItBs>Ermm}@*e+A&5=J64HGzOm*wgbAN32#DNnJnAxz@Yk2GX}{6)*p^h{ET>&fHlIH% zW30^l;=)7UO>XnSpE(_>;bI;p9)!?!EiL5ZMs@e#veWKRUG3r9Hrf<(Eq&gEl_Ex+ zvY`7{?AOfY&TLH+4*f}K3VDkqIWvi7Qzy0?ic$5XFW@+67PG5+?$YplX5NGwPu9%) z5~Cp8Gs0@#LQ$;p-ibq|Z9P6sQupoV2T@8P@&h7e!k>Xeex#&~xgt5%P1CA0@@EF8 zWFn@y@CQ9HB2PB&xs_`Kt{s~yk2H%Rqyh}z8p?g5yy4Z9^jpK2)pWto!C2^H26fI! zLi^ArLW#DB#tPG>4dl!ZZp_o71|E$bI&I;ROB^3XQn3mEEtGxuLnAeo>Gld0bOGo? zI9x%Jns>QHH0!8J-8O1t&LxVCsa<=Y>}VCO0XYxJ{&%vISj3WM8d zX~wZp)5tTVjz-CbA0D)8MxRaNicHK*N=!`0#-9ltVZ`UWbObpxAn0Z|+~+QlNWBp5 zJjq+#A5&**cMkmgAYxqUQ74*r4%e_F$?G+xS%>y1#-6jiK1)=e%4whIv}a8rT&E?; z(%uK1)b8m}0nn~GV))8YEFb)|b#cnMJkez-Xk+a0vjrZx#)irGtci9^IF(_4#^N9+ zq8;Q^4OjW;5xGcoS%ec69hG!tJQ8(T+M0Xh=aF>rs3)f`OMAmAY^BbWbU-89TGYm{Y9*~2aiMH=tsyTD zEz-|5Mx%Tph8Ct1b2SNHBs8#u`PGDQu{^PY9`UJ*DqJqj>2ji*AbR#1Rm-hV-PZF# zKIQbU1C*xul#QOkb;SIwm(kQ@2CeVgv=1#Ji>X2MgK8@5<`UZGkYbcGH+$W6qm~fExE>u0+(uDq^gMLteHiT4`PeRfL1J{Ej^l*CH#3z zc*V*ra)m$S$fuJ%^unkhWo}`yX2HOFuXx-+X#NlX;A*-AvrHndBh$|3hL_C zk>UII>udp6t#*WbVbft6R|mGpJV}^OizDV5Ee^`cu}cs4^yWAXF%}B?vY-CpoH@lQ z860z>Igv#c%iX`~mxyv2tmX%~tt;e>mzqqXYG}Ng6JzVj_Ug!;dB5Dcow{yvjm=*~ zHIwkZqE(&jGGm8B&#P5$wz8p~j_P`AU&B}%GV+wd(pa4NBPagwbPJsWeC$MPPZzoN z#3-j8z^6*;V=EerW-~fXXX&K(RAZ*idXiAv9~A?iTuozDAHJ8O34$VM*Mx-VDCx}0 z_1wHRbgBN>f~d~~u4zVs1Dtje41c34D!Reu7qsZ>TomDTnUZk6GmeDyuUkb)7iiz( zDsaY;_;s6;gJI5iauE4ltSA>n5nuNza>kRB8)`z1ik%7MDC&z^QNBjC`dZjc&IIyy zfCGRc`DLuu;^Vo|}Aw(+&K+np&goX@R8Ax(Cs z%8=Ur`dCy@Q``J{+camY4C@QgqR^&0(`0DveYq?uxS8#I4Q`e*O@{Y{=~0MfPKOM! z{coN{1v$Ijugl%xbjUEjP)!PTjx$|`dabXeMFl(e8sDnB)0r;A{laxA?#oW64Ew)Dn?hILslg5)Vw;EC;Fwj^(5-ek=JKz7mq2}ZOAj_=;B6a_ zNKanZwbkEcH9o~Rb}s5W*X^2+P+wlpBUXNw&5$yRUAF$bmK&VUMl3TD9Kh>%t5x4+ zHzdOqF8g3!!^0&?Hl`^F=kxj${j3%o1E45uwSR|+lfGN85$R7lq&L_tka>+v;~ zcUP(zR@;`YR9f6+U~QYI(5_F6f}5dM;%hGMt~4{e_H12gw6x0r+cQ!jUauepS+3UL z>sZ=d4l~U5tz8aU*kz#Yo2gK*UzCFVl3IPQYhib#o8ex|-jzqW8xJ2z*tWWP`Um3?zy8Do)}W}ue#*eX=9Dl`ZUJk5kqd)_1_oAocv=*-f<)M zxNS__F=X$&v3u1vC)^m)U%t`%&2}cq81f5l{C=_BNiBwpMW5wf?-~U2F5-&g`Nj;wD~uYv1Zxk320(CVukuZP{CIY-4F9Ouyb;c=YZxmR@4n z^>33@WOq=;A!tfm&QzAC%5OdLTL{Soefn!PYr0WE zypT=fY(iL6IPx`x6bJ!@nIoZFoS?UwbR!doy&t`H$(~4IN=UQy6J6t|h(ae!BA{ke zkt3m-Em1gvO`HW;L_0oo3PRXwVla1)z{cidT5OwsTFn_=&U$kWr@$}YYdh3@EeJ!HLRO6jp zZuuI2ce$@}Nv*%yznB^ha+lUtQj^XWkrg9oA;wt5O~2UUzNUoRO>bj&^GihoZhBi8 zy#kcpkS0X3Ma21P2hT23FIcn2@$1$IDNVJAgkkx^)LXmgjbN6HRa@k1yV!)f*&@oV z9p}_lETcE~n}4`OzA1S{z>>K8zPsXYU!6ViWH|UJ@>x%HX8ym z{m1Da-kJBi_uO;tIp>~p?tO2!<%>^&2LQbIT)qr&7<=BT1%5OPAbaY~N2kJzIj4e$ zN%N^-d$(fJUPDhBau1Emnxg=dRYTNGm$138U-ns zN3sD5aN1$558;^NQ;iP?iXHN}-@Lg!bRyxb@j&$^p@i$<%0!>;_#`Yqz4waIHJ}<` z$~9OYIZXj@2kDlL^yktPK*(b2ETkWsih#V#y&@$V1?UVJOx5F#57ju$_ZGk>qg4ac zW|05Wu#?9X8~05DAN-o4(R={HCo|eI3NVmCUu$^Jo}Y}}HmmYSn;r~rIx%$VROG~O zmG>J@9-epT?E1}pjm77(ir?$1WJ5oA;?TmOn&a>0`a+34pV`c!-zhuz%{MMRzH`U? zJ=9(xPvzheB$YE?bPg|Q)7uwo|U=J=8LkW@gi9lINm z3 zkfVsd6!`Lhi3TZy`!v zuA#)sM&~hX0T-&e)ApH6n&C zFPgp$I4>@8zepz~9JRScBs((l2m>z%2p?1%6B5 zZh`v{w@J?nJR)X}3midwPI?_N2o!T!4k4Hat4RndU=VQ;e1KR7k`%%>z#POV)FR#w zk0Qol2yrz$jcCHNh+h(D>)8m;1j0;?rH-X)27 zF&-7@g;K0_KYEt~Pr!5dcn5eC`K@5zC9l8;5_s&=?RDv(AYCcWcvCto<~+F4i;oW< zzf=1jScG}tw~^iZop)ZALuWg5jzi}^c*nryQ|z3ufRDXzqob4;pCHgT?5bna$Tnx*tG+_b$- z+;kV?GZ_jec-U00n7z6w)VD|Vlo4mpu+CzdiT>AE`0k0NER2y8OGka3-qWk7%)rp~ zDRE{(C~oNnnD%;I#1{9}C#xw2Y+an$;fS($%22HSsNBWsaG=Cxb&?HN2=ih~PnK+o z_Uf961|v*kYh@MMafi`fSsPCdG<`mu;mq``g0|R$EN+1lg&2c2t(AZ7v}p~7fjS$~ z?zU-spDMFh0+wqAODb4Um@N%G=LN&u;5uQrGD?$@5ON*I{Me4S$cEW1tF`?R*5x>6 zCuBV2Zuv&8NG;TuChLi*{q2gSvPoe?g(~ioSD`Cd&(f7SF77hxbgfHCrVN=cxf;6% zh#`zLrHdLuv%HlGGsNv>_Rb{Wi6SKlUH-zkpRp$jZ*N&TRv8yhbA1-&lF6+ul z2qjefa`aGsi9)bw>8cy5o^AT}$jtqJn00Izvivgw)A7RRz0c`$u=n@_`S=v#IwHR6 z{FD@y2lA&C5Hcf>LrTHM!U7^?(yqiDA;Hm>7^egIIh5<*R&yx{6xxQ-KDTT0xFeT#=*8Dgc6?>N3>`i#FETJrtE@PWM7Dt`X=&R}x> z_LB4Ay$61pzbotZ^51>=s6I07-}im(^qI=Ho2#}q)MdT%)}qI5o&MPaBNv7@>f2wv z*tqQ6_LYe@OLjJ#eSh`bd4b0LFSB_UUe5MCu+NKrPAw-uua_(QuqUv}eJ9cMRcliB zwxG>Q%#e+Knlf2}S~_Lx@PcO4zEyekQIoAnF%3(DTHS`8N_NvwYeRcl1O95tBjArP zOIENjZpBa57A0=zrru@IwqB;ub{6l}bX89(%)E^@X>nYFA45e~@e5!HfxAxZqt{hI zX^pBcAAhp|50m7x-}d5%&=mXtUl>}5KZ6$F2LN&lm23i% zkSOI6?NadyL+)+Wwe-E*j(c8flI$Npw6bH?9iv;a!#}&TWB;dHE8z=h&21VVQ*X$?O{y!q{UlRwq Ae*gdg literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Forms.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 0000000000000000000000000000000000000000..6e4b911e1cc2ce9c78da75b6ab7e85a763f91327 GIT binary patch literal 4096 zcmeHKeQ;FO6+icFHiQic$s!u;u-+u{A(1s9U{$_CK8R~KBxW~cs8sUy?al71Z{J(q zdkdtkHG)(aqk`>#?X)F+WlD?8=tu=R4%1>8>6DHRIMZtDV5!t z^@mCHRDC?HS~P1KDO1i+Mb>r0rU^#PoK97pcJ{_-#z?YoRaM|x*K}VOK$J+64mt}` zeI=;?n1*auw5ADZiccFp94JmG<9_qu%`k)ucaIO+wgc3Ne}&my@=bi8-Oo7G<+06i z}_vR*g^5Xai_3 zTK-pLGtVmy?wbUDc$oq;2LK3X7L7g%Fj}Hk=;)oSn&FSm*+gYb=tnM6CW&jrSp;J)%~0I91mQ5Vf2^XyH-X6)mJxs8aNes$=H_SkLh#Pyz+&!)xU=5T9sYs<~tV?St!i?QGvzYH*r z^I1;EY*W=!7S|Y^;@n%~Kn!*ujnxB<-2;(MoFB#YqnQ83cFjm|WgNJy8N6zoOyvdm zH_{4MI=P#LOEfJ!!EI3G(){XbU7F|Ed-!%gJ^(-PIk_)~6c`YIufhbPkJOR?GzeTF z@HWJ1xSh11biLqgLJY#)$f<@g!GD3A!CmJC`Xo*_2wW;KF3^y6O96OX`aa^T5P`T4W5-p+b!0A-J0ds%OGwkC)$;sXb)GPCJMhNY&1l}ufr@-9;zmE86=`n%(1?L%oM-T_3 zlZbwduo9+17-qn95{6H~BE&`*M{I%vh^=rMaVh*Bu>-D`!q}CTA;zE`@ea5ZQ4#3a zxeM+BeHou|7qEbB3nIgPD=*obAbOt_!Pimh&9;i#%_gbqWu zO+)KVSj^lcCp1=~h8jxFG?}i9c-k=~&A3eyHYm=1PvY$!RQ05>*$S^V%!~!`n2|FT zhO;f(47#@1Ot(}+Uu9z-NaT>^`IggdHN(OkMkcGG{TMo>D$IhgVjCt{jv4PvOIYL4 z7&;_#ERI_t%S_csLM)fC6g19yb%+$A8)|Wn0*A-Ny@}5=#fB8KH@MjVFF=TNs#eyp zL}FIwbY-X&BA(C$eqbys>v{b?ak#30&|L&kLy@(Deqn1~(F@$Wl*x%(Wmznf&_?2_ zt+CQVu7QEKVkT8VRiO9 zZgQ88+xQ^(%7cECkuu(gYHNrzGgw7J;9$`2r-TIkWfX$`+GZjJXL8Xj zUvPE^f-`3{6CdZ)))#oFmFLZoLJ)$o`M7y>9InL>#w{QT~t#>wgbT=&qK*OvSydh=LU$CS6vExm8<70VBv zys&4RvG=8m-FHb*EH5AEL)ro2xFa}`vZToWPbfZ(M~fu+2TNi zYKD;w15^?y?`LQOZ*eYx`W{s=4a*p|X>XS4G|rT?ZfHhIW!CjHqAR$ij=&7Bd((Uq z#jmK91aA4!e)=CxP`XOfsCZ*7YBJvPSrQEg2>6-45Wm2HCrk44k^w}VrxBR4D7*+i z>Y9;-(ptHKfFv|RTq7=BIcUn+HHO}`MPZ`##M34=e^T-M7uK(xwfOALik4$Ht$q5& zHA~RyeE0j8pRj_{lvAa{`%VVHu55N{S`Vfh#Jj{;zW6WA0oqo&`IF3{&i^g?mVT0* L{J(Gis|@@Lv_BM- literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Threading.dll b/external/binary-reference-assemblies/v4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 0000000000000000000000000000000000000000..41f4c485af012522af3844bdc57656d63f56671e GIT binary patch literal 6144 zcmeHLeQ;FO6+iF2-4KEaNdUnQ!i)G(M3#IALIg>&32`ALad!bhoXzI#&F0DOd-1)u zKyX^4pp_|pLc>&@DKoSksMW!#Oa-e{QAcKqA5*7AJ4MvmYU|Xo)p4qJ=iR>#L?qI1S? z`FgHOgc;;hDd=nS6j8`wTO81@PXVB$OIE$6SKiq4 z=DuI=o_?_J!RL?ezbtt9nP{xEY3kI9D>mKz&a~?vdHkY*;}?`4xMiRzyzt36fq8Rp zsMS8+cPeKg@MoGiDzbM#6SfuAQ}4n#djSbE%Q< z4PU#9kRdAkayrTjkvX4lH!o)*LzgBX^Zq!G%cBdV+ePAz!Ewob32B@Ia`6%beoa@ zXQ$x&1b8kz3QjfsQt%%R{5()bF9>``pcLes^942v>76kRUUQcj9t=4GT(2WMoO0| zpUOO-@ibDpqKLY)bdBF!zR19{q2dSSq&B>DlCPNuy;zy3&3{ZPK{w-!ql*Z&hOSN<*0 z<9ougTmKMsg^D?!6mbsA0lJQAiO+lv@NTId7?T$ZPK&?@@Imb)&o}t z62JkVjJr;O2b4okrV2zS8FQTooC@m_O#{jZapl12G?@a!++TPcb0e6hY(*U8q0mn| zf=dwr&gMN3jEuuOiCr#OgOQmV4!7udMRQ zDPB3vD`(L!^TL$sFt%VW@tl23NdK$L0IJ7R%5&D zZjE(!w#VBOk*-+0r7PT?=!tgsv`6FXD3QwdTx8Sl+8cbRFnWvGX3o;ss-!{DLOq%0 z{rijHirC}}hjSSxXJJ*`GGg?bzHkR_%w$I2nsjv2pm-R7}iYJm`x$gF)eZjKt*%2^Q%-~cK6-HG>5R_W`;RzbSH!z zM2~z&F|<^U#nB@TGD|m8)WHm9p*a=CyLGfChLvJ%W;Q=OYGZx5G}frgG*)AO$5m?6 zlWD`W9bL2GKkmHp-4wcLPwALqs|BaxUQ%fAmWHdE1~VM^Cd<$$ad%-iB{MmOiTm@% z>alKvA_eE`tuJzi(SikU<%{PkCn%Qdvo&lJw^URw5-#Euwjz-(N;)(dR(e{=$F$)N+jdZnjuk{-#KVg5ezU{BI zHP()Q47_*~8hcP%Y@22KGDC6Q8OKSYtUm+a=Z@_QwlThYgPd3JDZde+r(aL!;PGG4 zoW;@)jn(V15Fj;YY(v-_9J2KEKv7c{%Q;pu*INS)C&j^ z!(o;=n2!hH&KN%s86Cm6V91}=a>R}`%sM;7_>DYFSy?gTWM+(%d!o-ifi4e0o*zA% zyfN|qVWm&c=uXiRd0W<+v>9b>&9pLlUp~C~`zof>pX8Bk^p=NBMAXsDF@6wAW$)X>$wC+CkfzkBb%TJSBQlXSo2azWtm)~Zs#*2jEHRI5LD8rN^3xA9Z z@KhQ^-2^g}4h;!O6UZeTppJ4Aa=}6ycs4YWXxD^QTohg{1?w4MONEpHIR|nETDgUO z^kfxT(ngJikCFGAq!e8SU6sb`ONEs_x(RX`tcM^KL!H|n0PSF8O*9{WX~=~ri*abM zYQmn05pWF+wJaq1X){L4$GH*IGV1i|5%jy18fYQa(IVhN*!IVsg)SeXJ3p736>FiR z#ej8ejTDfuIRRCYDu$2Z3+OPe2-O*2suv{q4=1>GoFUaQRg2*&WSd-pLYT}4HvFE# zUmhA$;l09&`(|)Z=TDH!Y_*`Jn&JuwsWHaX0mm6^nm<2nhO)Y5nYP*QgfufdzkhQ^ zH#W{+hKI_=NZZneg>{P-E)>?Ya6$B!KPDl3s;aV7QPC_>W8O8r*FY$4ni)HUM~Z2r z5toJrS;{}_tvNlDV%7xyO^!cqMv|)LluF(cvZ_*&r&ZTWHRNJ-a15t%3}?aQN=Yi# z;zp~3c!XA022_HLI!Ufx%xx}Js#|KPdhwJxN#UHT_5u%5d0s@Wp&I^-t>&Ng)#X8g z#d5rnD*~n5>bGE(*Cui(S4yd3crRUyy&WdnjXf^mFJjQqSW7)O!#{BkeROHO|Kh>*tvLTdw9b8?_RzA(y2=yJO1g&HgnHQ zpLO)Sw`W7@of$uDKlRDR%jZ^iJbH}H{q$IA@Wum|N>rQQEBE<2&UHdtB(lBeqW0in zhX;lTjp}kUXQbRJez|hrYqpADW+km5;U>{7Ar%*hlZ0!kw*L@Q`*DZ!>jcj~xVG=D zYkQU#IVe18l0+p@24%!CKGs#fbE@5g%uwS@8!*g_nbw(og&Hw5sLYUPivJW>^N&dU zjI&Ilrsoc*-)KTrTQV6{+)p-6oOt4-V7Lt5P0W~wpMb=1m4p1?5)kD%5>03bHMss; z!u@yn4(`B0q=t*c<#X3s$w9mU+qY;;+_ZRD;~giJ)*oH8=Fx>+3rc^nb;FwTt~|Yi z_BV3VZhD5-RgV}|_`lN;C2%9OWiqR<%d0}apn?In@4GW1Bp|}f7^JqXdK_5 L@&D%kp%wTy+KVQQ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Runtime.Caching.dll b/external/binary-reference-assemblies/v4.5/System.Runtime.Caching.dll new file mode 100644 index 0000000000000000000000000000000000000000..bc451b66aecbf7e54ec60e73f828713430628035 GIT binary patch literal 40448 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 YZ&7CEJJ3srd3Ql(^#4!&f1?NfANO?qHUIzs literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Runtime.DurableInstancing.dll b/external/binary-reference-assemblies/v4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 0000000000000000000000000000000000000000..ba033bb8d4e4668061f9a92c45b410b1cfa15f7e GIT binary patch literal 64512 zcmdSC31C#!y+3~LO#%~^kOT+;0)(ApvWGxe0!df{fdF9R$pCPTdf7Pui9!`tJW43|DW&oEcf1-3F!Ov_4Oa+lk;89 zIp4E=&vMVbS$5)OB1s65jDKHzA;d%YO+VF)$A&J5)5biKChkvtZtO!={c~eiZ)uI@ zwnxI7BY~~C&4ExT+>zT9%#C!0a$7^W^BWp-w}xASMFR)+o1l_ju|SA=%l2e+NZ4ch zTRtKF4z?17hFL=7g3iTnvW~)#k=^v8e~W6!Rh%SIeV!2M{J-;CkusXdMY>B>IN>kk zHz1+lILurjPy+Mg1HIT#LKJlbcXWX6_yho%yR4x2Cs&A#MUh}zxLHUWU<;S+h*D6$ zs)eZaa=tvZg6b7NWScEg#PhjmkG}~axg?Q4D{_VCQsHC$x@Fa0&s(@_`R0euI{1g5 zuD$KN_doyOj&EOf%c`SCi(h>C*3kzm8*bf`{G;FAu&v_Pqs9)q`Mh=G#!l*0iHU-8*|uJ*WBcr7d@z^3;tJ z$1XX!VM6LJ-!Hy4wCjg^{_t+$(1lyi`}4z}?078e&f3N$wU)A;+HKp^qLQNWlJe3S zWOa&Y1E!xM#Q3iZaTb1m)QE6nN2E2hIZ7JsKa}k@eodp;fiQZH7{6#u-F*B$AM}BF zpljR0O{9z;bhY$#WA^mFAPdA1t6bnW)!iEWL)R9~ATEQ_8~B$BdNTf9jepC)pM>96 z;@@HX>yLkZ@Q>p5#lLF&Bm0S_e?mOhD1Y}685zSe`iWH;*&Tzi7@G z_Y-|4d^moz*f?R^gwf(EV4BF8L^_Lr{lo>6sJwrklr2V!K9jdi=qFB@eCp(W;v&YY zCf|kdPbO1dhZ#R(OrMf7rJr~rpY&f~e4>zaCY2ICTt@X4o=Nr4Ih$;Lyq0kBGD>X& z<5`T?GTz7dEaUH&r7rI$Ml2`IYQ~e76X%@el=8Qka}VP)%c<0VUOun^_0T}!+6F4i zDGkJlFm^S3IKIKUvO$1<6QuMb`vLXxE-M{;AznckTu>QIO<|pMF-ByIUx_K~9n(cA zsC1FX{VQFpP!xHobg@}c)JM}rx1uQRba9QM`g4BwaSnOtos|0%Oiky$nl9cHKSqAj zDFw(doxrl`Y*V_JZ1u5T5uLDR5BPPUFgk@_Sh?vKC4H>xK@~9dbwy2O>S{&J78cTc z2-GXkoR3*6UHk-T1jHp`2UCZcx>8(#^wTjIN%Ix+N;C?S@d;v|7-mrpWsp584vGmDY1V;y zT0AX^t!`*GalD_23f4TEHJ=r;S#vMT{tLBCX+DZHKNGKs3z+&jsDSvB_<@y#9Nq)9 zQv5~SX;EwTO(t7D5I^J`Ml$uGc#Ns3pzaqRiKjTfm7rFNkI@2DOCeD2i%-N$ta%p4 z`%F<6G9|3PvgS>!DXb6K&PQ36%#;v6Wm#X#vZ=JcWm$hvdr*g;CclR%evDPbRNoXy z729O>I8d)ZHq-tOP;*nL*NwNT;BnJM1Is2^bL}M9*$mnHqQF{aQ@ymZX1Suy1{Dy~ zt$^JH*+qyKKy7Z}czZeC9BV7bdk9pTmrAHl_8~jh zS?AenyQcI>7HhkvGFCIzGoHxU!WdyZ3%IiDLJnWUcnjk`#@{m9eJQmujHQh88Bb(9 zgYg2!s~PWL{4wKOj7J!=eUwfqV;$pW#xoeNV!VxUKjSNmzhnFdV^%7qP|mmpXo(JB zW7k=X+3-YbyDnqt4U7*kKF4^7@dL(`ex#YsIEvBFSixAwcoO3_#`ls)|63gXKI1;d zUow8oIIKVEEMPo^@hrygGCs!mOUA!44jMrEd5krTr!k(xcrD`{j1Mus!uTh~J_9N4 z1jZW1^^B)8Ucq=T<1ZPlG}6yytYAEWaVujNLEFh0Wg0^{!(|IU~?h|(F(Sio4r zxS8=>#v2(QW_*e9J;p)l6t{$N3FBtQD;VzvTH>knzGAFchc$;KHZq1Y`Xb!TcvZ$w zgnyke9QcQfQNVv>j0GlVP6W=(ECepgoCdrkGYxoo=1kztnUum~nR9_JWzGlwA+ru> z4PFi$F?c1gYA~f48cdp(G2Y9Z7Y47v{BmUQiLh$Ykd?r~A+m_BqRMp?;F8f!~{h&z-l>>m0J!=Z47xMAo;z(){9 zZ44!Qo&(1czkt4uOPYQ9Uu(l6^;6Ki_b_Ym&pyiS1>b9&Z2 zNavm`vg7~|wUI@Z^dI&B;?5cNIKmCXo(6tn*o(j`8E+a!?edLbzXm=r>}}w$hP?;; z+pr_hktuvWjM5pNeHw5=wo|tYvQsQeY|f^#^Z;ex&Z9P^LjHGm`MpBC}7)klAA9)h+ z)R9!uvquIIzI-I*csJuCj6WVpmOM8yguLD#Nh!+|jv!X4$jOPK)U`la-VE`zobA@i zuD5vje zM_{S=Fy~Te{$ePNEHUazOQ-)v&Xq`cI5=y&#sOvjDHR2yu7UovQPlTj51hr}x=}ZQ zzkJl4K-s%49YuZYu2Bzy^Q%$R?$m1N|D&i*28^b$<{y0~q)SHMgK(5_595oBpN^(p zF?>ui?3_F%iW-|grXN~lB~bG>GQR_yv0}%VCy?4DW1azCKZY#4X$_`H-YGfoWftmkhOKAUg9)g10EUkCNL?N`2BK!kMQtZs^|P% z>d&7Ip9-8fqSEA5Iid==%wZH+6kdd|C03581x80K1fBtoF45FnD(T`}D(Tl4+Zita zYMt*ur&Qd{_+!?8k#*i;`~%}hjQNaTF#5(iDGV7)DHH-TL^b#sVg+M>G0eDw@iNAn z8SiI&l<{St{OQh48@DD4{fB>ci+3j9m+z(?%EzLJe|E8^J~bgKKhIFUzf682AB!BL znV;vSXs1d)G9K+$=|@uf)I(CVpP-*BM4u@SlJz!TE=3 zqRPM0MJ@0*x~K;KT1CnHPE?f4?<7T0I|ThFyQr{#gQ9l%D*Z?Dn-taUo9{nrs2<-6 z|C#<~BU|t9HdK$V$$!4T#mL(Hml&$Yx6S`;f6&Of{MQ+($9JLsME@ouyWGFQP(8k@ z{WtnI8`;hNTMX6XyT^aKe~Xg!_zwE-aZ#`PAN02x*`NK7xG1~e3IC}k&EW+HTvS!T zGcGDna3udUqq(i%sEfJ?GCI$rpKjlGA#HEJM8mTh2DrZR3X&XsR1W z&9_d(VJH7|i+)AV_|Gxa(4sY2U51)iG^)U%%8CjLdX%h3R2RMOKUYy#h^0m41?L&+ zl%nc_3lv48qrTum7j;s>Ws0KNX-ff}c+$@Cq?H11!U0U!RCF>C{pbR%C>T>bxqN@rt)h*sDI+DLfry{;6`ng|Ihphp{dnY>7 zTu^(3{5fnzi*KEHqoKYJ*-eVNJp1+H8wze#6pi8=9ZI}a{JQ^EEdzB|!4C}eUh$f& z+jJ`81Y{UliZ&zf;M&eVHZq7^+81ELoFvmy$_; z?WXec+*GRnZkOic1^2qBpB6meqFyb)*%bdsf3{CiyL<&DC;ES^sBYiFk`0F1<=a^D z`+_Hpti9wtLmd>he~SNrl95;ZYr#RCCQ7>|>lqi7pXa7h{XccdJ}Y?EMI{&hmy1d( zd_hst>R)IXTlT7=x_xAsrle)RQZlk^WZ`RClP!B)rvhq&-%X7z{Ee2e_x`P+x=>4+ z>h@iTTGG@m-<2gLg@=@8w{LIBY(wq#-BnUocv#5}ipNTpyQl*tjfHP2S|Z z{#h=n!9Pb)vL^6Y)71|16-8FRR=7aNhbx?PxLP~vSH;L4AtYCR6eSx z&d5s3AM`ua+hut!Sxxy=7qzau%1}LGNBKP_UXM7ZyuN6OO0!2?P`;+9-cZ++Zz^gq z)IH_fidGrwaZsxb^-TG>MQaW9Qu&od>lM{4-hk#whWb#FRg~;!+qI1Q(oRLmzN9JX8O~5LIX2JI@lc;wjk>6@g>LHAqI0y& z_s-Nm7Ii7A+xO|zR}Ce{X19`&Wl4Tb?ecxItjzx(Cf@F{Btt!wnpSZnzemZQN-c9! z*2;=*zm`2|omlaC(YZ=f*5`RHDnHLnrTTZdWJ&(>T~w9-0vDC;zsN<6@qg1rE%0CF zq8j{HC`#7+Ra)j7f&JJuit6^|VLzrRS@YK_8TH-%#n-#2!NoV|c#z%W-=nBqymH*D zWxR6K)GlA3;!OXIMixOWX=;~`M!-!<*5jj{o2GX8dMZwIQI}UdXeg{^Q1e=|+xI}l zQ5W@0#mM5DO@6|6}GgMyXp5o^WRabeS_~(W?rSfOR z&l_q}<;%q{8Y)`3u=p2>>hXQOa%aIW4RuN7k$g>c`);p1YN#IZbmf|?SGA^i%|rds zMO`62t9-LqYhEEzXM9lnx{7y&7&#-U6o$=I<0mUSn>Fn_5xwN0)44$zNR5){>8ODu}nU~zHIXJlWW^-|FQLtQd!O_oDlH|y>ahx!4iG^Kgix_8zYlhX}F`}Yh((f&Qt zP_%y^Y$)2l4^fnySB5Hz+V4M0Gg;R^~hC4Kp5 zrP;&liCjf>`@WcUL4l^O@C}*$Y{^(9yTVuQqIQcFvtKYWqTVPOr!;qqmf7!>OmI<0 zN+ufW+}Ww6lMQt#s40fJZgzTUo}q4?J*m{MC|NH>ilP!F`86fy+hQf__R)N+ssFYf zD>+hFqGWQPT52fTrva%Of@`FUuGwOZzTGr!C~Us2t@zv2{JQ*!oQpk%b}neJcY zN@Y#fViS)}5;e8U_sHyTyQr6DU*}Nbz1g?>>r}j5pq7-nsa2&*T(b40OAU2OWpn8= zLv5;TFI{1%Xk}OF8beuC=a;TE)Y78er6(Bbl%ktTPg2ymVo=rHr6(I|B&ZFFI$%wz zdbl)TsF_tylr|~qDXXFCU}=k?PON&dbhDvOtr}d?rl@npj;gmxw;Jlgsy`U2M_gI; zQE5oYdc^mtj+V9?>OZUcl|>EpbX9iQHbecUs-SF#qPoRLRkO>^G&0|uCrZyYvXOHZ zmz|?1YImG}DvJ8VBYrp4P}Z&Ev1X6f^mUay=+_jT={#bnUB1#e>&nj6@qATtPBzpo zU)`J|`R6IwZr@3BTFNvkPHa_b%dH zqGY>#$#dOQ*4${Bmi73i%-w0IUA~!fw-jEg;`R8}&J7uAmoGB6r0_B$>zO;-P&iFP zyvvR3e#Fz%F5kdnk-Bq^Rr1DPnMTXkt`$zRvWmg&5u$sLts-otOva7X> zpEx)at!b|@vSl^5_^&n8T2R*+ss+^bhKkm#$@-3=-Yq@Tuc>ZdSIv=phq}DxsG(%9 zyFtY}m_jGdh8lPy;yKiV9_nQ`mGak`2g{6Rim3f**&dT-zuKn@Z!}bP?VDvc8EQi9 z!s1&ERaEesTT(l)+@ZeaqGX92S*TYT`H4)E3Q?2G?@>AI z@@=avFTdANRCb4=vKvY~J7!ImL%r;wx@+e;sfdeEqWg84;)>eYg%23&CTKors5_zg zu%X^WnvWQYYQj*k`dh`C`tQ^SYL}Ehsx<#QbzALf7xirI$u8=Z+UD}djOH7)jfGDb z>Ydsn`G&GSfu=)!T6=2weywTsop);aj}4VJuf6<9Lw!=aqx>mDjhMG4>!6`>=bc;b zPabNZZ$h4?dc?^{Q&Zidb>2%wnxfWx!Nltp-SZX} z|6HZgEiRe&+w$iPbimJ_zco~@hnnG`*19M; z#+-Pe`OlU(RF{Xk)D>^H?`98mw}*PnLp|%Ee(j-t@1kOD`NWfZ>H>H9MtP{29%`+J z+Tx))J=BFB>J|_6xQBYtMLBj_;{CC7_x}T+Ek5ROM=EiSjaB0u{aOwaCrPD1VM{oC z+yP?_p)DFr*vg;gs>zBCif1 zsS{2TL%~lLqk*`U%IIgD%DC9@ZLu2RB$a~Hl(|nrnlj}?sYxm2NO5iC6+k$J^X;SZ zO{`<#Mlq!vAGZ@J^x+ixsubMyDQ%+?*`gb0iAP;1%OyFzSuV>pY68V|*Gw^UWM0SW znMq;}G?T>=)_2B&o1cJFfQCB-OoME880^Ho22sX%|glr_nbK{g%gcR zX$hsE?R4iQZE$mBnvQKY?!;0q4hMH}IbS#DUvJ^>bOJLva($urjax+;-B3$kYh+_+7@iOHH{} zk>Qh=FEO!g+QYcp*S$8NSYB&MGZE*@+b{k33)xP)%lS_Bg!sCR=bX)J4_O1UM@jo- zPnI*O>@zZDC!A>RlllSFm27K0drspyTFy{ykS2+pz+`bDFh$%7q<0D^)>9moYe;FW z^kA_l+bc=wlhhV+ohf7WmfC-D`o9M1wSf~(R3e$$2e_bZ3(`yyRNKjFRgjqPo$KZ7 zOm$)jiC-ob^-rB6)qFC~{wZp9PMiY0lj4nqccV;6y`^*agg05|Z)~BoRwAuB^cqQW z>`BCNuQUcT$E`1=`MEl-jrSvB!zXjB-c~8H6jA8N{^KpXJ9nAy4o+>qYh26HUC(?% zTkPTR9R@YWT@O<80avU82qy{2aeD(fI^_KR9CU2)BFA!vrT(#fMXZ0&KE&-S;>+dc zkSEl$z_T2d#Zomg&os-9Ad%MtLQveB(K9bGyj6Qc4`H@3vD)H)c>xQdrj~^$lAbWy{_D#2uFD z6YAPN_FBsw_sfT6E*B#gz0+|#Gg*t(fEY2^h7I)k28GEUC+y}V8dI{KWvt#>dB+$^ zb0()xVT*krW_fstB+stl`eRD}!0G&jbsVp5tCh3#coK&6xX#cYGbWn9um z7v~74p9G)Ndr7Ihw%Et99Pfm+3iHXsc>SK7VPz~CmX^q{#MdSd!Q20N;$Hl_Mih#E zqDo}qUl#t2z`v(Njd($%TJ#Jk19(c-SPthgmRh%s-#f9?dMk(UC*yAg{v4bdNbj1s zl6BTI2CRxnXG}hw!#f$f885KTo;)G%8ie!n_F6AZ#(P;dg;N6^CWz1tNWt_oS z!&t|-5_mL!J!615t-v)|rvsm#MwY)nt(*B50FUNh&f#l-7tZ?ua1GueO&0H4Y4|G5 zXTSksvYm$a+(W=2;=90XaThR0JO|7buLCED_kmMHT2dOm%y0v+L@dUaM5c<*fR*B* zlr%A0Z0VCGs)gM*4c}zA0k~LH`_e?c_#1GAxFj`AtQOvk&BwQBEUB5I$*nX2-snzjz!H|MZmMH24I)919-0WUEulFv%rh3 z4}q6i+2c_2)(qg))(ODtt+Ro9tXqILTOR;#werWK{;eSJ9_w4c`>m&d4_SW$K5EUv zmt6K)X8{jbcLSfc-T^*q&7GJgp0~CEx7d#Z+w4J;U=`z)K%dxSe*<{4y*|q)ZnZCl z^niUi@M-%O!0aRnmn6-doF-mQx?r+T97-bnx06W!ourEqelO`D_{qt{_azg5Kr-=j znKOYoQ@}wzBoCj0QYZglicj3n(uY|3DC_S_rgRP@kI3_hr<2D3KVuz{LTM(aP@2A! zgRmq!Wkw#XO1TSoQp$L|XLp_WqM}IL#CSX7eIjpKk@%6A4}4N=1^!H21bj(c4SbF9 zEpaEpe-sY^KV*&6yOI`s-&?_-9pwRdWgNs3y#=C8S(V6J$fVb@{v^G0VDk zUJJf!v_7jx3>Lwxn;4&De2X#3BK~;B7K=0wFpf`ZMEHWFuZj9eKLDOGsV9X}uI@7u z*xV-y?CC=~H*xqT4p;Xj=}mnv62*DdJ__&ijRziL6sZ)>Wvpi0$k@fWhf(xn9mZ|)%*xQ{WAPW(Xn zQt`mVZVq>IcrS9Nx>} zy&TTXq;#qoYZOwN0S*T;IsL(;Gj=eAs|QmJZ)8pvW4A(*?&0uWg~Zv%;X@qjFozFw zI^9Dk&F&$jv!BEJIecgcrB4e0v>IdeP~z<8@cyBsf0)CEIV`eB(^5#%Tn+~m5~rKP z-C3L$hxc=M>@Y6ZFy?c3KZg%<_%MgZX0uK<=~QQvB{j^cVa`Sl2NaS{7l*qQ5@!#` z+RL219P2QL4|6zoIHh0BSfh|)ZRBu3A*amYJ&b!55`Q0uyGKwu-6M#zm&1EGyr0AS zIeeJIhdFGGBz5t{`SPs{4xQ4@fMpAkAG3OAY$e~!djMX_L-8hPH?&bBu*}e0}6@L#o;}S`xO#@-xx~m@EA(r@EDGpOW|t9jf`E4dliz-eh%-?rLZ;j zOz4kgtYO?gj#Ah^j--b@P38FImBUlvJOUyBPN{r+N}`HZtyGJjA$X3fKG;lJ1?td2#p< zqsSv^R~||CFz#bK#MqV3e8zo@hZu#Q__>VLj2k7VnE2I<`${Q%NMZ%$BBpUH#;$4P zvG*|UV?4wtrV~Gxv6^us#r)8y672i*esF3Lj#mZ=s}N4>MRK zVLhFRUB(bGObo@UdYBjv9D%RX<=}g4qp+$TgD?N(;!A+zM7|i0FKSG{H_|3zJv~Xx z0CzT4+*R1KED?UJq6@?_>|Gi}5!TYh_)=G?ScUcXYB5cmh!|TDqg~7t5iv_d5o;Uv zG-rx=;%uzNyYctxue7_6fj>MJEGSvvkX%W`zHP^}n?!jPU)7b^@PT zMCE#Z(Ye6iFiM^GSo4!b-vs~YA}Z1Ii>?9oTYNJxXYrlD8H>s0C5xT1pSbu@Z~}`d z%{E4v+L?>@gLC2Hmw=Zt|8B;gE+%VbsehZCjIc~i*4`^D{q17P{g15w>Ec%r?q5eZ zvW{{oWIS^S)!|eQFROb4;gjm#21*Ot>;8oBMU2vhzc2g{oSW;&9@z@_)KP2xom=Fo zy1yg*9H;hr-BE-yxdz^4zO?yMmJUjySOb@kB@-A!$;lN$lr5o}U$TVSWgUm39G0zc zE_1%eoF6TrcKJ1P{<@?e;(oDYC~)}FF~Gv5l=4i*C5$bMUtgLB=|zm!GTyMX2pqT0 z_m<8C=Z2;8fwwJP2E2P|Bk%!EVc*hq2p{C|Z#ad&Fs9T~%A*;}>Z#tU8J9BWB*tdO zt&AsUll~44cQbyI^{?ab?TiN)UuXOS00ooTuZ9G(cM{ z#FrN>u?T2mmz;`l9ni)|?~m|Opp6kf5aDG&TPzoY5N-h482uRtuLRog0D}>31mc-E ze2gX50Bx}rzQz{o;BPGKwud9UUW`QeM4&Cc2H#_0|2+!fli`CbaSG5D8^lKwEqV9?B9o0BzcHBm4uPE$)W5 zvc)~39GrWBw)ml_K=?kOE$)Zcv++&D8Q?qww8g{lVivxHI1Aw?;ms^@0BDP61bwOL zr$8I~p&Epr1>%VVJe?)}3uud|=cm*w;E4=(9EeQ>_3n z+iC_5w}Q|g0kp9z+Kg}x&=#YtR)j|bZG5ZnG=y`3wis(|MR*+0#@;K8Z~@R3W!C8k zmji7v&59yC9cW|s-wB*yZ3iy2c7neMh@NAeiSRNYdX9BA!VN(59P1q5N~;^V%IX0& zTIT^*Ti<}r8X$U(bpgWbfHqDGE<$)c&=x0J-$eLpKpW==mjZWKmjicNSAc&8&=!|i z-$wXSpp8?3s}Q~%h<3NGLHJ%E+TFSic%Sth;N#YJ!G8j1i-Xo);Loj_zkw zuOK`QXp8aoFM)phSKt%?ZBcB$1}w3E11zBT2iDr}0_WL( z1TMGV2R7J$2ClF_Kx!+2=mYkLz()IHV95Ri{4mfK?e;%_+w4z)+wISRJM1rjJ8gV| zQ=EzKVA|p=I|X>Q-52i5lYy7odDak&ul`s`^|J;72UvrEY4}c7o>-VP z9Jn~CKX6IXKwy2+AmH+(4ET&klgGkCyq!EzbWiSIG`-}`@(0SFEKlyD=XUbP!mpDn z`rw!55dYzM!|>E0mUnGqJnvuvy_;B%boI}}^X^U%7Y{7)4cNwokQAid)+mXXe83dm1p)LkhYh>4XsM|c$!yf9#9_kk!>P;_&)SVpu;E{a* zYLm&`Ug_4%@KCuPs?0;xd#KYq)HglUcRkc&9_mF8^`?jVhld)n%57(!hnfq@sp~}^ zYK@25=%G&aP@NuXmxtQzp>Fk1k0>ga>-2?H?jHFTWcs@-LcHUl-dB{2XEnO}(ohdI z(L*i_9qzxuJusO9_kE5$=uK5REA(pH5C8Gi*fKJQ?PEEf)&mb)a?xH z%Vxo|%o20(uNrHS8vLU#44)(#k}=0np0k&QTRPisOdZ4O4o!boc{)Kb%oaI~haExg^GR^zI9;fOA+Nn?IzB+%3rtV4waLe2Qh zzL?({4Md~i=GH)mW(SuBcScQ7MO|E^hIXo+s8GoS=Y`waTB%wV>}U?M%q7~|-WKc# z#!D6lLM?5G8rsy>+T78bT+}q5-q{)+F1hW3iO z1==i`11d8Z35J@3#wHZ+7#6d%H=`kRCxd2O6%4fOjJF<&jc9mJrfXY++f8ir#?yi= z@ezq%AC4xd5R$Cy3`WpBxcs`9%fpeafi|uNlX~xlHEa(BBQzFHLo(sEPHM?zfyilK z>I7LO-ZEw3VdymBoS`!Db9ecca#}hFVqyo7(~y z3N2**F@?v>C6RUB>T{XIf{mrv+Ue?X3*-8`x6vCrXbkFzOeLzowSl%y>fx#uoi4@# z6Q8NrvB#ZC`ZPVtMcq6M?qC~@bW!IrcSUP^u&p%|l#WrjB+G&wftEl=V0mC`Fxno# zV5w>DXx+wcaP`i1I2)I;PDY@xn}dSQnvXGzo)n1el)b#c-8`!!flxHiOuo)Fel-`- z8e2EReagCvXE%r2gTlpL9BgYxcU>2boVE#GZ)$~OwdTchl-G0w+o;kvY+$#)mU?hF z#9?x?fzVD4uZUm@Y3@+`_MMT|&09Le!W~+F;f{sy$eLOkbwY0biq0muICzBB;nRX4 zp}l-vY2|W5ENg9!grnh29UGQ3Hb+|9I}%9NwnjUtmO5Kn!^aVCSQl(cq|!J)7)4#9 z_Oul=4{li8(b4YZtO!S2cX(Ni7?Y9Kj-6iaGE6>!&6r6xtO_(WwRS99Y2=uI+FBhm z)WoYZmgI){=yfKB=CP4+TucMa7*IRS1Q?rCB(R;Pw8ZQUvgol=V}Gn5uDHrLl{>ly z&AYL&-1V*^tb^wYZ;x)kT(vb$zidNEOcFG0Zz$hT5yRfV)458kHV`EpC#s8Y;;o1T zqk1V5muQ@Dsw*|Oa3TJ9RB$_nS^}F?RluDD+t{3DxPN3RWXWl6Z{3U)2YCjupm}S+ zj0CJ*RI-M(u(PeL7j~I2!^5aMEInY1&RVCJOGCJisi5pyiclR!Qq*)NWR^cs&6BOD z8xhM8mq&7@8=9u%B?z=B zJr7T5uL`!eVNP&~u%_mTUQX0#UTJN^wqT?!&`wgex@B2sv;%9A#er>@%+)HhMV3P? z=-N<{mYucX&QQzhu%0Pt$$BO;DW8~ z@ThX7x-fz+;SSdZH^CXyg<3mW18uEmK26a4ljOV`3;zydC2P|wQVNFI1O%DtrjPBHG^YSBCR!{)&zAGrzxA= zWJe3)*fMYr;4ah%Kc%Mi)!VV{LLsnnXl>Ea^@5L?sK=VfX5K++Jt~@<_em)GvojQg z!_+;k#l>3_3YbwtY_o0A_A<}g;$We|yjgf^P%3zuu09-qFItD$J=hRx+lfBViT!Y3 zCpir&fa<-CTf&`fE!;!kePlK2m7{i7*gLm|sGB1jK_j9u*x_;<4WWgtk!Z)f0LDQB zc@3;nsh{wmS-mBK9THS95On>@j;kcpRJHgMeE9QltHbLe_$`MjBfJ#vr)k=uEhPr1 zsr;x|P5Xw1&JNl&l2;5zNa*Z=+zZUQ(EM;`6C77)G5Wn*vI;xhU`uVF`7}qU9fPa^ zwRLIiY*LjLtqEb{f@Ne-c>1SQC(p>!6WOJ@M_mYui_Mt5qax7R5#EZy)a=@(!`m(h z(b^vFUb-Y&)Y3mO+r^l3+J+5eC>6Ff*w!LWU==yT6`ioPt*E{=bh;UnbuBUlUGH@* zaS5*)ED(vu^lyucBMJAiKZ3qr}C5l&NaFPwqZY~ z5~dLa^HHbKBIUAm`tEo^I%I$m%|YH5(JGiz^s-c%`oLy>YhZH-9jLWAD&SAyGon;4 zbSXR{F|XA)P{vuPI<&*gp|&t^;G*~)Fj3tS^a4zC0%oe>3Wq30i4s9%BFA(l@ z9je_o zM`aR?i!z&xiQ}>hmR-(xZcW1d$&;U8ya#lgy4Hp@ok4WuI0=rXbma+l)KM{;t>krA zoJBN0$TXc+?A2AGuSCP4xHOy%AIgA9mwQ^A)@&>iT*E3(&Xug2(lLf@kFVbjb&3Wz zAU0uzbcSa`wsoi5>(Dx&wWEXjjho%f>n)mm;3L`dMaaQmC1IL3@x&9eP>U{Ve} zbDG2Xc!l~v^w2UN8!4B}NRQx&UR?&u}KwICY#ww{Ami1@-w1xh{F`&8uV?bhLOTb#z+gsnbe(>Z>pw8kMeJH_# zT5b*ac+fqsa*1^EYI1d_uXZg?>e%P#RXY3sC_TK?yK=a$Xv|?xT#=1;OI(>ooOs|G zF>Tb2HH8~RUAQl$?5U0~6@yyp*oskd<2cSbBN#t-HR15s>C0FY>4$gPYDcI$Iz0kH z3%Z{OxkyKUdmt*d@>6#_99A9%QxF<0xT780tY8aj7>|s$Q4fvsDwWS0=)ov0S-CUt z1ElTdEP`aJ{c$AGE*i08#`DWSi{P{1=oWzjwMK=BA==erE~y3)~)U{o+`(s*Gdq#4{k=3lKWdn)Y@aOYq!lcuv)A z!)}!`!R7Noti!=ZITJWo=KU>tOGMzPBcpSBf`aHFCPlkA#yjNzckL16e|?aNzr z!&C?NPSV(vw})Ht9Nl3xV+w#%UZ5l*+8L#abXGo!Ay-HuinAk%jOwNJ1mlq(?sH9MYi5-x}R4 zHf`+?fyib&stn-aLQNzR*y&uYD557v!q96d8ACbz)kq+SyCNYfNi&WRI`RA#yix*e z4kDY&W#<)9S^{u^l~I_s;PRd7X?D(LAd)T%C-nNU(mZr<^oBOa2<1Sv0wQe+qlxJW za+n|5(*#EsK=_=3HYiS9*C^(>3N=XURla5Vf<{p<#Dre! ziTS~%&dr-~4j92hH5xHaEvOoFpS#3qtAaXSPwkR*6RBmBCgExYMuI+2taBPtO$JyY zHFw0BppSse#*2En2sfQ7DB3dI@(D(qNEo6b8t#nXh*0OtlLER6M#QmqfUz;6va=v+ zn>l%om=(wtUi3%R5ertt>IR6Ag4JO7Y!04zKct%P(hwJ7;zS#csdk!X{-rP12GcA+voF& zjSf%gaAK!q@+?U6B4$mT-5@K`7TnY!WUUk!m-`W znQ7%TY-UbgI8tNtI#yG3TP{G}R3fic-Lrdwl^>pdbvPRgqf9PXt!`s&(nqJkP3kyS ztt04YDB2$8flhbT5X8L4+b?zSjI37E+yTFhXXNtvvr`X{HsXRGs&Jn4=5^#%Rc?#g z!cFvGP0q>KVjHn!p@VDn6x8*MR!itvAdgfO7|uWLai882=*}*)s13?ycOGWZ z`i3vi>4Xtc&KM{WkB&Hj^i${v?3&`lbVN@N?cxOJ?wGM#cE$;~9EOV#8gEo0CV1Rc zSr%g}cyZZztAaW*7Gw0hNbXvwGnRBpwU)U_uK zv{CP%ttQTk^paO!WvXeyqa*o{NiUY>hp`qj*EDrp8rN8N$Vr3dL3*adeXr)&k7_Vm zZa9t#9uBbaysGfb9J14PVBl^=SJtCn_jr_vqfi#gPNvcKb`oTHG z@<`A75QNoYST6fbr`KJAt1ISwM$6a={q&CKc{)tuCgNJ6v!O`G3S4@|E+^2&&(e$r zUtZC@gbAsxuRy@F@snJ>peYt&3W;vfGG%|9v9&?m8|zKTHBDzl{PY96klqwmVG6}G z9+!Fpo(j@4#vmRj)8dgAu+lKoYO)M8rg?_oGH8nHgk7azLp>uOi`5n{gK9VC0FxUp zmPdLjW~_)BuNM)r;}tL$qJbYvyZWV=AFkPiwUC>&Du{)GZhAG}x#ZEJURL8p4yh2L8JF!h1U=wpNx&O$H}>TiSELRB_p!3%gbmb zSRzu`ngtYJtR`;C6(Ty zvVC~Xp_k`!^Kc);JE^fxi<#Lp&s{yeK2~E(bS3t#dA7)(2Hbe13F;b2HAuJSCHfJ0wZ@>{E8X7nB{NF6x>9oNcRl9zZ6VB`Rj#opQ>>)X4n-F08eMPKnfQCfPrvFE9&3ZHZYR zQdHUVNPkV#*}M|1n~{(E;J>NDVtJ$&^LSBKtoM;4*I~?4M%IhvvE8u`8(A~%5hSNs zL+9RjlPZW?Yc$Px9-n&FMO^*Nkqav7scPB6*XUSep5Ae#^3sCzyll+(@yvNx|99}U zUXQZtfK838xTxx03*2;bTW3pr5=yQ&M&@!OpR)%YQg=FsLklF`=GxWc!4ejcv0OO= zI`bu!mzlg^`;$Je^=@!4GLvu%tvzL@JyOs$>x{2Qx0A^n1MUc9i!o|KNF`6Vi8 zqK5-JJv27H;q7&skPP)n3`4`v_3m(FA6E*d-L%|u!%;Jlt{OuoUHA1VJc&eqM%TpI zw!4(H`^Qcs)G6NsQ+d%jD!cGT95pMKL_B#{TGfo)JV@tCLdABaj?(~mIBphax#L>n zM9n@3ZqQr-P>WU9nN*QJlag!EMHrxJ*7iQJ<~ELDIS$b4QXD7f<--HDsh}nnJT20;tP<<_kl?I>H*5V8|mPdEA*=ei@v_^1CtS)LM z*Se^4tV_O#4$bC;+jpYxOJZ3NkDk!JVeXXbm{gBHIqIlP2?cUy(8|&gc;Al|vVY2X z39B8P&(f7vG}`ju_Lzu?E@0ylw7%yo9g2%aXL3=CsF%uB0b9+x7|x7C4H0RqED^0$ zrMb8k$_CZ6#4sAMv1{(oTRoM~s^HeJUarww8?N-}Q5ln}vyns82C14+?jVLstuLEP zuAp?7_;pcrWXr9qTF7vYk~>e2k|$%YgyOh1tR5k|0kt4k2EuE&?{jz(j+MF1Az7TVr|7&`p#_Y3 zY22$GFQwGo>U7>jM`JV(aQ{IMiSTBODS4b`gv$b_VWTD8nKZ+74@Da4W^hrWbq#!d zsks$*nbomPl7*4Qo{5?o|4@6qF@K-%M)(IC?U{}Hhq5$-2?JcG;&G;hJ(3+d0b0nTouAyn63rejx7ZPgt`t<->H9JNApH7~aT zd@4>DVV++@18cLsrT%sE|Bx{s6fzaY~#=#tY`Nt*p+KW^AgtvlZUQ&js zl0IzW7#;E64&ubs4I#8PzcXacD-ypTr5|MRafIBtu`?Dp9n|MFs2hE~!>kWHuQna; zL6CWzpibUI>~kG;2B5_%J-I)_0H?;GbvwO!%5F9G!9Xt$1zd*fS(b_=U*6L%OsLlt z$rU(D5vk+QdfqdSouRII$i>Y5IvbZ5@7DBoFsrq>#$lPxulEDhm>9T3=$v(W&N*Yw zI5`J-%A{6;vL$78#vcmCaoh)(ak~a>mF_UA<2x7su>q$>)V;{mBAXTEhu0{H%P}Q5 zd@~(6{@_jLk1C|@A2uAJ4tgL17hRwrHXC1q)b@NTz z9&31LnNjB4G&j+J@+i26lt-YJj@llKLeH|%%{N)cukjMC@8BoRg<({dcTI*t*vopX z_qCX|h1W~m{(Q-XNm?hV6%Z9c)X{=QE@tYYdL2Oz5OCI9m-rwi!F(RaqPaYdspoM$ zf4b-JwfYJ!&p@uZTPvG+Tg} zg>Kd0(^+&iGtd?nOul8=+-@?d92gkLF=Y1Riqn>#&Mis#igQu$EwP=bQMfdzKb znTC_3&JW#&vUCaPq9E^)Xlhs;!8`Rqd_Mvgqavm<;jIC{RID*4*SJ(_SX5!0Gxb3MvfhSiW5wRNQ zguGMYlJPxY+T?W5XyOv`o`*?TuP5sYum5_h^~p!rd*m9 zm3t=qk~bfm3UqSi?;FDJ<0##H?$8)vICN2!K4YjyilZB2iM(>vt9V6(zIsTn0GOoN zY}o8@7Ios5KGwase;bOIg2_8UPZZ|3x_n(|3!co-wLRPfcT!$TZvvkX*xIJc2oRjX@kSMDR5&n27}Onl|-z zoE)NSD-PXaMy;EUBNpP!txXR;hppf6Zp5yeK5QAmsSI9KXlx7PwvOVps4wue;~|c6 z8SF6Rz(F6OzAL+Ta9glV(klWx+vq(Rnw<3sz3Ft2^(Q_SlnR5%NiI*^kp#RmH0u03M-dH{-Lc%*Ma^9lm5V6 zQQQ|Pi(2q72R})^^CBA3Lc}W=c|@j8wZ% z4uS*mZw3CHfPbs|_8FR)VP&THL*y6K9!~dBQ-&k(85Y7fe~14&ef*8ykp0DH;Z} z)= zy_7zqpp!Ngf1jfq|4R5@{xT63c=rOIVQvw4^$h>oK(*t~bp*lh0KWsF0O*B|>O82R zr*hO>{2hP*R5y!G{N4=ZTztnKFJa>^eFX5AK5#Q1l4ktwL?|dqrhv$U(prckq7{jB zLM;~`x!0Bi!0Esr+Y3V;6>PDzmaHC41t78=b`(wGNh z+f3=IpcQ2Esq}4}#tP6)2)81~rI7B#=Q6|i`(sqWRmgQZictxw3At}V-sLDr5X~{2 z?d!UA8OMwu4qjh@Mh6PC1mFH|=IUz){jagK3AUCa{|fw@&X$(K$_j7;;0Hw44-;9s z7S=~m15_K0Tu=De3(E0tV)G+k#pWXX#R_VtM7DeT-9Mve9JjvjN^EAjCTivX1KajEwl$(%n=zKiZFazq z{F_*KzhmJt?s@n$7y4c+df#UFs#Tzx@E_T{41c-g-^A+OcwmIuq)CQ+bK+6`&u{PJ z&OhI3M9b2=8N>|xuc@o!+H}3!rXu*40PG9=yI8j;);h=g{j2KlI5Xpeu@<(X*U?z+ z;QoiF51=Age$g6%tp7K$`^H$iX;rgbjqHCD8}B)mjnr5F?Rvv4UW?;>=D$hJ-t4vW z|7P|%?kXsz{kL}g?Uu>gC#o^piB}j4|J|(n-{^nGZqGB; z@#LaATrH-X=rO9!*>q9W9eblqX9Z2zw$f&sHvR#0>vH_2t$#TY2{F@RcAQxTpP#2JUfd_71OW_D*!P z1)~!@dE~SfA@{MBbKpm3VE+m?gR^D}e`^YV4KCNRGP=Gw9DnEV9D%>!x7r?9L(lA% z;UQEj&ibvcm??+)GaVn&@da&lot~b^f&TM*&T$tU$DMNi`8FM|Z&a6{S&#kS)MLtX zk6Y@PWtKb$E5aW!-N9Q`yw0cm(Z6bGaJ)JxtAR;7(UqEU-b&qwObqazOFB+6opxJv zf+{)FY7wC2PCfcyGmdCiL3}!Tq1>+FHYfOW@J)%eU@_E&&}K1JM1Novq7* z=%|?KRi-J123(MfN)G^n+`u~8a?Ya-C;WKY>W)fB{@Y+89c$~7$pawrr&Mdpfp`;1 z)v%PE*jo~bTa3<-y~*{i=czVo7^(wmeq5tX*d0(4?#87Slc#OEcerhB;728Nauh(q z^J8nd1qWU9RHK7S-GSrI07sxMNr(8&s0CTg_=5(>hPDHozf3&gdE)XANW zo*htSQ{vPOsX%3v|CfuZyUf%tAEf~kAwAWIh)QoHUB+4nzmkEyM|AQk^5#Xo2Y*~j z^`+J5!Sq;x9w^Ag^{V*@NF|E6m7803d1`LFMaf(}baj7T0n=$H%kJnMzmwcu0Dtj8 zwJ4Q#IsVBbx)w2Y5vM`*L#H>fZR5>XkDqaikXkD;c6TaDc>$YFhr3zSX~;Gjx>WEW z{%aAHiP;o)ld20cfkrv?F*@2jgCmwCvaF32wCnczk)lKq+!gCppBby}HdHp|CeDpc zy}VH?W24G3LCxVfyC^>~r1IeJ$EeziGf{VM`b`bw%_mM>b{NWsb^|+O)N5nSYCx}| zc6OE|u_ngGh^v(2C!ve5BsQ(%M@`)S@o|*@X;N#rCnf4lv%h+h&e)z3A6dH?Z-dQ` zRdfct<8T_$9<*HdE_zqjg z2jX5O-CE8g-6=Yr+kYo={F4$X#yYPSQIJTD8iuyUv6G2PlTta>(4HXEjLpnj`MFX_ zcB(`L80}VwO{+zyOpZOqrceda;3MC*j(sStIT}#DHVjC*B+!Q14~iwr5TuE)6(VP0 zC9~CTy^(JX&@u>D{W&Um3)#9(_p786S88-A3V56_B}nazPc`DV_SdqcGxZ!mdoR3_ zz^)*6SxKfZL}c23;SZIu71)&#TRMB{lX$BeNY2ffNN7@vfZi_3WEw=^k}o2<`>Wfn zI#EiT;?Y#l#--Sdh}1EuUa3^L6$g{#ggM^{k}2)XrmCkoiIg2@O%<`(tcjhT9u?KA zQBWEg__z?tfM%aa}koeq4`5f^evu4XxCJVp{J`(w#Up z8(pu_&(897Re2YBRC0M}y_q`$4RP8+XLfxjg?)E za$00%;x?t++;M4HKl{ri7#mfNkPM5q_-V=X7DEbOW1nIPTXTH+mj7xyeF1Jks;jE< zg&Y1O^T{@fH2;5QfinWA7+bzvBJvc)St-$@YU)I>#d8vmbsjUnTt=}8l8v%qALxq< zTn|};ziiEWUEXr^D;j~xNvOGruF96xpQxrMyR`bMmq-%nbzMT|FCqL%ae7d`1(}ea zjfz72rll@96@4YC5Hu~jXTrs}A8xF|C?a<%-2^?3lV>`KYMCl>vnW=Vtctlp-|eCOyv$WD*vUi6 z3aG&EcCKQ%<|HkiEB-e#E$JoGe@0LEGF2a23BB2qEUdJ&KEh5*82tp_iMcmRQ$xPTQb03yvjGN$@< zKO~uj{aC&dXs7psJwku!Z&0Ieyw~v)sPpPFN{daTvQ)MVRJ-4q3vyhC=W25pYSjfS` zzCxOSma^#TFb<7nDl)fzD6`5gS)lkVLv?4iWTXzvP2sAiaOTQ1vPDT`V`R2)7A@3W zWDM2TEwcGCTQXM;FlitTw{c4v+Rk+exPPuN7lH?{HR{T8vJjaqXcL?Iq>r;|N5L}M zC`c%9ahVzhzc>+np&5m5PgmVWXOxqv3~?AM2dfep7WYbJO^&P?z7$QPfGzbXWtS=}?fmsLYk1IeI^p0F_Mzxn55gkPDl2@~J}g zi4%Ct*7G=7nQ01bnkz$>-EaoxqBrsN>8sJ(xjUe{%HP!6F_vzYW9epDzkG?Cvgwym zfxefy9>1xlvsvqb@BnZbnT2T(OhX&uhPTPh6VR=Q>)yn7kyJNE)#f^-EAdoGE-kws z(|lWAn)o!Uc3quOF^~r}g~+xv3|EZidfYsxp_w6Yd)-hx>}kxsnz^3KEem541?~%( zc{0_{Xsim{cIO`4Eojy9v6Z<#T@HDfG$l5OIxd`u&K(Yh#=TUK-cJfyptZQFua@Pw zI+fbV)O2Q^je!V*Xl&VRV}ORY%%)J)Kl%VPFa%E@z}-O&%7MaNmjg+Z(e)4cCP5m> z3}yGBOwbs@Hm@BxtuR`^5vrFF4A%r~WIR|PJ<- zw4AFMm5)}}eiWWnx@GNRsh27jD`ygn*7MQXax&{>mxmurg7LCq(>VuM6ZFXyxcq;9 zYOaM}6qVio`Q!t*L0~j-2a=ihlg&g8HulI7f-ZPIb-~Pfhwe|)NSD;-QsY$%blx1i zy+EC%>t*gNAkZ#d&&!U4Y+1HX%JvzDl-ch1DZKMQeSlwekOPl{%;eV|U>$h`YULdL zdl*^F9Ph7est+$qR(%Ey6D5!w>Od(&khUyi*CF%TiL_0=X~AAmznOwcTQ4KCbzPrh z)?xpM5V?gMyoZ4VY1KjgmX-{_bhMc1ixjq1Pt2jwKS~omcCcG@H_gGQ;{pzZeV-dH zQQZ#3BjY_=8ih*7(7~%87(-TO9y)pE$@~ir_vEB0A`SoSlqqPRR~Zj5o}WAgYZr+6 zA&^;*Kn?|l60Bg2Jrv9%C?sgN;LhxZwS z(EBJ&+2tt2U5=ura8Xp#vyyCYQsVZWLhX&}@==oAqHB+sfIUQ)5LaRw(Z>dWUe#Dr zD$vzvxBS3om;K&8XY)5kZ=ZST8y8eQJ?drqk>JC*qc*Oev-`lef}_vBe*fGdL;v`| z+&eN#@9O_j`BQ(|ICgX4RoQ?lljHB;6>o11ZQ4=P-q|GJg_A8Geh^Waz2W^l`S)n(1;($I+5$^d ztJL&g(&E?rzFH~`mROP~l_L3_IMnf1OK-j<=Bo7E?;d`&L|jI>6Dj(iR{Sy3OFQ8=}-q@=L2Y+7Yuurk! z%`-}Z7(dfDO`Bdhy)-y|dU>F7Q%kUNMtNm(Wob*x)RMBMz_f~{8D%A z>og1lVLWtVWCF3EF07Gb`(k@TYK35^1fqfkAvr!9wJJ^3!onNyM7$1f0+&XuL>sZR zD2taUf92CJU(R>3@+po+W!hW1rmZiKp=C_*zyY;F8leg#1O%f!O0)vJluj7p1X3_X zXoM)VR2H4cffoUsV44A- zH3a#MAeUQ^xBry={jMYS9kI^{`?%@TibDS literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Runtime.Remoting.dll b/external/binary-reference-assemblies/v4.5/System.Runtime.Remoting.dll new file mode 100644 index 0000000000000000000000000000000000000000..c41bfa8a5edf28233cf9d363ddc9bbc472bb0c35 GIT binary patch literal 51200 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

    *#)3O?Lx~E!$55@$}R?-Y!3lF+#Uux%^nUq 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%0Aeq_eNXVR;m6ugWad{r9tMe_dst@u(2#xc6eKI@W z&FcKXNHbXp)W>Ie3$r>ur80(a^+QN9lu8CTtMebJkhl`6@mY3OmnAPLFauc)GMr91 zPvo2@4kR_8MqtW3%a>R|~QvseOjxlKHoU6pKYcLR_dBzYPYndZT0gC1(2=YAqB*OShl z+!SHkxw(BsABxGP|9JCzZf<%;dTs{Z`<|PTCjVu1%}?u#)gm_oNg3(=iA$&T$7|v_ z3#Cwjo-}G~E>)h(;ygv;Vg*!{R+y5OHo%vH#!*N$4cE!cw+}kExm}&RsZaV+5q%NS zw{K?GVp28bLZ?_+e&_-ND3vsll}TeTfEbKU3RXf?spkw&y0CGhG;0NN;sy77?T^1+ zKw8IWDNMm1m2iOFS72Dk1Z1Saij4h560uW9aw*{O6sDl>Je0~KAWe;cw0<G) zLMvVjO$-!JtgWyYmQ9(mPG#kFEr*UoX4eW%?P9uFrcA>4hJ0;uqEILeTI+(e9Z(M| zf+hkKsm5HLta@WV8j+`Fb#3&hQQmbbr*xi^=}TsN0#&J@-j7P^JcqT%m7l}2Er@=u zOGO%r=tC^!WMye~Zcay!kT$c*`=UE!$b&zHq=N{f@3Xq%nYjB*eN>oLNkJJ+LD*e~ zC2IwSAx%f3Su5y*E*s!8Wn^_hB$^NBpiJ3i6w2z5y>m`hCE82Lo~+8ON>W)l)s8Ol zWYs{EDmuwSEU-QtAXer;W?55KM^-r(gcJ%R6$TXJ6!~f7BD$Z?X{1#31^tmbtLp;! z9|A#72=^zO-gSW-*4&B2LA^?;xMC1(!NLF|=8?j0VM~Lt!L|ZiTgbTal?)XXMu}wP zJaS2aRHPM5B8;U}&h`^%`qd2B-avJ6{@vH^G^g$>H?lcOl0Ksz&qiFO4 zcD@2iW1YfXOgA$!an`%j}K27;a!ycD+zkZjliE;$Q{)@+P4(1JHiv~ zKF;Ll-_XYJ_j4>Ua8hYmX+>E@`LxpVDPIw_2hI2s{{E%>kb6^FIw8>9<}YpUSgH0=U2mmX_(OyA;gul`W!o|XD2>6)u8+ZD zbAkBt547JJyex|M1VzH;$AI{yEna?WrQLh-2}|=Py>?F8?MF48p1Hs8baCGsrZDjg zg?$cohjtr2dIxSbei}*-{qbWxfq;B^2kc)D7rt5UZ2vFZT?4OScp&bziQNsyN literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.Formatters.Soap.dll b/external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 0000000000000000000000000000000000000000..d764b0738369f475c4d05f4962286219422814f2 GIT binary patch literal 17920 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 od^abYsTVkpGCzyYGJ@|i({{jpAA6qcr@c;k- literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.dll.REMOVED.git-id new file mode 100644 index 0000000000..0a78a66b2a --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Runtime.Serialization.dll.REMOVED.git-id @@ -0,0 +1 @@ +81cb2710d327b83a0db41e042bba5e4ace6ff058 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Security.dll b/external/binary-reference-assemblies/v4.5/System.Security.dll new file mode 100644 index 0000000000000000000000000000000000000000..c28fc558eddbd0be89ed66f5c81a20ffef9af4b2 GIT binary patch literal 58368 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.ServiceModel.Internals.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.ServiceModel.Internals.dll.REMOVED.git-id new file mode 100644 index 0000000000..c4a10a4740 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.ServiceModel.Internals.dll.REMOVED.git-id @@ -0,0 +1 @@ +e4d834f3a9938232df03b8a16d10859acb2b485c \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.ServiceModel.Routing.dll b/external/binary-reference-assemblies/v4.5/System.ServiceModel.Routing.dll new file mode 100644 index 0000000000000000000000000000000000000000..5a35f802f7260de94f060aa76293cf1edf18434c GIT binary patch literal 26624 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.ServiceModel.Web.dll b/external/binary-reference-assemblies/v4.5/System.ServiceModel.Web.dll new file mode 100644 index 0000000000000000000000000000000000000000..b205b3072142cfe5a5d3ed5321b12df3e7db03d3 GIT binary patch literal 48640 zcmeHw34E00wf_0OEDQmLWFTQnU_#hJCX<=$6cDn3QII8orDDS*8DJ#Igvn*0J}FTRKI<g%=QI%76RUpvoIP`*WgG4LRx0VWN>q z6~}S(5+MiH#|3_}#fbdz@b) z56`Zv`s!KRC+;3s*X2QqsEO^&dYI8~w_b>z1{A;fgok z*>zq1H8*bhZqExpn%(zrBzN7-YwmsUy#`x$kIep5$ z5qok#{zoe#{BrCU;=2gn=kc8dqp!h{!z#iTQPS)9=Ht5`-)iVa;5Q9l_B+h@WqWQz z@Q%-ARjeaQr*OsuErWJtd@jRHZ)c1c;i3EyHNY-lI%T^@r>0XGFoRaQ$CI13x-WBQ z(D2bYqthukdOSi{GWuOToz4=x5-x6fcJ!;z&d;2nK?}^Ft(iMA)9EsCxhIo-J(;;P zJ%<{y)@Ef;uV*~6dWmOk)9H|C7?V!J$8rc4kKLJ`LC=pJPZ{*4;IM3# z@5p{KJDuLlW}Clca~g7U7z+iPff=+T=jxmcx*h1D@8)p6jtKq*m_wd%h2uQ5cwEhh z4EokM4(+`0JJZwYTEW-^4(-|r9RBwwa5=mO%%Qr8h2zp`?ZgRM4qXg6hrR~Ppob@N zs(vc?{>0Qt=`?E+=dpa!c$!SrlkP>XH&5cyxBxEc^djVR8kx&3V{_T10CGB=A-FD& zyEGPGk3c!Jkj#T>n+@x#?VjXVM$uua8D(T-G0gRbZxbi_V`qI`s~)X~GtR9ij8cCv2U; z0;mn7C6!ZsK9y^IV3&&S0@Nz&z5?CTbP1gz>|ui~5%w(DbI_e8?5M$(YZt&DPY4e{ zw^DQy!M>_}o>q&_C%P}vI?VOI*fj(UXM zE$n*wjIgJK-AY%Y1!mG~!tSO!ME4$;haRMdH7?Jw>1}Dh2HP)eny`oHc`(dwV1K2D z>2+bJ3VVzh!dwS-gq|>17ufIVDSA(IUr67XUZ_1qA4r%tfgPb|X{yd)-UIem^rk|6 zP2UgFQ)x}#i-NBS{!x&Iv3rK#c)_W_6@3Ab7YHs9+#q;?;H`oO1b-&@h9J2(G_PQZ z;7Nij1vd%q5!@&EUxGgqd{c1La0x+hzTk4fje_S0?iIX2@H>Jp2z~(6XkrHA)Qn+B zNg?F)^n>XdWWTsn3VuRx0kEmBPVCoY@Yr)^29GlF42&mqb;da09T`0CJu3K% zaz;!6t{G8a$t@#hK;A8Qo#3|wpAvjY@Lj=_k!+bI7|&pNqR6uZRmdkfe%ayj8A*;|nbXfjlQmD~{Q5b*e6u~Wm zmyDVXm%B!l0DmDk%3Th*Sa6iPT4cthZXTaccXM5@b8|R@{kFIl!hN&50eCMg*Yy2V z?Df%&ScP%h(5QCwN?>U88sOQZKLtF0bTjbc(XGInMsEb(GMX(PAKebrG8wZnIaLLj z!++08Z;nK59_h;6`6XPyJRFmvYs_e(N&!R3z33xQ8$?gjo_!g(w6 z^N>epNyu53Lv9m!hv1h59~S(D;GeU&1SWdez9N(DD?A)Ry|}CpTqD>lxY=_hwC8!Q z0bcK6zqgC~10F8Dz+zQ+|<{MZ$TsGz&$ajqS7VtNM?+Ip&d86BSZd7sJl zQ_iI8e4~^~EN}IVHrReTby9gYugCbKLNS^0XEN5^;~S$4X}4?jqz8Os4fdM0e$pcr zJ4okF+H0}%r6f$tgK3|g^n|73Fc0};xrmSsx^9C%-p=vopzFZ|_T;1=+B!Nq>3IjE z+!uYkM&r*xqTDxp6BWTKE|~j{FVA2HsW$gR-(&|%EA|>prDd9_b1lowDV}aIj@@Lc zl$>mmWx3n6B{#o#h8d>o!rU1Sc73j|c&4ShJ9mGP%?>~}%hJ6FoyiWmIQBv-EpO%q zicPlLrRP-@&o*?sTx0U)S!}m!T3&52?|b>P+f|u2$zliT>myKKrW#nnm$-7QmYcd$pM_=@FlL;U@4%Kjpo9f7}3SpGhQ zKa=fujq~1BJlE3A@ZRrWRo;gkOwapn@jS~i;{Be3aoyTFu3MXJ^*&QP-}3iG?@t`; ztKQANlPukLywi(Jwx53DeX)3fp*ujYgDo_es+AhkpY&;y9ds4tUr}tb12ixHh{aS* zo4R9#a=>+wBNSCira$ggdwn*$FxQu3voGau_SKpxbA2a&dXdezZtE-^*R9RCZtE=_ z*R9RCZW}Be*R9RCZWmcPu3MXNjV-oxTw^xlTCo||ip{t-PqzGVZQAUY$X}zSOPM;o z$YwLAzEymRrE8q}X9wFnb+gYrVcqSz0RC)t19VF)f8T`8WC!TcsedhAYUsF4r1?*C zFt>lX#l{tk^RINU$^IsTshVD8Fx3hy=2~1Z-EXty1w|H9^}gEl=UQ7(>NnXgI=`UW z!Cv=P``0AIce?3M+Na45%2;5s-7X%5ZN{Up&3F|4q#25fM`4?B-LAECTw^xl8nf9Q z1$%v;vMdi3_;O5kfL<%uTzrP1JBS=D@Z0Qzf<^vyhVDw}mio`M*arn`{LKbar5iGs zDqWMQ-e@w_8%>sId8|-WZ#4a>S}~dGjW*-nXfy7OEoRE3H`d(-e@!Kjct~W zd!x;`H-;@8_ePs>Z`@$%xHsC2Yiy&XWA!fBiRT?SLNvc+HrhjV|o8TWUaai8wCEV)nHjQg}4r9*#k zIQMCrt(q3|$1Q)6X}u2inQ3no_gK0crv2H$czoGv>3Dpxn6`UDpMRU7+pj$~ZI8d# zVy{iR+<%VgPy5z{J^mdQJ2K&N|4z#?bNaRZev3_?ezX5Pi_M>YyMLF(R!_gre}ToK z&|PS;J<#njSU-Jr`Xm0m20NebnLefHa|S!8WlcQjzu5A(fBHfHB?jYqc-sGYgT1D` zHvKvOWfpsH`Y-)oa9F#!?Ha4I!iZuMp}u@YG#Znxgo)F zpJ_S#j2WAK7SlRrOf0e4xih9X*sd9cB{!S?w6D*oEV;#CoTJlAzV2W(CAS-_-}TOn zPnUed)Va9T*^FDA&A1iZX<2eBuo<_=Z(2HTkv8KNd6%W*7HP8muAk1hqWEr8hjg}< zSd2cHvDbH>Lsy<{vV$&e$u{GbY%^}j_Z$8Wy0|6VjPvj|YqVU9MAR?)BMh{Y+nu$qrKX%pE1a zG%OF2cjm5=!v^c8t-eFmu{ieaxO2A~CmamtXte+m5S)TnT)1T{U zl!VP*KuOr_wV9tTdB?K+)68!>*oQM?ep{C@YqQU01qp2atVbOFPM!5#2U|Pqdk(f? z)-x76pSI5Wv4icN^-{^7jkKIkUz!yte$Qgxn02J&FBbdFtT#&Dx7f(ScS}CB*yO_0 z0H1^NN0m#8!44A72*VO|!z~@p9itL-qb(iJ4`UK^IhKxRl8FZ6y8U`duBnsx$ZIi< zeX7AYWupSq47Q(6DI6atwAfjNQv$OM)=!s%6>(07u>UMs8&*le74uEln{{#dxs zV*Rea76vS~pEySgj8HhY4S|J@_?84}tQc};`-1PXWOi3_L_jnc#K?UvE8mY zv-kQM%rIT`vu`Q38J|+w?6ty{fX&t<_zTV6=+JGQ-R@v}VY$eNLB(#ee%F^~cLx?H z#BMW=-DclGC^qA?*z7=p?#HvYJ9I}JI*z?O+xEwKx7mBMeK|Jck~rB)nO=0egK^3l zE#256UyjWw<2nrR#&vW|u;D znx*?1bT;EUT4w3K1D(yDEZXc_Zs~qeG`+}XTw^ON-MjE-vR#zo+Z9-8=u~+&nGCu; z0h8^PwzSF$g-g(8T!O1D9hacZxTe=wy5T-wj?K7qPq%a)-=z*#;Jd=XxJ`W0vMfg^ zHscnu*3#AZu5~bOFQ2k>%i+&vTxMrjIxaJd(FWhc#p_HR_4>-Q&vYV)6e%jQz zc($6gr!63kg{|ZXq_? zFl(=`#nLqt`*JKstBY?8w3<4}QP{y=EOxSk{tXV@tZ5q^%$Kvt!5%J-IN0rhvmET+ zK)b=zNq(n8SDtOMT`r!BO}1M~*JfP0HsjKbnxVM3bZy3^Ycnogn{nydj7zu63WZD8 zW?X_>EFG7i$&P5-ic^ca4c!s#(c)1>af_w$|4QH@GX}6X1D|!UzXbL=m=^q;#nzQ%1TS{5F~Lg=rdFeunmVal zCz}y;vRi$Z8~$ z&G^j!%a)GM{B6e9A8xR8eEq>@ygS=x>3DZ$Gv1xuXz6%&W;5QM-DK%_cV@DKuG>rY z`fj##yjQc?w@Rx0HsjsdS1e23otf+)JyB8-{HmclGW?Gvn|&tRO?3e$YffO>oJ?Al zDxmFmEw+^euyF^z>N13$7rO?<0Lyzw zhV92^6YiKQ1meyGpiXm+DNmJ<7mLjrhkT*L-URm)QreJ&w#nhrE4~?iU;O zn@X38y9)WsB9|a!jgF1K5zE22IEUj>?oN5;#|ZP-F)kR#sZw}s%a5;JFJXp8bDHCW zw#Y-(*HVe)bYKeZ zKjK^rw)}g_T&HhIdL9I(8X>D%P-Vz@`A6sRjLz#FEGBY@b8f*zI=caBLg19S#-R-x{OSo=ZuW ze5K%?HO{XOXy$jM(YC(;hN`6toQS$JKX6sEhIyuAq_~EdnSr@7nCL$Kqt~8n~G0qg^+ql$7WsXO~HNLUOX9)PkA(zc4!5(N1KVS zk1oSg0TZYK?kCaXcn08cJTjI;^>{w%DDk=5+ratRn#OXLHY&%Jlcg=s@#F;IlABWl zaZ1sR&`uW&2<{j3<=m#l zCvNuL4Q=62I|`YrHWx^}di`Y?*Q z@!Y{Pz>8>emK#rIyav3K&iA{1c5U^V0`Z3QW-!0!L_Te100EvCSmy({L%!W*7OXNZiY`2wdiB+kti3 zXMv|`e=hgaW~AAV=VQ_<{B(vkx}ptF&Q)jc!gDiq**6P5A^3`5ipK5*f`!^tST+hC z(&kbyCsk*^!}YoJW=7{4 zM}ep04o{g&@8uSzG$EWq$oul@QaFW;klQ9lfU~DOAudND|6$6}lrt#DJ3MtR6?qGR z>%EPs5+mg7{79GS_U8$VfJNcLz0)JWzUg~_cTB$x_=D+3ffvo7^hxmL6)a4jOQkal(>eA= z$nVZ<6gdLQW*>s~{E3I)a{bg-#N{aD zO$EbUoZmv=MFov6&S@j$$EO_`#kn{#ieuN@ENgC-^F_`Vxkls~kwYSfMD7>4U&*7{ zZ~tiad!xuViu}09kBgk2$u{|!Y!k|2Ih4in;~thD_prQv4A*|2;EiM0{l+n3Bl6=S z9})S8$l6%8(Z;e(zR39^*N9vra!BNm$o(Ssi+rQVH;VkY$d8MBMC2nP@5#BDW*6Ni zcqm8O$++98qNs4(y>zIk5%Q0VBI9nRHNHLL9;S7^ed9R&w?W(DJ0v!T$8id2Jfl}| zq2PMKKEZv0j|m^$tjnD+_X$2Wg~L27NM4rvytC=v+54uk-^T=Lri3Hd=VN)F;NcRMDIi+Gg@Wq^ z`vmt1J|=irkb+__xKMDtV4vVV!N&v-3sR}r3r;KL(Pp8@>jm4yrBCF(g>1P`@NnHz zwADxTj9$Tg^{jnN@UXa018e#Dg;7|uWMXZZg{M3{n8U_m4$H=DH4bzAcq+!MAD~H8 z308$?9P99;U?b+QQ}B%7a+*m^n8jA%xx>{on?mHrvwW49ajG!iRMQrkgSqAtm}BPB zUd(4-#MwqMrp$0scbdHw0gtv$w;3>fl;OW6Fz_Ubdp0XA4j^Me#&x^0?MZPcC2bV{K7XV9w zdx1{}F9WJ@F7#dr`FRQ9bqVcVLFMa1NugfKaSau|GfWkl3OQeV)s$YxensvP>@U3u zE-L(6$KDEA<-(a?6{ZSjcPW?KKO=3?KW!Y1Z z*OfgB+)(yY;FY6a0!GWYrEM!a47@M+Yv9(*H-J0KxTSqoLcXkw+mC9W+sfXAe1o{( zllczhuZes~=KGMHmUoG}vcF&C|0??kHitwWD&&_$`-j#P|8#Wk%w z6%Q>8j#2qlB@>izP7&NFctJV0$u9`1xUL+{rRprtWBdAB?VYjQR6ZPO{(AXn;6vrv zz^BS50beT52mVe{cx}l{$f}R4-mTh)bQ-}7|1@1 zq&WEo>KGgODasO{juCYN(e` zHOvAHkUNlSJlh7;@w|2;e$Pi3EV@?z)LVQ>GXNzL&LtN74l`s zhenqJb@~GGp<`}}z~u^{PFEra8eIj{=?3IL$BY#Peif1#+Yo`eMI*bVhSz743; z*O6X4JqXn44y0GZ9M=o^PNY|(Zvu7fn|46H8>nOU+X=jv`hoY+F1X(h#HlA;0QuWM zogPJQH0-J_g#0*iqtSPPI%Z9NLUKP)rvr2`3`^E z$R7Z8`Vgg}(O-c&WoWkmM`^bKM{BnOGqrC3v$Su*#sk!`U%MOfSfEbXc!L3+3kB*l zPP-rSc%V)bv~NS62t<$59)z3=)G1GU81iJGPE)i;fL@KCgvXasd#%QhNgO z44{s;qa1)d2dL90v?qacwL`#pcvf7e`PwtUle8ZK7id2MF4TSktkIqa)@nZkhO`%e zE!s=KR_$eAoAyhD83v-|Ye#?`+AF|L?bpDl_8VZAb`-cp`z^3r`#tPqKwNv#-UM#d z-Ue>d{si2vy$kHs-UFVky$?J``v7<@-r;~2u6+dDiKp869TXbgb=0q=Kt2zs(=LtQ zLU2A%rwg=Ukaq)hx=>(~Vj_ z)-lGMf zy%&gHqm@CvABbL~RY3kWP^Sm9D##B4(L1y`z=PUcxI78e>3evK1$u|J0Qh~a2Kba# z2kp~9ou0uPC^Y&3P^TYiiy=P?)aj>MBk*V1sc`u@5GV24Qs9f)GT=+v3gCZhP0+p! z)ae)6YRJC?>U3B;9r6*NPQSuiEHrursMAsH4B#8unZVy_&A{K`O&K~)g<64=^)T=w zZ6lEM2z+TkoSy2NA*TR!O4U0crvWir=~2kTfI3cKwm=>ZM6c9ikVgP@8mad{9tG6N zt#5-o8i;g3VSfjkC?xli8#IUA@`j*d1+yZ=)2%D5r}@OUjR85 zs8fM{A>?U5^hA9RM??2O+I<2Od%$F(KG+{k*oMI=S> zqsH%V@r$tmYZ-a!WZu$fTTgrVB&v&c#^Nzr5^W8&hpDMI77usO(r9ON)w23!HF3Ps zs--6$7MJ>HYfneGGaiaZqMfHjo^W@}W^{7vERt&!F+k{@pO*R;kXTO~Pkdbp*jwL8)kHw;dW#^Q@Yt?_7g zZ&IB&s<51<$zrM7gjdjo+hgpdHrm#^DB9f-iZ2bvVxf)U<=xS)aCclHL0O^*;!4lf zhQq4fuJF=O7wp*4@YvAViaaE7airR5idT!(MmpQ@)6gE~YA`A*u|yE#hRDXAZmUpE zj>o$Ue|6FJ_Ap8;+G&P>)Hw75TnEz5wytQTGd^S}4Tix0e@)@mp6*Dz*Wo-MTc*Zp zKvL4GHXAxaE$xmxBgLlT7|BUAF~d(*xAozev>Fr&*Nv1$cvEO=B-)*r9H)lr+9Rld z<)KKos%x}xs*l9FLh;s3iLOSN4c*<*?vq2EZSAl$3kvOgQM9MCZ5bMd)K_EY*63!{ zBse_RXm^v#E-x)<`$i_jGjhI>Iu|RDp>{)$pwdl9r5-AEf7$ShRCR zPq@2Rz2OdRY%7{P6iFS8ESu$F<*q5rtuNY5tGgphxun8v&dy^r3cEm8hPU*DV{uj1 zPUo)n-ocJyYsNXidayInsDc<2>*?LxQQNqmpN?j$YQqd*koC&YHp7i zsE8M}*&6LYlZI?&k;e_Z$1y<@>%zz!mJtN1Wj*nY=zU2%C1?^oAqH#wZ0y_+<*GLZ zGh>ihAEZ@=3o93gH=ugGX(Z9T1V!@aAwJF;<8oEB|2?H6rd z6lo8eY)#CTobJneFbcJv8tz?%4%$gIu~@jHrMSh#3GLt3@S&@yMXkcb4c(!ilvP*PX9*sq|CpuZBnc!7b9~xKl z%1}#7B))Wo<*P2*-5#-%p_;U%RkXQ26b}t@lSB@3jdaTp&}%e?*dT-M&^9Dw2%;U-+`_ksXfFMw6;pVdDiUH2e z>`q2lwV@c>*j^p(mcQlQ;h4GL8WiXtWw|3Xr*aWqqZ{59?cSUuO-513a!Qheu}Kye z8)T6~r@<@Lhc|?J+T--ej&_*~c&sDU#?292>|)WL?$$7cjg^ftESL+OZ9JSdi;}BY zoLNw1>|ezrV5?d|HOH}HYVJ@=rjF3|=I(H)t+^{2ZEuc6&JGhhso-q4c`IQP?q1Oo zjfY|eMHtiq3&L%r5QcvtxK)tBHi|uuknMr%;WBN)k zqZY2yj&S$Ja2ti%+oRi>TcgpWhHHzPJ~)GEE4k0k9(Dd*LgNmXkIwP-P2S(EDESPTnuvNskEDvck*S{3CG=G|(cMU6u&iMqpBaZ%%tiy-c-#CsgV0(cX( zgJu$Q*wLa_S@n%rIc@DIe9_Dg$@M=@WsyMgI7*_4(ps>Ew?$qW!Ddt}s#!MS& z~zLJ}GK0+R2L1xt9nVn;|j=SZk?`mbXrf@v8k$C>%v6;~I<2{%Yu(_u85T-LTy*vbj zSD}ZSCVU1WmER;@>X^oiR5rIDfrP_@W~+x7LzOuv44fm_Lvu{FC7VJq@$aAmJhR2X z06L`Ls5Zn4HMJ8oe~s2@Q#GcdqpIy3!je6x)4?!t%xTKR;b54=!tpp3D=}WEsC{RX z>C$E#yE(fntOoaVI3^C9v>}W&fTNdV0oLK{v5kuo>#c<5ie!a~4YAMKFkDHcE`GXqIJS&z#D(?H1)>^Z3460ZD@s< z9+q_?IjcB96zWFNEe~O#ThrYg>a};QemQZl_-a0~vlv;@Dg+S5F=(sIF_v?T(4u(; z<0D6z;dqHxqgGHD=!_nrG_o*T8tOz0-DuuC0`iKj2~*#)4d!5JEXY`4jB~6f!+F_; z4QL1?OIvGw%)41^QM+X-LiZVbCTb4xrX`vNC)h|IA1s)A{KnH`ZS4))xw0F~<62Uj zM@XKS$u>bgn3x*;V(Q{uHoNd}8La0zomd7(S}{WpwC0f_oP2?92ec&Gxp57a9c>|;IN8p8l7^U*Xt)kl1~K{B9*lJf zmn_<2XB-1}xZPY=k~$Ad5?ZTKn9e1E(TvQMfO#s}s!o>&IvYz@(`rL^v;(C)=!89t zi_uYvwwXziJ`hG0Q2BC5X|xS&%GB|nxr#%j8I8_7@xWFC)4h1bu*my8YmMW~#fyoV+X`tQJvUHPn5pbZB1oZ z_hCV+b~QY+p5`6}D09B&KFvTgIk?ZEiG5GTJcKwJm3nIpfIuK|ERT09}f}zD|nS52qT)m6TO~IivFVigR zL}_;NK?Wy9ZLy4y>Y`oPHyPu+wVquSRl^2OKzeXrOxV1Vq`U&T;bW+g_N=m($d`uO zA|Xp_1aJ1@0kkpZ2+g{xMk}#)H!RKNJju-26yC^1iF0AqC(QW_$ut5oawv-wGYC$l z%vVyva^zr8vy=wp!?+rT$qtog<<4+r+ohrHoW|ui@{w-ImIK`kJ4wkv!z7MaoM37; z%ZWX64CaXuX88dQY$3r|GclVay43bW+S?M3)UC2FB{*IfBL zH>smJb(>bGnYwmf8X19_6NGBJMuiM0{Ket8)%uJH&1lFno%tQZyFb|q!9QSy@V^Md zoaW3{XO``N-1u8%-G+o4!;G0-Ou4v<7V0(!PJ47T3If}BuDBXLeycN1-?-iq9M~c; zMyos3%9$LBYkTjqPPr;BEhC9D2f_mb&jP$YP$zXg@IKz4+k4H~jWZxcV>)2VVV|HlyOY^0IS6Y>&qP-A zm=mO&5(o#L;K1hCjT$WgL%KvQ)se(`S*MyFof9vvs6}|EfF<@KUO)|KJZ2)zNedm+ zp0rIRr^1{-rIo0jW;&56Sc@~$qZygmGg3)Gat-@&9GHrwlP65nX8G}!K-Q9u;f##2*|f3hCh-Ee z>AVcf8?(XGbhcTGqJdRu+H*RkA#*W^z%J5=<@`D6&erstq`3~+0MYnm_E4(=HBU-= z;fRM+8Z9;Pt`T08sLr6ufRl|ap|P_t6PGwT4pJ`;$DKqhPP1>byEl`f;o(EPu&xO04w_n7p`!CGZFs5GQ$66Dc z2gmHVBH3LJa9_zs;wmzgWIi!9-OX?ZXe9kf{fH*1FT2dlwrC~OTCy8eMU7@7H%BC1 zt*XJ#Ji9{Au$}l&Kfytg;q=577<0Eq+QQOLu>m!%zL2_?MamTsJMV7Uh-T0jbFA=* zr(PTkh8xumQQcI4p_y-XsSR(8bW&ptpE0deyH1ho%y&h@iq^EoaW8-n)#U7|wXU^TPFACoQN!8yBwyT4WH-wF%_5vO zt1&RK`l;Qn#5ra(5Oy|q$)-XL_X9On!X$d5xKM`d%PfB(*fp&(uWzi18iSb8%@_0D z$Jomld!o8c;nvLq_Ap{5i+AV9ZWtwVlDiCew+^3HAK<;81cJRbR+aXa-q8n)y(KSX zl*rlUBU!by8PGT6a{jVTW0aNSzi^xE`BZ7i-9yVdWyioSM&{*=*IqS=8V7BBbsX2# zEhBN@D_;p-#T5w}>}aH&E5NzOF%KTu9c9dilH5iN(I^tNa8xZx@*xXF>@%=UR@pNQ z#YA0W5z$Dkx~w8DYJ)AJqw3Wq8;*F8BPYzd<{98Q3BkV2M9)51`ingIDQ1$;hhNEGG0#+;wBkJy@_CqYyip3uAUvql?qk8oAAF z0$Q3`;AAey%;kjRpw3v1BrZja>D`{JWs0`eI*y4~iOxyaT$&7AmN=ImjT;6oDv~T0 z5+?t~p=M;Oh?335c2OnMCeFELp_+Zzm=er;;?3#6=Eev=a2l|=VUTQ=`#2+C(rZ=5 zNNnCe?YKwWy52-h*z2~pV>!>2$`?0{>UUVkV^)4-S?-v%Zz*1dRgU9oni-9we(gX^ zrJOx?I_`Ne6&NM>*7sySjQikiRo#*%4yQd5>P+In=zcX&$80~Rg?o@a?2U|EED3dP z>62CFk_|0cq)Ff<|M18nD)Z2s`-R=0yd~qk`C$O-?3$+g_Thj_R z>vQec-X$jZh#5)34%~XYjq@JC&3y=RB_iG~k|V3h^;lN$oeYV$Feo=%59A>(Mn*n4 z00i0+LA!8NRY$B<-C>`skzyG0x3#zP(|nZTm7j0kd)De7Kk#n-Bk}+K{?i?wY9T${ zrKh`7(zB{l(mf~Rn}+XjeCOdi3g0X}UB^#$YI;^bF{FY`z&8)y{M2+$-xncFcco{0 z3U#-q7$k^q1#9kra4x=cn7jpHzMh_opBj7{@NG;<&*S)(;=2Oh)p~jce%2y6XW|=T zZ-*IPWq6(8chHCNjezuzh0wui8V_L${-m*b?2#XX4AAVQxUr!VUoYM{fM-4MZ3pYZ zllZtN5l@kN@eSjd{tjAXo7TYux7~&X$;iVCL170|QyL#Zg8=6-9 z_CN|#U=~OrjMhNijVCRmP{hFP;6reU<6Q?)=wl=)R;lF_Pv#6TEd!QO5N}Q3=Q*pu zO7V5umTZ<8gihHjg|`K!RfxI*$*90XpBz9L9s)(m@EV;t)OSfE+^X?f2cIM|EQ#P` zcH*TBX5=a`wx~m5+pXNqhgDdT&$(}xFqVV2K#m~BQ=#SCsiJtalnZ!1Vy!~_)nF}% zeFNeyLq@`=jw(rC->plBAI zz%>N-5cS=YETwCZ`WQ-pOQT83sZA>V1WEHle@mMEcnt>EQ?j%tw!42s%Q$X%-*Q+^%XR2Amu?6o^1N%P@?3;+=JT#F zhCJ@LoBu@}_qZi{N8-?&IMMMIj8E{?k<%JTe0F9YTk$ZH*jN79gCLGlwNwqqscBwK z%i1wPqmOp--{DxLkCKadOY!Jaq^muwRjcW*R?^>VO)%WPoeQHd-mS`0d6(pjH^1_> zxm3Kb4}awVa55j|RpYI$bvQn&MQ)3wr`O<(sl{*!;YAtTVo%>?mUKlrXRq&i7iX0}so?Iu z?`Sj<_tsfA$KwsKD@GdU`*LR+99H*z);N#G6%6~1Xnz7TE=Tq*lh-lCeBNYUd|u;x zetx+>!2f*SIuvhDcX)oMx_aRACcax|eoLTiL&b)w4Z&brMIclb8fHYmS?K#NULdO8 znjx1!jXU)Jv-0p9UUs@E>2m{v^5J&lJ}o@ScsiakX~jbiCvMGr0`H=vRT-|Okxq59 zBv%(c>=fEAP9Ley&Q-0@a{+W8-xcQoixR^ItC|KNP5RaR7#Ri3!n9$59}c=K_p{weeYWIxHXDF1oo zAVX^xKR9IEk32XFADy_h*mpZ72HYNMJrIWp@x+}6@E1y5G2>3C6FQ;Xzqj$Nz2*%= zgBwL!Pkcl12|TRz?MKVNg?@Q06kpUHoCTM=+c1PJQqbs~>(j~#bufE=I} zPTW!Y(8r(MPw=c{4VWAWf8W5KfzageC&&}V$icm1d$P_Ux3C&d!~Qe71aEac`F)q+ zZwKs6mX3s-o!^|R;EFva9&P*QC2iKg`EgLexz+qwq0yAkvER)%$g57x8s)XA_ZJSl zFHqfQILOcHS;@+WZ^gpbxE1S$$kr95{teEG)nDA zI>V;&vmz&OSHBg1XF%2n{M;+DcH$07kK?Z$$diCv18LPVRbTIWJ{0k%feN z)c>RM5Uk`p3|bif$5etElKQ@fKUK4Bh$plElj?(}Y53bR0~d_UL)+B?5=S>Xr{Ir# z;5n4m&0fbdPTsBjk}cfRO8EOeyc%&2=R4~0Dtx^9Q>{bYBOLbHY@Cu5huYe_ozc!> zJjiH0K+;{@iRUxDDu!A3qZ8h3oABzO1%*UoSL1*+f}s!sEgr|*3@WL3MRrcP#;ehrnRyGMIdJpF0eS^dMcG*AC1 z_i*8!MwfdSdw@=Axj)U*nCVS5?b2MZbs=<5nuIu<#d#vmLjql#0f~V;qr`O-8w?*6 z(6nq%f3`Lm@lO~ArsLOe%~P(DwtT@X7c9gS$NQQ%6=uMHF??lumUED7nAIPY0_zVV z>I`mr0P%xud)(NOv!MWWpFJga2NXXkIQFO>Qn)V_xn^ zZ>p!iAF`+ag4_&th9g|0VfHWe^j|CmlPPGF%TlhDbBA&0`EEVKn<~Y<#Vy?c_st{O zx(9`)=ep&`oy$Kk_T(eeZcYq>m)}es3E)wx0(aGW&gEG8-s0f7IN`*iG=e$EVOBNn z($7Wc?yPDT!t1{xtN%+#vuA!*HL`ZS+nbi_nJ;B@1&pPTKyS?OrfE>P;f<5g|5c;8 z--cq)*u!lcsOD+p*lHLW7#hX+8!ooWOY_ut8l(_Z2U^V*YZ+FEUm&{3-EhbXiNjjK zr3eEtiu;-DlBF<&0`Sa1zWcA>Ds-DeL4P5nVQAO)Yhx&l5Tr{A;;`VWg0BnyZbX3V zGi@?udLmL9Xc`Zi!Xu{eICn`g%P{Rd(>a0znrAh)np_@+IK=)#g3oZCwn*Z)q|73B zD*kw5b=oZGHHe-xhIvr9SQy1H986~+A7<#=pczcF*cZYE_E)gOdeP4jOcfk2$}>eK zHaS-uG6lynqBQ`6BHqEGgfxex8iodjMuxQvE5zsB5b=}+;LJ3alp$1ohb53#1z#8Z zomd}Yk6Zfo(KHO)eT2VtNcd}E0PvMfH9?H#820g()IPlQH~P+v7f#;xiO>IHPxbfm zp3@%+Kj_U{zxJdn_g@~Ke9?7}FBqHs+xr*Xkrlji#81i&{9%3m#^S5SzY)Ck&PPV= z8&)#?=Q|#X9vc1EwU<2iV#TXV=6tT9ZrJOu%sqd`*!g!JdiTm*(W}1q-s0uIzG_|D zug2fd@QZgg&o1&T{>BsGqIaKgrJZ>jRt=;1YGGNREI7v>tO}F{h(_XXni-c6iM$$3 z8fup&56n!&wruIL)0TPL!t!t}ztYYd=XW2-zFkyxOB(UFVX=an)mrE+4Ft-(Yw!jy zyyMo3XCF63@d8c!B|}OJcNVX1!XF#P{-(@d;jfs3RLELqq~BkHzg4keyT7Zag{Z$( zqy977_)qT?8)@T5fE|}N=LZ6%?xbwjt0^R~je}RtKv~OKU3Y%7S%^DjI658WxpT zSI#LfuMd=!2CJ(ZYJ&A;b4mkMm1R}I(z?3ZU}=3-#iH7(s)jk$!CS{~t7A-2RUDQxlRv!#jR0jhP z<^(F|RF+jQYCwuggBA6)i>l^SRO56G{wiu}D;HJO*OoSv;)RR|rLv~3w5-0Oz8;~V zuB!rp8e{?ySJqY52J5P-D{9Nj0u^<^(lVr@rWVbWN0#%lu>Rl`iODDMdW4rL_@j_$ zzpL~depC}1X6tn|tMK~bZ86RD?X%adnNWUskL#`l%{#N6&-jEZ_-OT-Z&aRE!M+`z zzx>=L?iV0?ZJr>pPCop{J?h)rmxk~<8+ocL9JU_b`e-_N7aDf|M}MA07e&^*asc~( NG>`v3TSJz>{{v7uV(0(> literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.ServiceModel.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.ServiceModel.dll.REMOVED.git-id new file mode 100644 index 0000000000..5ded2cb46d --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.ServiceModel.dll.REMOVED.git-id @@ -0,0 +1 @@ +663b4c41a0bfd22838616557a887173a414d17e3 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.ServiceProcess.dll b/external/binary-reference-assemblies/v4.5/System.ServiceProcess.dll new file mode 100644 index 0000000000000000000000000000000000000000..cbf0e51c58f213d4472c6f61cdaef5a4677ee79e GIT binary patch literal 33792 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

    {oZ-6V9XKb^1n6)d%45-NUu|zmE-W|>in|0Za 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 xwa0I{;bℜ&Hi{CwFpm-M)PD#(dJ&O-lK{jJy;z%|(9i|FUxb|Kf@V{tFPleR2Q* literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Threading.Tasks.Dataflow.dll b/external/binary-reference-assemblies/v4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 0000000000000000000000000000000000000000..3410d7eb705ddee6dd71c9309a3ec1affc1ced36 GIT binary patch literal 41984 zcmeIb34B!5**|{noe(D5WHKboOhS?gAsQe=LO{_X1_(=Jl?1R>fk|?Kk;zP)nJ6f& ziDJ6AuhrICw63j7t!p>YO5JMJYIm&#wY=57U8I|Bt^U5xbI!Tshi&Lxi`M~ z;LTsX@XxPb_fV!Lbky6P4e1{|apP4*kNsnMVBa_D&q&Yu^izNTJ6z zpX>kO#n(-kBp$u>it1N(-`IR@)iG_;e)iMt&&_W?cD|vkr+PbeX5;k6=IPB%N0P;3 zL>%<)HX&+11-Bn7#2bwWw`WqZ#O5?fgtp6it6kGBA_$}Ph}y+#+FEg+4xFh2o*z$k zk}!U#4*$C9T?KjL0sd(;3*5fuA*Gg;-ge0#gyubVv2dZm?W?A6MflFTwe*% z>Jo}+Eg{LJB_w%(W7Y*I{uHL4Wx6XsxqLhD(?G6xm1);FlG#~G@i}D_u4cMBNa4qs z{uDG{oKQiU&#I&NA22<73Wbkl+R1cJ!}ATf;`dDRr%||`={%+n}QTP_vYs_*SZA2g3*sI|Qy9H0o?vtgqu0b*5cLPGs~C@h{H3Cx^=LrX2pncILe$ zyr>VqxQLNq6f?RG=zuVdGSh^fhmr0ckz<6-en|cpytP1;=Gy+h<>ZL9{pJ{=KBnbN z>zU4A+QRf$(Bt}#=kR8x8KxI7y^ZNJOn=YxZKi=-(p=AU3Db2 z{Y>9x8XQX+W-(pD)MC1g>4i+c!t^etk1~CQso|xxwV;NW4_YI>mp2Z5@2R|U#Q!Rf z#*+VG`gf-J`AZOUbUw*1$zKNfPv)-@xw(JHF(BWc-wyg&rk60in&~Z|q_YL79>^!1 zKgqA+m~{w?f>oe_0vYoOgr^jc%;AVJ#3w*&M7m%D=*0zxf!@ya`vsf8J=QxGw9{LR z_)mGqfnMz`2ff})slLWB_jqd{^QPB8Om5y`2$$#01Z~PA{R{JEgZ{f94O&`A;l@Ie zoKu*s(-4abDXqoaZG~qbd|BaHkbJuE(+Iy(NIDM`UWAyuqAws^Qgjw*r06=(hN77q zeJXu6u+ROCskTh6x zjTqy56XEf`9HU0m`|=D!9Pb+o4Shbc_ESu+0<95u`AG9!z9L9I;;ROI#@7m&pZN^5 z+ZUL=1UfuMdt<+EHZ=U%SBtc7`5HjS6wd@5U)+Lt=`k%cm*dwVerhr4oW-=Im`bs- zn7pyRc#&a<%^W_Zm@K^7OY-LwljqkLue7<>6kE`CV{rm8L-iQqc4!`&_Oubw)`%Y! zU-}LjMzWvU(l3gyM(*p2Zv-7*OfgdO&ps;S`r_L`WvO2+z8Cucf)W{MdsIilPwg}8 z|1RQZ_`eUyrT!m+9`7fc-}3zuVX19=F_nFN@k@wtmv_CNd`12-M9fd#JC!MUa%kE= zWu?{S9Zkd8E<8WBUxwVD@P`mKN+w{~EG>y3 zJX-CqFP;SM)RG3!StW;qj^tr#Ia5noS!Ok;Of`~Zc3l|a<0ajYkCu?N@e=A~rvZNR* z0v90udwG|D9v=7-xZ5y}VJym{zH>W9Mfn>DZ4DF!HM&9+lpPXsqp2ZUJ=1THB{AXf zkI;sojlAQ^W`t;sO+U%YM!Axuc(i__pOmEa8~r4r^&9;N{Vhc6H~Q@n$?-)&S{u@j zcn-SMd-M3Ju+8({J^tK~gB}|{=t3`yuMG#J5;5pKFuvY}yuour<7{4aaL|Pg4>pEN zZQhb#vkRRNoDnLsd9mPzphg#mwgrz2(^iIlWcASw@}3!-9}Y?uY#9tLve6^rlHjp6 z+HYJETp122$w$OhursXC72X?yYr+n?6R1M#WG_`JL|(GO8V!1%hZYC@4W)HZNoY~H zN^9{R7TO)sNS3Ht^Ed~MD2J278V!1vLyLoshZYBQh31DNT8npk=x7_s9BMR=bI^!# zNQN~U^j?S@9CQ1u7>Ye=V&%zcvLJyP`7P$q1nF=c3j z4$28{ck%MWXNK!^x-siZ-v}ORqk_^)gY`Bl3!fLBYNPVf>w?p4G_CaZ;9)lU&A2my zO$t%#xhgzMp)16M@R!51%cb9-m+U-30-)OPA{S~6?+!UU3%uD{Qc#H;)EmCh<_!oc z-%(1E&~4$5+31tuq9E2``7SiMdoZ%z54u!Clm?+$6SXG~jp zQSf-3pE$1kys$<)1(p2-TgxY)#YQ57{4|mtq_Y|NQ7eBdtkE7Xl_)A%m;=aa2T|^w ziZ>{zk2#3?k!AC!k8M_HK%9+qF`GyI)X3bJ#XjmWaoHG(bk%XcWW2X(YNv{Rug#DnFV z%Fj`V+F7Ff(>fj3%I9qK80@M2FuR3dB1fd?>|su4zIAng}l`+w5O=qg$Bg2 z6{nZ$bOWNW;>z+1?EJPu@eh+}6i-^c+eT#dg9?$=ODi07KWuqO@n~KCO6YqEQEjfS zc-Vzbtk~m1TPhxLp-jc23hguYRGtxhT=PV3)markRA@jHR4ocWWuu34K2xF5euLHp zPup6k-Zk2vM{A8|v`%lZ>fDeUL_Tv6 z`OHD&v$vH_=`$O#&oq)gbI{LgemwzObN*3(7+>j8XrFP(#3L%l*l1Ply2`P(WPbRx zO1+)mZ>%r9wGzjW{F6Sz!5{ym&om;R?XPsB1C>Q~4%9bsJjFk<<-G7Xo0mW7(qNg5 z+9ur|)CUIpjL%HEE?91-qxH)KTk;2!-UwDHG$6*+6$PtpNg8c5l77)hdN86SWf?T0 zG86^f=&GXIq0R8xJI%>8c~Vzsx%r9li;Ppbvn`LLIYxcT}_qEJF>YXwXZo{9`sRR(E8TMzp6~P&G&A4$GF>Xut8BanY({6i=3KfkxcQ z9YniGjjj-Vb=#_1mE;xTqPovkEws@W>#nL=^)A#^z0rlvsP3}S?RA$|Z+4;UtGC!Fx9XnilWp{H-S?{FF7#A&j|;s}ophn! zRi9#`AJ@HEopGVUNS_N;MNV^}rpR_1<%btVcGzfNT}R|oE@VaeZS=dkZIQDTlKsJr z&a!#bi$4?DsU-Is`Qa}{25q#y^zO)K6xwI}t?v7g&)R75A$ud|+34y+4n!`n(@~qh z$mY>1K_l5FE>^q&@%uv-g&p+QEcEX~ih>T0W?u)LkI~dYH)WxcLvw00Pmbl6s{CY| zcM#3D8p$4~k@T4xofXlDd={>`%r0$yxUuF68?7&0T63jB`;5q;>uavEQRdK3)?96) zCl9^2<{E{d6F%Ez^T=l!NuOP-c+zJMBA+=ZQtw9OL5EkL#Ul?oJo2D}N)ElDMkDFL z>s9X3gASr`!a?Lujif&{B7Z(tuF-yDZv6u_H)x&U{ixptXh0l4c~SV+Hi}KY zdZL5QoP5*7y>>eC^*)8<46Bj!%S(zU*F6rR9g0S>wQ3~2q!HE8{S#l-T7Vv#_=*et za^ij$`oqNkQAm2}RfVLNesA;0OMkQxdFg_8wyD;{li9APR^-y zP;9cV_MbNIYm+N$|7B|-pS`J&^qEG|Xa80_=`#nB&oq)g(}=vZztW8kRK8{BK&vi( z;RCAAE&7+kgz5PHxxpMT|l2ks8Wcf6b zAD-oe@NG-`F zvJqS6AhJv&nZr>!9gnRxVl8uZ4&J{`&eUooXP{&3bfi-w(s_Dqi{iL;fvAm=*{#LG2=?xiw0!nIf{d!nu4(l9) zvXkXcL%$)Uq_p!^mv4vrki2b(;q@|lF4UH8Wjm#XTBlQkI)*g6!!nn9Iqhg|bva6x zi?>9`|5OWJRSVLS(kkga8QutakE(s?E6I(QQ0{v;uP5ys@wO6&$Dogxcx#2yPT}@b zkC>6_nsSk;q`bkYOx0GU4YKW#HqDi}$e2esuV=VdzKGm)uOvIErBSbxElrkDdMvwj zk!IO?4?u${{>7z`{&$B>yewge;q?EOYJ4$idy73o)I`0E95b5DvZv>=Rnq>ctbwT3 zHd@+|#({U+#`Fk7y>brczL@DU7ah$W=~Zc`l#v#`*D-2%pBi5F4=%4?u%C&37=Cuz zr)(h~WSu&B#ZjB4$bfpp4$vIcK9A=ylUl52gwb32d@0M2q(`;z(QKA&fMyv3Z@Urw zJm*Wfd&HMHU$SAe_%X_=kyDKkHz92<+dsMnM`o34@^ZQh4cnBqHJmJe3HM?7SE%%FEBVUMKlv1RyZFI(CpoL072ca4wMR&`08ankKK z%^le%d$>o)`W;RG<7|(l(thc^soZ9W>d|I+%xF4Cve2=AG@G;A0IetGEaRSQJ{q=> zx1YgwbtDV_TcdQ8Ys%fr+^zAw&U7zut9XlbJ`bu#p3!Pt<|X9|cqj6Havv=hYNaOL zLni;b^$+iBvVTb#*&2uM3*;W^a9BH*cT!%p*O2Y)WzOq0Rm-}rP4PP7J>q4%_Dvyu zHCisTN6XFHqscYlKT8Y6dJzzvxHjQx#pdi}T&qotC%UC z!1WZaqj1f|)hcF*XL0=$*L+-yaJ53~FLABLbu6wGxLU;#;zeAo_$KTnT&?0ru^(3} zG`)taReVhR0avT|g`hK#eW2rmuXFexpdSn78T1x)A-~U9%5(zLN&Gh3Bz_-klAzO+ z299aqm<@@@t1M@)f|5{$6w9y*RwsRaM`yr9bo!d zrWZ54is`jXZ(({T({D0;2y}Poai%}wm|t*sALvnauY(o^eOO=IVEXXY@ZF$=;@6;l zafruzoh^EEefXv{GS(+r z#J50O#agcqU;4fQx(x5s`|xevqI{p|5WfUHUTiDy;hVhjLZ8?uo(1g|rxy9d7JTpG z!*{dKfcA=0i+v&^>is@^X}1S-hsc!pM8EI`d}61#5%e>nb(~L}Cw7BgBu*;ziOa;8 zGM~6o+y;6z&VRh(R&jXHE1ncfL7x#Npg$I?Kz}aQfW9D32%6$IA_Y3eNCgA<(vc)5 z8zl%2aQH7w-#`qufhKWt%o51wnIvDtG3R@h1{=j0hBc{CoXzxHrk5HQAm)q4Eudd9 zo(27y@h8x`jDLfEo9V+wpsrE;z^DX$j_LD8Ey6DwGeMt+&5h!B#yo`oY#dvM)`*z1 zF|JI&`)x!YX8JNyk3liDOk2zfNN!}hH;2Mv4AFk3XOAJxyEts*QoNB{E9M6`a=4%A zUZ!F!apx&YGS_nW+OZTiyqwlc;TjItaCnz@s^|_r#4!(X%svk9<8UOOQq?F*X6w}Y)T}&TjY7}tp1;pJ|NZ|*W?qw>9C?>+Rh3SBgVg`I9{}6{C;_yBW z@8j^mIF=blGJ82JN-3tF=`N-ZGTqB`pQ5aDJV`z@p2GV$ypO|1km8LX#rIcJco)-} z2!(4R6hFY>0S-qdQhW>32kR-km#LUc;Rw?frW<8=%JYcd$TTvQ!YxcUGVN!&i|K<* z_c9d?BpG4a!gM3kex|#aKFD-0Q!$O@C7oYExiEcj0fqN6&B07wfH}Poql*u7T(Ky^ z*h1efmtsaM6G4nFA&f0yj49=q?J6;|RblR`#>^DK%v6JsWg=#wTFgL`Fuv4bHaP?{ z$Dx>ihaBu%t(F%(df5CSw|tgjhS3{!B%5YB6Yn zQ=Kz4gz&i>bJ^4ygs+`?DCjMm_8yk`Hiv&8wJ}%9?43FtlK;!`|6*FuKzUU)P+n6w zd`Uj(Y;GVbxsuLlAUjWOAWJ^Ul9Ecx&u*X+$?ydn{(_5M&-!m|n1!^%W!&7m8|Ds? zk@Awt(v2j)*iI!S-7?ai;qfvrH`kq)3`_3t(z#=Xr*g-9r(xwJ6KgvU+I}(4^G&pQ z`ckk2)Wo_j58-j3Ci+1Et#-MWj7RS<&?kxzA3{2OSqN&Pf0Te$B87=wPzG8DDV)cH zn&=B*gzG^~^n(h}2FM!d50wZvqAwZfN!19?Kz}mPFX$`%nV=^6MjgV3gPQ0chax;1 z6lbMaIht6{O$A*HP52rZ)D&&dWQyakPBgH>YeKjk`V7qE%?Pi7K71z(YU1w(906*f zw;5Rf9*OW~^f&{v`o|ECiK7ud8PpV8#WA39F%PsyEC4-4ECe?NYT}Fh#h|AnXA|@M zQqXho_bd#olb0iWxmXGMd01p(o^J>JGORGfE>IKe-gThYi;pAb22c|#VEX>}CQwt{ zg7vp4?!c&EV#ON;y$>UTDIS8=2G+h7!cW0!Lp%*?ioLMf6j+;r{tcFz;_o5}`UdPZ z@l85?Vf=4UQ@kbmK;IUpf#w+7L5qwtKue5ILM8xeigCu7prytDXqj;~Xt{9?Xsz*S z&?e)vpvM^Jg0>jvgDx^IMB2rmrdVQJjBp#MDULNRMR+NwiN9xaIp|8`^PqjkRiK|V zz6km$<4d4t8eaxI*SHq+GUF?tmm4>LUSZq>`g!9P&})pZf!=D|2Ko)-4$w!8J3$}C zUr{i{W5zw8FBtcM{>u0!=!?d;LI2nIF6isVZqR=l4}luy!=Q!c_d!d{N2%1Hrl>L> zN4OfaM)Vp*pef^2(2S7*J=NHT_IP$i&={vvcjwbU2Pr;+F?!xU29GSJ;9s?x)G@+ zi<8a6Koe#YXs_7}nlfjB?f`e1*lQjM`jYuE&{xc(L4S+*Mp5WF2Gr-72kQ4M04?=w zLm$g{7J_c`ECxN@(+0Z3vlR4m;LZ})c$R}+=UEAQz2`X48$Ioy_kw%4*yC9P`j}@O z=o6lggFfk@nd}+QNuWQ4OeRSGog4gC@M+v%3%<_O6Y_^L!D@9;>>oqp!zYC)?zLcL zd1d(@L%%KmE$C|%f2nwA!VfAjCbJTsVy0@tNd~qMA zU!vrXRq@M2wTBE?CMJ4F{|bdy08@e$Vm8OGQu3?Sy+g@$D7g+Lw^qfkRq<;PPYTwe zeUSbW6#oR3--!yJsN_#nde)1FSbn3rcPhKPaVLAbmESh0`xX_yMd6bbK3UVA*9->2^1RQGSI`*)Q+yA^&&-5*x> z@2mTx>i)R8|3KY;sP0dz`;U~q=hXctxF3Nz>_}Yr%~_u8?u%P<#e!raok@#j$*ySJ z67Ad58LLMuPbQKbD_d92%ivE!b@pW}j%iJH_4QbZOf(ZqCRQXfRyKR#wv3fXgOwfK zmdIGCL^M7;!LnFSOe)Jx0m=5h-ri&?V|63s;;dod#M0vJ5nWB0=-shXly$y z>`QCy$;6177N?SZy~uh*rjA?|OW0Yr=}0z6w5>`dd!w79nPiG1HqHMR^n!6y`(;K&_oJ*{DFN&4r73kiaguTc0S$)?0 zXxbuAiL6+}%ugkw-CfaiW+-D-G@Tym=oQf(OJyZ3S&)p!tuC@aXTS!Epa9sE*pf`9HEdSUDS)a5yOpsL;m+F$H;a{>P{nnh)n3RG zvi6mPm0FjI_EI&=6jo}eywkvxq%Nv#UUsYMNJSIrP03V`=Gzg=qlxW0a$PExu~sIW z#@KEpx+SwotV&tkv94&w*6C`f)W*=N=bajj#i>c_G%Nbzap@!-GcUb8(KS+^M%SR8 zFIWJ@>OyyKqd{u~Vb$_Zr3SHK0}o9Hvf!QgIlXy8F5^D!zAnDz2cl@fp&UmbAskOZ$xz$R*#QFXS%exnTzn}O0Cn9 zsjVZ}q+EejgB53Ux{^J#77%k}x1GCn!-o0MuC1t)MKLShE#^??k`ux(9{%PhFA3Bn zWp!9sb)>|izC;&>wxpV#H>WJCd%M8jPo3A*Wucq&CexYTWWwrJgJ_x-FKDPK*wGr} z0X~}Aj=59TMx!$Wr4iPW0z+5Nf@B|Tw-u@yrWVzOl|f$*LRb-P744YSIbd6{D3$D) zZ()SAu!fQ=4W31Z6_N)s=y9w-+2*LV$1v%ndq&oNQL~olw#XMNH?4}MqL@_Uv2>5< zb&Y(j)~0A*Jfqh&YZ9F(UbodP)O|s;H`+zrxhJ|!`)-w$;$bv{v9!Hwi$$x!6eedk zQhpq=eU0A-SEt;^?GD@z@U?}=j7gZij=%`51mR_5r zhGlO{8dsy!#(FGt=AK?er|j9Gi@I~WMeEI^8b@Y`O|euuLm6=grV%oADqNUEySG=$ zBE#Xd*b+@IkRu7NCDf=gG@PZ$ZWg`LW_GyfjMKQ$sh7@bJh3{GdJs!l)I6jxt=V*# zwg*=CvRFC;UyLwGrbqi(x&}eqaN?NXxgJs#B@d*v8 z2i*lMyJ%>Z+1*<$JBM{@6|ZIk9{Yy1hwfOK)_j;7?9M(+X3lC=Ps2EU346Gf6_^$$ z>m|FOl}MW*1WL^2@<7*_+Qj+C`WYg4r^E2c?R&P{(=dICF=I4F^Dsu2Yr`Y3{;_Zp$eoHaQbmzo zlVFA$G)s`=jSeQDHobvCCy?Um#&sg(AS%NdUShjj=xS>-x=)HHBQdOrW^rj8K{a*Y zhFOm(=Ao_gQ?c&NmS}5@rP11`wF>ByJ0jU$?EMfo8Cco25RJh~ku1<@ST^GrL|{4A z-61!;G1{EC&6Ilsns{j-lPy5?A4;aqA%>;MvOkvA9Yv{z#j zBc+JS(iV|k<#n61X;@XOfo>7Th%{CVyng6OZx)++G6H2y3tFJ`%uA)B+nsZpMjn%G zyoSzZY=m99I$@Fqrv>lTu&|ROJP&%91zqPrtyX8>=FQk)r?AqdBHJqTsM#8eZcbo1 z5$nPk&roSP&#^?Z^JJ0CY(d?}txXvrH+z^^aB2SW0Y>M_60rkq-~_YA8p3y_g-5F?7Q~k=l|*O6;RmNwnN*%%Yf} zW$TjGsFtQBqTN_pk_BlDyBHR+EJK5fZ|{H?Q7_1%Beh)}E6j_>)o9DD4kOYGg`2S; z8FpSMyLXf7<}=hCqnqrl)Hs@m%plT?GGU_S4r_N({5n;NG{QLO4qX(y;;)&2&Zos()vT;(h|%@aQ>qAekp zL2~fJ8kiSF5>aYlRr@!(zFrhHr|v!iGnaboLI31hZpEhR#CO28je*u(69rLlVL&jc;l6 zM(l_do`O!47K^RSl4yF%0_?M~5#GSDv~xqaErD$SWPy;R&+6FTiH0~Rghv~$B=E7GGRz8$)fs)?yXqeNbyRy?j0a+ss)G#SC^1Yn+XOpn)+TJR3Rs)^&g zUCvncvQMs9EjH5`%>)=^urz4|XW5j#RRrYU6A5B^F z65Tj+;l?fK)Q|^l8gI~O<**ZvZnL@x*>aSNzw_;&^Yehm;~?$%~>qkhXXtbIEX4!)=LwolVO~W^I3^R@6ET`hjgMi zM*-*fDBY-zs2cekV@^lY+=hb-&6qp){Z;q}X4Ly_L?57Ge3Yphrc=+&ABF0C7j@qJ z(X8`#YxzgBVZ3|mvs#aCrK7x7)98N9WKPHX>#9gTWKeytx&L2WKjI5CRFv#v3j1vr zJ#NeOIjvlAiXo>M?8EuM4sojY;jk-)0~sEA^zZc|t?>U+q3-E^6s1{BT+YyV62>#No&dS#?1NG@ed{q*t9@6!LJKBfG<%UQBXJt*RUhTJcpc>(WPjJ-_*kbJ&178?PmsAu?l3J zrY}tJ9@kEQk!2(?>fHiQ#5dt7JcrdbP#q~OOwh2R06dLBmrg`!EOKfE=+VQq2+mR1g0%L!dZ*^d}GLQ z$Ix>PXA9r0&opG_@&Lj|gYBs;5$U$4imw zRR{fcSw}20!b70d)+Y7(sr{A|-U{RQ?Qr<#9Pn!`s#VU5$D--sTq*?K6dcY#3!>Ks zhcgx=)jNa^s~x={j`Lf*J(9o!i>{1%htMU#uV2$5iC-3RULk8sP*>;2G12(2WV#Hl zHxV73E37_b7PoaS!)aSz)-$*T%i6h;V$sA11wsFfZl^t?qf+OG_Z%rphXFNsb1^p3 zLplBK2EPuT>}}UC_Q?lyG+sGsWE{PRfFrcDP)WHCGO^AW9f3Q-J?Sp_^5MazlWshV z5}pXX{Vt+!=CwS2<-FD}UGllhcRt$LE6iN4nd=*yTNdcR=RKa>!11{Vk16Za!`^0q5XqAzd}bghJfvjIzLF zGce7hq;*J2ye9n1n7P%nOfSMmn&X5w4@jCqVmmkoL?hha4=@e^vSzYbGF^&kJ*<|D zEPx2*wM~VOR^bwrl!__2ltTuHEbzkGc_bpulmaEw5!=d{zX3UtZ^AtfcQQ7xkYY|m z42g6bl~Bw9vac-A1_o1uHSAP!{RkKpN^ZHwEyrQ@1qqotADQzOq^JD4ahGoO5=3zf zbvMb){Wp8yCZwiFSnHt*>}KCne6d2yT~fy>&F~(pssTnNu0i2Hj_V|qt6|$?kWTVI zSs;ou4zhsAiJDgypqQN8lK#&~lhLY5rjx!H@?f{Tq62$5*TBMjaQpuP<vrIX?JH;ELcQ8;k$3;5bk(J_fW9pFw;Ep(yYoM|1&1dhj15jo@pdDDIo_ zg&>anAsoS%jR|}qnF7Z1Vch%h6=DW71@82EfXNVA3pO5)LrEXRBKY`GTM|V~2A@?X z!A}deSXxU~S5W~7HiI^cCVY(22zmt23|u}(lEnN?;OWBBJ<dT;BLof5=ne>Ne(_5xgLT1X9IO2_f5#V83nOW9Y?Tz{WmY?lqsZ1bIiXQZlF4Q*O--2x;_v-(AeIIoGxuhL6OYppS^% z*A2CsRyC)op8XNA@$2toBem6!Tx+;7+v4G4=10V{*Js=L-0>MB zz>m(rK8#@oXXHkXfm8A^5yL3y3mf9?GwDwrb(lqX6C!yUKib19U`Ec{_~nvN|A3bg z(2xHL5C7{?IrN8tatP-@##dwr@0zp~;WyxgVc>w14xx)9IVCeorqe0vDnN5A-EoHO zi+Jd$T?+Zlf{1Bogs^?^T}t9ZPnyeRl!+T7f)7 zmWd4f{YalLSC~Fu~5I9M?E6~FHhFk%M1sZbE2JqxWI?O__B$5LL+shA8 z0uAg{daNRaC^QE7^q)t~6gTE)IM(nI&p^0}Jx9LIR;C`tp!PR{7aBzhMaJJktc`d_ z@;;em>IMOa_yVnghJuI(vfSFu$_Ro~wf)y3Ku>F2LE?fn8XIKBF8I?fxI zCmleU|2r_6HVHMSBBtAR$`fI5@duBn&mPYXmmFcnnS1_JnjvhB7b=E`w*YrFF^7!>ME=jfT2> zBk}xZ#3|)S0)dulS6N4r0N*b0Nc@?0xkuun^dm)AIX)PPjj^9RF%rvZedC1F`p~u- zys}k{6G84s)L8kkArv8u4qP=+vH zt3=puQdvSxc69GGn{f(-vS!&#W> zAiZKBOGP1+3hP(Hth*da<7BA#T zOvaUJ)HCI%M=J{LWO}v1&l$C9szRbqI_>G**u!l>vm5Vp5CIiOsRZ$Jj|qX5$}@kw2_<`B!g< z+IRJmQaJ_%`eSX8ZhY(?PxjJllaY)S?Gb`>Fbi)(^&}G!{WezwZ-}Mvwq*)0qu~p1 zAu0_Ks_&W{SsP8ol6~n2CyMsrHP2L9h(be*o!K~@{uB7K&!U(>^YrGXBO9BJm_7rM z`Gy!{C8n)u$2O4u{;j}BRnXXYnAO!2ZS3vq(P>Y_{56%&LY>)PM>(Oc}w_59SYi)b&rR}lT_JXbFYLD&1{k`x0 zm_12=+vl{FKkkP4&3Zr9+V6VTTJKtWt)1!k#O+i-M1}aAJW2EvzWG`tczPIy*ni$P z{dA=C=;WuA)ki0H_a}_VU?$y{(FP(hEtN`}kzPHL$)+NSRHSW9S7aa^*P|5`WmD~< zJC_ozR(yFkdW(FM%N3PqJ=nJBQ(2@V_zdI2)p&uXaU%4*z%bM>$|BL13j3esrw)j3B`pz%+zuW%&iIWj(6XFH2KaqZ~gc#^Ysn;FFE?yr8hrt_|_lQ@A1#LG~M^5d#|H^dHnU+m5Yy` zyYE{IpT7GKKb#$(^*@Wg{aDHIR~E-USUvQ7L$o}4#m>imyrgU862-Qj+im;oXk)aw zvAJnJTU$g);NT>pDW4+x3BFH+k?t}xiBzA#8ZXba+HK0ZF8U$T=sh%L`MUNteE$Np z*#LS;GTqC{xX>I`SN0q!DCKtf52cxEEZ;SQjN-#>{2D&b;8TXrx%gay&t>><7Uxre z^i+IW@F~HE{m(M19exzHzKiMWCC`==(@#r&0bHflQ88^4+#~o8f(J_@-hB)t9!JC1_w59fwwZ-&#!AAtYD|k%skAk&z^XrOfWgTk{ zO8SmEw(3yb%i#Z{j_>k2kyeCR=VOAcVb-}SoDP47ZbYlXw(#Tlc6`XaVpyq?R@jI% zJPIlR`9_*9ey*bPsE+;%D2^so)C8)EW=MNfQKwDusIHFpor$%)DfGCitJ^ZnkCe6n`#lN%xC4BBh(a|nk#ph2P%Ow z=ZP)LK`o-iHg%Oy%cxbX-UiA63^wGq@RDuC5@p?m9eC0#GF1CZ?jH7sR5 z4Qd;xJtBJ*)Bu9sO+x)jG&j(#qUkH(GB?oYX%|{EEYv2t2NcmvoBFckyA0GG(&%9- zg=RmfET~6BcAdy#^d#zs_LF=u`i9i@tDq8y8!rm=UxgZE3hnUk1+Nthp&W~vP-sy{ zMK%T0F34V?^}}t2g}_e1O@jS`+XaUOKPPw(@QUF>l73R~+k!t4{7~@RA};M>!4ARA zg4+f634TTJh~SHYKNCDDSX0a;%ogkr)CG47?h|}M@CCu23cf3-lyKgV;4Hy4g4=)! z-7aXTZAf3Iwgc}_JAhwNJE^$%l0pS}zom8q|2t5j->QvRf4mQLq<>U5K&q5(@NhPP zGpUsE0-&Qgv$PzX`GPA1*9&eDObcd#3hgRw1b(Kp1o+v~&A@%7ao{th+=ngxv!xw~ z2KSV(&Vdrnb*Q8g__dO1;AiLep{asV!8vL(IG3ng@;dbr z;MM9P;Hz@?pO&(hepSl+-<0+P3(AtXZ&}$kV13zk;Du$^0hb7Nl-&Rw%bu;mG0NDt zR%thuv9){4_>L@9=)N+JY!8;PRqR`Z9!1*m*paf`@YpkgF999?4`9Rk;Wq@23BCig zu3dH2nr2ldEE5`JobTH3Ij-y`)ZsjvVo!92Bd(0|o$ped zZ>mdizUe{{?MA+l@C=7iGpNJIZEA#mTzR6}p)9{R6z4lpeUYm<9LQ16DWCRGFBIJs z_*~f0e4*&YsxO2a?R+m3-5b~+=5-TaEISyUZ4sc}DLWYEwGm%06g?VvC_Kj^K=oA~ z3}a~~*9%2Y;(qg7s;~0VaE^L5@Mw6xM|PrmflIM0NBto1MEGJ`#`Sy3rQiwNVWBO1 zj<|jf#j?t9j(QuiOKr^&dKYCn)NZvXcv&b%RR$Zvz8Y?|HLaFj>Y+~7x|Djf zqNr|}BU9h3@O!AYD{5WJ>OGF;hk*`4aGkU7+d`epw`b*pXJi29HISviW1`scaSuawvPC#qdddegtqm5nU=U;ehb z4yP1Quh(@t6n)@-tFFtXsw;n0*X^N>*YU$EU%O}uWX>bo3$&o}gSt;xBFGk0{;BRN zo7$%?t}F;|a;XkbSKHJJbX8?}c(YB7P#;F4m#TDSyCDmOHCuC+I#_vG2oI2Q?NYC= zYzRBlZuREM$>F#y+pXSFd4Wsqq5YN7ux`ut(BaCK@D@jtzKy&0+0-t2HIL#r;mCH= zF_h_0d+E287l-@Ze1(X#3749fM@_C;6wb*eS1k))<7zfSbE``&^iX?gRn_XSC3E7Z zLvh?aQ9U5}oVc5#I1Z-mGOc-K&_f-s@ltPux7o5i7#-1&;n6%%Z9h=UXgpc#P$TL! z!FhGtJ^4;lI~3pVc#W5OBfP_-84V42s1w!KdG2?-#!I~szTTr54SmX{tZ_SRQ#_-; z6?Ui*bx-i$!n!q4|QI3NBw6VnL53CL;dY8 zwGz}`o8n$@qWTV-vRcziy%E0CqZti-!KS!XuCBk^$tN-Ei!PO}-cp~VZmdq$-|Nag zSABKZp*U)6tN)TM+oyJby3eMpX!B*4;uvzkrYx%+%Cg!^y%9d>(Ts*3uqkVFe8oeZ zto2gY)gSW6cGo}bp*~yxH4k-H{UaXgzWT>J)I;@$ZE6=i8F-@p372}X`nme298Fo3 zeAA|Ot4FFY3*{*GnL}A|-l44i;!swNTuSxk8&TQUIoWg7AJ+b}b9eRE)yHdGN_xT5 zu54;3S)ZetLsy4gN;IFbHTThy(9wE_8c{cgUa$X_TZ$QaQz(UgkEN|b?*o1Gp`>pw zVb1Ast7sZ3YhDNR;dzYHt>rm9gmQdzzi>VP`sk#jEq&%FR6K#vE3E*>N0q|Qr3>UP zg`)YN%N3CF>!f_Ig<0W$5{L*dQcn9MT|l?H9EI+cw1r>sq`iDA{h3lO;j=(~CS?4E z=v(|}g=5v!!UN*5e-WLZ33@HG@{UETE|&ejK&}F^+GQ+C5!i!YbLS5vL1ifs|?W97Z3W^SKt6${nr#lS@1L7KeMU)yE2HCG?BzyjHJf zo&366H9CkL+ZODSYWRey66p|a#L4YB=9GJHv`{S5YKxXfq%d{ZW~rYP4w0B zIlym}F904bzYO>`aF=M_0*r^gDCvX1<28RT=~9K$0l~1~WWgDNO@i|U7YnuvUIAvG)+C(}+y*>eGbFf6IJW?s8@>oUQSHax?#<-K+05O*3G{7X6?O#uR80$jb<_@Q zpnhP4b^xc+&A{pO_rRGn-{;3J>@nbMy1T%SUC*vUKX&vBiu|;Q?gO^b{9-?LIo|}X zroAP8cx{I2r*3)%xPh)J_0uN$6L2#~rWZ7lawKb24LW0&y>;2>?R@MGV!-0!EI z^bqiRy0X$w!}Jbt58YDbM;$H*_~|yfA9y=03i|0TdK-8T-9FJz`)NtFinF}dkV;R} zdq}@5=~pEEBT4^6(r-}@blw)uZ-jF~IPZ}G{s*)Z_(%FAkdzyNM-(peDTT{?TH(C^ zDx4RE^RjSWQH)TOw$e4{M9C1mPH;Ef1kSB=Kk!ca9`H-_Yv2R)e}G@3@`fn(!)t*5 z3`?T)95o>QJ;B%Le5BtL&10hT4lMxZ_te@Dr*i1;ripa2`T@b`1dj<8D9oQCcucvF zR)nVbTA{z$cOivCG2be>Ce&WQ>C(ch=)IcK!Wh-p&Oka|+Ya0hWKII<=WBNto{zk@ zApPUoXC=M4ggL{42L#_znM0*qrc&C4bVSlr#{A9YqF;U?-4r?iJQ{in7^|TPf)iO9 z5nLp=S#VhJfZ($hr<%(@AUIrmA>CXIf6rDq~qs9-szGfnDkKjCC9n!vn zNx)-eT-seVQ;@#dHv@QYO%(W0O*8PB8n)qR%{-)kSaT`xSWPSNeMwv86xXf*$6w3k zSZNExwVd~2kuIz4fX@2bu5(nxFw7ma7U+XN3J@0#!9!K_5YPv&6aho2)}3!d^Jg zhjWg}zzy)TkFG)4*vpkxOQJ0loP1mW{s`K{M|*LOgB2XwMZpNV21wM)s8-*SN`si`G80o`6AN?yW1U`>?_~<3nK%wsfeHeE* z!{NAr^natJNPi#bqaV<6;A_;5Ui2||rVO#M6nG&#Q-)qs0gS>km8d)St^>fr;oJ$m zg5I?89A3{C;^SPs4c`xQ+RNM8unlt*pP5eLFC3h9q~qD7ekrx4Q-*2K>U2y?>eMx4 znEC*9q*LkcHEnAan>fzx&6>J!+S0M?fSxinGm%bRo;LM-@zR~9o-!cHXSb(JJ(JRs zV>7Hy3?!_=@^e75D?2!t&X{^UC$UV6c4xGdp~ct)1I7=a2vh4#>K;C=NE>ErHj{y^ z9(JpiO!jKAt>opU2L_Wm?z40|lvik}cv8=J6}n7~&BznC>4SPI4*k|-I;F1}WLwB( zdP=9Isbs=1*=L@lmB9c9jv34(482RwY)`~=LtK>}v`cJnGh^Pu+Hmdq&fb%HXTN6X`6^uruBWFoI9Sgl(iv($Wgd^Vbq9E+-AE_puB-L!dXhRb z`k=-K{yEdgQ=XTb?M-LmiIiq~t?+u978^sUnAM_Q{$gb07T6inEl+#wl4e<)=`*|; z#?@?3wWYJY<|$-b(wPCvnV!P!*607jH((KYrli$(k(q$A;hZgHk zq|gcT*`7N%s>?I!>>zE|l3Bf{M?%7SJ;Nhj(s03`mKu^YY8KDNOq)MAlu7jUo3w1F zqrYtDvP4pMsP#rJ<>hx~dy|RSDt)Lsy;V=4gBbciZ*r);Y2M{7(UFK{(nflV*|V}M zmPrhn<4D#gjI5UIGPChS`V8WpEA`&-RJz)9Bhi;a+dEcpjO$* zXNH_OGe#k!?SLVtVE0&6A1!t5A1xSDUE4VO?&ul_b;jsiUccKJu1uuj=^aMTGK|hK z`m=f(M->6D={?OoEu+{y%qP37C5VjB$z}EM-F%2@212$BnlXir5zh9M<`pi(i+lQx zbY|-~HrcMg9IPkBoEX9f&l1`|Z-T#*5?&LjEoq87vkhF3$!J5XF{3zxy)~UoTBF#Y z?Gl-jI_7d{Y;GDyC%Rlm4^G4=j*x&k)1W~EAx85AUN!_XD)$CEsmDpPLNFN;krF8s zl8acml&SU6@@yjRjaeKNWP+u%L~nzz&akH8#d2GR${Kp6C$4WnB#QSKaK3HVTHQd* zqIS`?3A{8G+lrE5>AIAeNIEy6weSZ|@$FkM{khzjYeO9KHC@hNO-*eWm#IE$7Sq@2 z+p-ubaax=;(>xu-XjwLyBs5k+OD3*mkI`DR1_mCIYjrISQj1%LV2ToIT?)5j7lQ6e zX@f?8+N9QgEp5=c6uce7#0}A)%$!J=J4u&S0@6FQguMo#D|1O}G(@}mGq@QyjK0%q z5u~kZa51@M5y3lJvIp%DH)HK_iXk5_QF_e8fKCV-dN(K7$Cx(Ya_^)-1NpOoBj+sX ztV#Ucg)k4joer-J{moh?#yyjUy>cSc&S~GsnFiBIuQFj7fqrjIc_|%>P*|TZ2Ga%- z31e*~#a#Gd~R&eY9l&LyVUTof<}`45!=z zGs-cNTzVa%vuB0t^1D%hjuo@UYbS5lu-j>E7F}{ckGe8h9xm6-HNDqhtV-Cnzlr8VG#_Vt0t4I1iPxCstq^E;0&*|*(E-a$@GnkvQMsi5h+YMJpX|aI@ zbhAGlCpeDBRvIslS^l>NDJ@HCeTG|OxDYGVEm}l}f<))hL!63oV8Y6Bm7oIFW$Z%G#)}Ub5Bw{&x(`G+PPk9%~s5rKP zcG8gad-Q%3i{U&Vldz5<#g7}U>Galw&clXGS#ed#1ibA z^dLV+<(68Q80TfN#c^@ont~Ffu%84_~?l z9t*v4m&bae9yOTdv4dO0S+mPy7$FLAxX3+-S!_4ZOZc`ZYu(KZ&%=s6B{+^8MY^Uf z-G-&4fo{+vDPGng-JZhafmQ^yTt^Hy`dcx#yYrDXY@JyYHF1Iy*UAcd>?SLnbq*a1LS*~$P z?bl;l9ix|FmUM0tho6jWMsMe7Pi}0tyH%HVt5wAJ?Wye;R3z22(@RrvJJo?egr_IN zY}1o^A4fWm8*mT1`gVMGs$!E)@AfVdqU>5v;Is$8_$r=YdMZ7)!ubLARO;TKyEK&@ zaE7kE7;57+h|`v9@N5cF+$%#pHVptiDb^WVGp$%cIk1k(BlY}TEm6IP2P5bh}`FK?zy=|pyiMp&AOg(OSwmOmbBVy z6JAP)0iLx)J8!Y@YAGWzVtfe~B70XJZRYWmfYptRDl55MH%D!#fV0#a_d$CsU4~ti zu^C1woFTtx%VIFYQ-X$$jfI%?H0#{$)Z!~Ki|JY~mR$x#W3oEwL)GlZcxUy+EYF6Q zJ2bfJO+B?fTdm1>s65BFfJhzvIEOu>?V9lPwEv(YvsFV)t!qHUu8tiW@6vP22l&IZ+oT-XvBrnBG%n2D|L`zMMxx4hW)n5Km_@(d4#e zJPR@{IVRiXdKTp+-E6D1R9`ml`3m-9n=XMhS?*?wlgacBJgS+P^^!x~nJhmSa)86G zV@}KNv+lN2>*_A)-3cuN0HGVKIft zILB|(d$WCgyyD66Y!llOT3-rh6Nwncgs34WZvq))KQ&4#nu*>7FD1w1cOETS3x;Og zN38)PW^EbTH}ZrzBO1pZ1{Fl)*yo~=yL%=)c;}*nFTe5i&qTg@n0&>muh?Hu95f4x z1M$M*;P7oAib{$@!BQpIX@745uN$A8zG5HiJcx7!G6eA5SXdkw-j77cSKNTFF!=NE zX~Sm)=uUhlAw8M(9^u@F8IFK84Wil1e%L=72VKqhG|K0~4m^~m@QL6|U#IQ(BtZ@0 z1WyOw1m8qT1HCM#+6t8c{Nt<EV2&n{Zm#NVD+q=QLTZ zstGcuviu$Ch3Z_~x&>ym&>ShC881e_GQ1cupN2oz4&FQ*1oC0>dhpo@HZz4oN9X3& zU09@%SrXNk?<{BvxM;@F$pX*}EW``urnXPnXBkBx787hdPVdJJCf zlirv)TkO5Z8RAjAYGmTy;JB9k4aV5LImHC`+K4QxA*v#ks58pBxPuxTQW zoFx_>$ywMTJr8@f=z9tDzCOgNwV-gNA+L6z0WxR z+|k8*r|=avO+O-EozbTKUYnwbFB?;o;g3N zK6-|ywKL9^v+^GQ*y{i66WgCVTk_K~NBi+S#!uocu7zitb$^Zicl!3c_DY#toDR1H z(~WT&*X16%*mb9W(B{2@UOcw)!!|!yYv|U^_~u9dW^ji0|G(e+FYlN$T6c&;8Bb-_ zz6>wGtWAlJwtM|`?ED+}^YE$sxeR{h{Vp9Lj|cA7k7(eY(X)@_hvxi=jvv8z2hZAa z8oh0m+wkK(u#Y0lU>j7y59ilt`=}wi7Wl z8d;+4^hm-@jdSLEBiz7<#lEA#ONI`H>AQ0>fv<>fxDmRQekBN5bnSq4CuZbI; zG!D(&^NpDi=Ky17#6CJ&$UioSe={Skcryeqm@G_LM@Tax`EP|U?43JTYl*eYX`0_W zTW_2af0G+yoWB49Tm~cIEXFeI5fz3F--iFiqy$%^JCJWuQP7-J#IzY)Enh-08~tGt ze)x<6(*VJl(lZ1DfijYg0Ig18&t@wF@xU~>X`Jsr4S)FMgER2ouJp80)HY}arUh15 z_B@P6g1;VyuALa(Uk)8+A>)e5ND-%zg(=bE<^!t)_6|Q4{3L3JLngr^1=GooPeb8! z4%gEWu94_usK8H;+1=hwY+`nIp^C1J6uLUd;oAfsWRY+uvnT*2A7-iS2I$XZ<}}ef zEO?{}QC%*0Nv;NkYEOAOSFccr|DGTc=l8zTgFN9xOuP_E90jI`2#0$Ba%tW;ziGlfge3Z(6fgWNo;U`%rn|Fw{aH! zq7lD#R-~sc!jE-Q5zml}_^wi@JR1EwJvN|42eZBSQ$Xp?FJV6OiQ2iW*6pj|*UB&f zxNrX8)l9s+uc-fY?WXnN*>ByV9=@#ShQRA(3oL)&w^5xRbO9s9>4+oA|K9BC@vHo8 t$z+F?!28F19`2UE00DYj0n;^=f3oDrt2?J!PJON-NXref7n>F>SU``BDa>WCqo z=_dQz_y2hB{ont+_kZ`^Zo~C`lukq$xKE!Z+J`54oU$Nh?n+m=R|^qx%AcPWvJGn1}HnS^VTSVJaHKD6V?7fb5TmyZ77>uqzVR%X?9 zA9Amz?24yvAMcXazqaD0whO*!EjsD*p8B!W*|d879?##`-?`W7uYEOr`HX)Zzh&OB zvbSfxFi=~v{ekCqeg4{}qQiAtD<63H@*Pif|Gxbx^~HN}?Mcmv>(tyobM8&re{Swcz zaY%bCLk;>(uJPH#XulP&_0TD#F?y(Y`P#Y~Jaa+ZQ3$$9)4g077rGpEbUz|8{h&)S`} zo?d|&S#%)l7;k{>SMJ|lS3ZpgCl6_EZ$4Tz34gO}Y7Wx5G+WHee5$jlOrhCsQ@qH0 zy4j|(1@)j!_Hi`Mi?z?R2hGEuEL(7Pw5{I)SRdTLnHQ z@Ku4o1G?x7VD!4Hs3>DwK{C~spmMIrc({O%6n=5dzCjd^1z%>Hb2~-5C0&fx+0sd{u?E<$7&I2O-C~#ZBQ^4~J zUj$Yaz9BdgMob1tm^+h!xpWOMpY8+}&?~?qIsm+oJ_5@058%a=;gT@!E&*On1Hk#z zmL^ddO-`3+AsqrLE0X+iO z(?>}A=riC(fhK*0^evQI=%y`n9`Ih84t$7K03W9{g+7`fQpSNFep@*hv@0#MGA}gM8+ixOwTUP=1Nh@?V#2; zs165ZIjDOb)RPWspMyH&piVfbjGSa!WCvB|pgayrbx^lEsO=7FkAphkppH1G;|}VS zO~FxDH|QNdmWbR##eBtGr>02~Lgf3kO)xQY=*uuF@^$ z6ff(sSkQ#X$*v1p%m^x4YKD3>phgRG=76Rr917`%#X6jl7H04Ygf-QAAfyB%BHd`9 z89vMAha!gR@3N@2C#GN9Q>$t$MzxrUR5HIY?A27?N)~C>H?kmAnkEZ)wMbpb!c}pi zLG>BBsdrj!*Lr-08nT9vw5VoS(L7eTL)AwRx3x0wP%54pW~%-mGZI2{N!tp`3OPBA zx~cX!SsvyK8>$s?avPXwDt`R%XlqiuUe#(?6PH)(hNdRWu*X2G`BAd1MzNH5ju=lE znZi{K=CgDo;$g-n)yK>f1w-kEA!lH>MVmfY8n=J2Af>ssadzz(8ZaTnhGf6n8Cum~ zhu&?r)#^qdMSnrt{6Q7NYpkubt$Yx>jq}Mat4cAsP9kd(Kc27AU}kJqr4*VXEK4da zSy+or5bM^BjYHUEy8?5aX~GwcA!WVRO@!sNQgX&#WYQ|7-FMnh8;DMG(@y?H!)KW8_5H`F4&1d zB;ur^rDTh>Au0AG%3Q_5s7#BOS+4~BVMpgw*L!&T(DI;_$QLWLhG|N~gV>QOLS*Ar zCIl!3u}bwO^J4uG4q9q}xkdEWLy4)ZX?k~~Vpyu8X_00ljP;_U8fir4M8S3;@u?Y0 zG-0htRWsZkYwP&X~rXWD9rAbdcZ)D$&U^tq*aRdiV-#S~k~ z&9&eIBi*HUF5@G+xW2`R#VDl_A< z>O?(p-Vpl9^(5Mn%=I7)V=kvy#k+zTYc0`n@hXzFlbA`W$z?aOo5IYr;)*uyR53${ zLk@>vmIeZE2DG?2%{-HE!~bS*YNKHv_7 zVQC4hEC*KsU!mTYhO)E;)|>DE_l8IKsY7)77_oW(H?i4Gt)icXvfVlE&c?_X(ck?; z+wQ@Zp26oTW+NYs#*pLV9N4=fHpSgIZm{qd8q%_JFvlKCSk@@!nTmsqp?dio*tRQS zn+Lt=!(8HF(?T2>BNo1#u&_alJQK6s4;%Ta;HD-}Ui@*J8)(f~vHFn!=7{G^yb-M;zmxz9&<-ZYD##aVgsAAOd zxonB?7s1NNWhEw7TF%QxVSh#JzE3rCc$4CqKm zNa?dk>fMDe7bv5b@L>Qxu}K4fZt_%?@OSL|qmY49eSb>Z?7w?P_m%e_-Ma9d>4($y zv!BV++t*$5$XgGx8TagbV@bi369Y^3Oe*Q0@P6rmzqZfx&)r`1my+lEf04H-9-?!wjsfG9pEZJg80G~a%s91<_ zx*yPka_pUnjQ22xf_G4OHyp-WIhyXGqFKJ#a*JZ9df1djCM9fj=?1>X%5_mT|9}gB zMEDM7V*G0^cS*(k1z?VMQ6>w{#n)QI-J6yvK1Z75qFlFo9^Pqo_P9e~FTVV8!NK@a z1R%Oxp15MBtWo%R`hU9dK+Y2rPKOQ_zEBUF)d1~0rht&ksLuhN6d zdVDOzUywC-@zZ)&&Z{?XXqj5};ntkJOWHP1Ix_xBqI>M`>v-)?^0drTsaNbfJR<(O svPRPy6g5cV0GzSdIX9iYgyf~EnZFGO#qsat_EvnGLjIrkf7Jv30eWKgX#fBK literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.ApplicationServices.dll b/external/binary-reference-assemblies/v4.5/System.Web.ApplicationServices.dll new file mode 100644 index 0000000000000000000000000000000000000000..e301dec6c5555e8aaae619bb88ed7c0950c2f778 GIT binary patch literal 21504 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 U|F+=6Xa5#u{7=^Zwk`1g0mE2+sQ>@~ literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.DynamicData.dll b/external/binary-reference-assemblies/v4.5/System.Web.DynamicData.dll new file mode 100644 index 0000000000000000000000000000000000000000..8780b8979c69c160d62f31e7854b6281bf17af9c GIT binary patch literal 45056 zcmeHw3w%`7wf8!YpOHV93n>aA35YrWc}wA`xKda0#eZLQybt-bd-XEH(W{l4DT z-|v2-^UwOPwf5ue_ul8sVb!@;i3}mc2z)>MP>Ao~FMaA5KN`AW_KbhrBOY--SMeQV z<#QD++d^@FXDqrk7U=M|1tO7X!oNA_k99@-p@_d>O|!ov+8(UR&CQvlqF&o5#7e_V zNoYWr6(bFo5cff?On*HL*^lo4zLYyZ{=i20rjPzBgkgor5OtRdF^2!Q|0*hji3bty znMxk^&wvo4hBbVQ(k}$A!1}nrS6EDlszh*S0(`_h0N9+@3dSG55Uo|QU^v>Q@-P53 zmB$14IzDwmEOF5PmN-D=iVx+@6q(|AKZBhB=(iT^{KDP~w|{;A;wx6KZTQjiAFQp-+5M%!OPj~;y{Y-c&;K*n zI_Bt>-@N8|_|K=mRyXdpi$43gjL+qcoO9*=qF+qzc;t;$SAN}7yzc6r<;Kz-H%~u$ z`!$I-C%^V*(QxY(chw(kyY9(lTei+RbKJ~57d?E>#Y>t$wZxz{fDhH%_Ssd{RkhW% zH48|SDZ;?DpAur?MM6A@zt1m%+?k$)|Z)j@3-#ft< zRe&!EM>mr*KB$f{XKm`ua2JBSZ`2C>rPM?C&cydQeBXiM9DGMZJ_X+@d}kpb*~{>K z5Z@Bmv+)IoZRubUa=sz5qJ(`GWV+7 zEOD)e{I4JL!AOs|CGYZ_a&aK<7kTAkq?d3S;~HR=m@<~~a8drtIbLx^K7~D2KpIg< zSj<>i*ie`yE-1VdcoT4fc&+e6p+~rjF3<6Z62=;!S2Pq+4nG6T61NmJ6ne$GtjQ}T z{Zz&~imyU$!{ZJiZ(kmF`#7&S#K;nL055J#Rt$_4J;H(CVT+>;Dom(cv0cxdB;Rb{qc!ZVsEqj zA>$U5n^$yBrm%M~euwcDV4?WjDVG~w@r_eH7+EepKZVN8S4nZcSxNp`(~wylD#zzB&) znVk#vmgp2eVYVHt(&!XFWp)|I5*M#AyA^DKu~WRo>`|~r<06rV;>;I^*tSPZF!rG= zehDVTm&6=qe^6{bvz!cRJDu4$#m-mD8!vMPw4_`Z8KaDGl5@SARm*~nQ0EX^TVhONt40r~bEiupj!df*>( z&IJ~XB&=dwFp^SP%Gko#&UoR-0Q7rUzHQ_d$Uhx<0kCKk`Ojx;9u!=+V zalSr^`ro~*d4zqQ9d$7@H}SO`g(gpYFzOOub?)WRug$#%NIqF&OYW_}a4yPR#B+B5 zcjflNdPgqhMCSj#TuSQ&#t-0Wi18lMEcB54Y0sTNne&KeKib}H(AS8kJoiEWJo~)C zD05|wrt2C%n)1AGG{q2L+%x(y$p1Y03E-2gd6n@d_YP>X$B^fQF_f-MOZqHi{YJ*b zm_ArvtEGdVFIo+bN|piZsLZm5%l0Teg*@#TM�N0*F0gDnOMQi! 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 NxlQ=3itjO&K2_Yj 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∨8*N(+n3$=sBh$jD+D$_v!^w&QDJXzj%2jZUeqb^9S0 z@zr1`&?Upb=pgT8PMTbg&ppt?H5r{^HN&X~`p92Trb?e(3IYi;G<^I24{hIl?{x8;@`{}EG zbIHOV)jnfBXgv_E-MsOHJ^QY)>Ms7uV<%28fAjtm?N0pa{A)C_P@JlXXe@;y}x4Z zE7zWp_-*A)oxl0>IY%E8S#js%)-mrs9`v1gJN_(Jd3Q3N&EztD`DjNbi`Pf$YYA#H zsQw4HM<>m#kK(i=Do+TxXqJx}w_AyN{_95QB2(P)uVxEj)7X02*RQQ#-PsfE-q3-+ z3TBYcO3%aJ8>1S7D#kyE>(Bd$M$!h2Z26e%`W~E+92;Fbh;IYqI0jnW&@jKbfv@I; za%)qlp`o>5zA$ut%lww6=EkN*mJ~jx@at{qi?=mc3mWDx=xbfDa6zNBU_n!CVPC>p z*w(Z#zOXToXl|I_8*6RpZJXcFm}qTiX=}3DTI0=a^IKaQt%VEQ;_=3&zQ*Rp7OS_n zr3s(rG@_oE)zF)0YHEtNSQeVn*t%eTqHRIrLMw*6g)yr)(U6EWG%T3kH@_vZa6tk! za6|g~5-n{DtweJo*3@D(H^-aW7RH-fnwuIHSPQMDrrw3k^IIF6n-VcA-qzRB*1E8% zwXbbKd|}^$<^?ScR!iH0mUwHkHNSCTTVHca!s=^o?VTT+-`hC9c|j}@Z)$Cs-`m#` zZ)#ZB(9)8K;SbdC;^h_gX@idYIIB@ z*DcN~A$cQ|GlKti-WeOJnh#zQYDwant9@o-O_~Pb;~e%h)NRw>TXw zV0Y@EBZot%?6Op<8z-+M4?>nzub+45qd62^;x6_->HlsPz@O{EKP*&#gz&#x-~Xq- G^nU^4UeXZ& literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.Http.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Web.Http.dll.REMOVED.git-id new file mode 100644 index 0000000000..8b2699d138 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Web.Http.dll.REMOVED.git-id @@ -0,0 +1 @@ +c2bc972d089675b3c37736977270cebbab621cb0 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Web.Mvc.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Web.Mvc.dll.REMOVED.git-id new file mode 100644 index 0000000000..3d8c4b9be5 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Web.Mvc.dll.REMOVED.git-id @@ -0,0 +1 @@ +67c7e7c20cac4ff3d61baedd4f79584675d0813f \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Web.Razor.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Web.Razor.dll.REMOVED.git-id new file mode 100644 index 0000000000..ad6abb094a --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Web.Razor.dll.REMOVED.git-id @@ -0,0 +1 @@ +dae7afce08242600b8a4ee6f7df7a866676f08fc \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Web.Routing.dll b/external/binary-reference-assemblies/v4.5/System.Web.Routing.dll new file mode 100644 index 0000000000000000000000000000000000000000..4fe36be4c5ebb0a66e21ba5cecc10fb104cfc7c7 GIT binary patch literal 11264 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 DZwHzt literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.Services.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Web.Services.dll.REMOVED.git-id new file mode 100644 index 0000000000..18977f0642 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Web.Services.dll.REMOVED.git-id @@ -0,0 +1 @@ +583433a9300959ee82799ab7878cd0c64e309607 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Web.WebPages.Deployment.dll b/external/binary-reference-assemblies/v4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 0000000000000000000000000000000000000000..09a43d1d312434d8287f8c9179f451f2b39afe58 GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.WebPages.Razor.dll b/external/binary-reference-assemblies/v4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 0000000000000000000000000000000000000000..859902a234a9189bc164249b11da2efd734392ab GIT binary patch literal 22016 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 LzVq+@KMed|Kv&u4 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Web.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Web.dll.REMOVED.git-id new file mode 100644 index 0000000000..4582b28c99 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Web.dll.REMOVED.git-id @@ -0,0 +1 @@ +72f0d92cd3b2d0090d61223427be0b409a930193 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Windows.Forms.DataVisualization.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Windows.Forms.DataVisualization.dll.REMOVED.git-id new file mode 100644 index 0000000000..070984aee3 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Windows.Forms.DataVisualization.dll.REMOVED.git-id @@ -0,0 +1 @@ +a5333d3c6bd238eb56abe324ffeecef5b82ca1a8 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Windows.Forms.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Windows.Forms.dll.REMOVED.git-id new file mode 100644 index 0000000000..d2b9752694 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Windows.Forms.dll.REMOVED.git-id @@ -0,0 +1 @@ +7db30cf308ffe9c82dfce0250507a5630e3bde12 \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.Windows.dll b/external/binary-reference-assemblies/v4.5/System.Windows.dll new file mode 100644 index 0000000000000000000000000000000000000000..6681b7b9bb341a2fef45977bef6aaea73a917a09 GIT binary patch literal 10240 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

    w4yh& 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
  • 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

    ddZT>On0M~|b*Kikt$xj&$A7eO zt>ZY@lqxlcZ`v60-UM2~Hi2t5`!(1;&&!!I5B2Cgay$+<+?)A^?*silRM-2^p5}B? z-UIUcF!9~MH~liNK+`&p>w}%9cs)2$G;e(EaT=mChySsE_TI%z&bzOJDtsM(yMZ{f zM$+4CH}FdkjNwTdgZ1XX6QY41a@KR~g9d)}y4C2dH9p}_e|)Xcp1U{K;5(!)ce;ar zHg~OwNHxAO&W(|{W8?go;KxyXJY8`|Euy9ch^y3U6AsS0Gc!2dYS>aU_2(#O>$`t4 z)^PQ4ejMY$#qt>>s!U8yI$(TO-~HiHON<|PRRh#NI%di7`bQIuYPDuxGy0mbTunK& z@co&|2I_r(rau03qk6Kw`={8^C>(E8E0gSP21BY=YBNVs_P^loeG1=yE?1zX|J0{B zuo}nup`^lxlZ`MwON;|tAFmxnWA*X+IKHd(v-R=G#*rC(KRt$F^3O@Ied7$aRk29hxPUPa~#*YDy%d4oRZI- zXp9Ttv^r+N^D20r$+JqHWfGlWInIgDkKl$S!5`JnP3XJkvs$NfPXW`2xci91nBM*0 z`~v`2jG|I z3Nb;(`HGu%RdfK~^jEO(`a13^0fJ^i@@bTk%t9fvfUhuO4EYrP$FeXbY7S3L3K#jB z0~OAg3;Wc}Q z#?N5aD*>72z>!b8u^I~53q%t((`oE^B4E#cqy!2-GNu4q?ahk2_GV8wzr}zD)*-7N z^CUk8QA!qj2zHocI}iq9hlfv-)rKt$8lfkcCFC7vJUpT8^}}Q2qTvG+r|kNHW;uMe z-Z+9T;%ah{Rh1M(2no}BQ$~>~tkw*2_2-blH$=I$JdKuZ2uxuo8~9`dGbJ##A@?P) z$9xLlr+kJ5HApR@FpVMzP-GGQqZS3?hR1=TwYtI3{+ailG2dtKnoLLL-2dIOt1x8z->@yUtlD(X_PVgBku_jL0 z{+t)(FI$(F)z){JL1za05fMmT3N$bS&T%YNOP`;G%@6D;FT9XM@961SFSa58!>FRo z8p=+l$e5hQ3AAS-^mC5%qZ3{@q6qmjjUxdue50d~oK8zIOwi?X9Gog72XV@f!aucd zZb?6z;ZHToy=Td(P4RcrNPCLGR{-7s=_$bS6u}?Xs#Dz4l(|sTN$_!?Qmr+OL}Nny9oHHn z1z$W`wep}Ofc4=yarha{XLuG9jj0y;pwvI*zgt#vF5)27678^_r$VA-T+fzJ%w5GM zkTf`JBO^+)8q$;_7~Bj30R1EatK#%;4<3gL;G`!|r*w3q-;vS5&b+;|Ez z+x>}+UoC0RTR(#%FSy#+3%rWq;}~)?Onf-`f^Eo?GLx|IK}!60p8T-F9(VY|2m`~E`fx| zWqdZn5;RpRnW&WQd3H6XhS?$Z8ta@9U@(P?xc-g#?`JFSnXDB{q1gYp;!fVgZ`(Io zZTuQzZ;MZ}HehJmbnbeEaei^(mAQqN<}bkVLfdb}|5)Kq-1^Zti@0 zb+b7KOPq5@ArB|<57mQV_OG7y(=rq8a2r+e4@Sn>^}%54Yv<1=`t`D8ZnJ~;b0@vE z!Q5(Z^ZflzckRLX3-j}r&OdTR iB|_=nKJOa8W@!IVKi{r6u4v<*|3jVN|DV@E6!^cvX96t% literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Xml.Linq.dll b/external/binary-reference-assemblies/v4.5/System.Xml.Linq.dll new file mode 100644 index 0000000000000000000000000000000000000000..ecdb40110ace1e9a0e1a4ae9a048afc91d8fab3a GIT binary patch literal 48128 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 literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Xml.Serialization.dll b/external/binary-reference-assemblies/v4.5/System.Xml.Serialization.dll new file mode 100644 index 0000000000000000000000000000000000000000..d0051ac1070a580ffe7f7f32f06f0c34a846ba24 GIT binary patch literal 9728 zcmeHNZEPGz8Gg@Sbw0dxVmnRRe5~u{6WH3mxQUfE_$yAFnroNd$$805WZaDjF&%Z4^S=R1u{7Xi-3Q$mw5b~=-;PjA!T3T^Iq8H~} zZhXbJ^K#?BsAkJ?%N()Pm>f|J!*t{@ldXgyYlhsjJ1ED@C{t=`=HBI2-M@usr>`vU zL071(ah|W5=uRZNs?T&HF5^Cco3oPW3sExcl_MhpZ@HT zgU_tmy8Oopvvu!pubd2gIC$pdcp&*u`>B8YVBhbas;)Y+<4>~Y)oNj+; z^8NSAf8P4qiL1x|&gz$a!GGlZx~|~%E}zSu_uKe-rCISe`&-&M+e*@b^%yKo52HN@ zJE{;5I+kXP*gVHi=BE3t>HZ*HLL8%qnzr8G*Msm^kVhLJcj;!BXU2u@sJ(3|(Frd6 z)90r}Y1`GLb+j5G=aC7yUAe!d$5dlg+Rjz<>GEiK6+K%16!3=v-xBy&fwxrfbXnjg zfvUiV1%6ZDxr)mbRrD7is&_5GEs^ro5{RSiTpCO*5V%a>T7hi>y9EXWJ}8g@_oQqQ zKPvDm0>3BllE6O;toHGmZx{Fpf!zWl0xf}$2>iOh?+g5ez&{A|m5CYzwhHVQ7!jBf zcv9eV0xt@DL*VZPUKO~soY%7%xPV?L|7`sdfsF#!3TzSBF0fNzpTIr9I~qPE;wo@M zgC8Z zq?LKnJ+34&QV(ibh^Q>Y{guf|?w@Jt@w{@U^P~%T(xp7sn+7OAeT0%%D!&X0foI>}%P$D=P%Fh-KR5uoK!Ij96OSDWVzF?1ZWZokUbKOQ=Ib zEL<#0u!q^&h`}sRiROp4IZix3rQfu*iTtD>izF<~N#>^pm~E>gn4Lp=)o@sI0(-Lh zZqw2=k47+QJ1myfro~W?>Zk>2f@DFeX0eE4TFD@@#y9I_cBWfP9L%pUIE6Cp(YM%07SdE4Jp|&Z>A)ZcdU0tfp z^LRyb(zE6IEoL*rQ5}rzf=UaN>vL+$RrX@1$PSs-SP@RHDd12{7j$-q52B06?df!& zJP^|r||?%{;P++xaJHmsu-?vD!Z?`(E-pl}Unyh0go>S4ob zLU%fKO|=WPu2UB(Tn{f)bepcb7pnSK!wYm;mYVFt#E{Kti{#9x*geiHON+wW zdFD*2khbV7h5??R*l8q-rhD{vVL;n)l}{isJCdHGyrG&Ig?L*2s8ymm-jGqwfm_CofYCT^9a5ZPh#A-o$haA) zkbAwX-N+Kdj~A7(-B1yZPy*oyGRxEld6+E7Hi}!&L=YwrW7NC`!dhe+gxVqvl_Zc& zCa-!GDGv4~CiFH5#%Z>k@p9e(F8YCfYN2+-TWABMR@{=8lV_`Kfi9gtt&qdWx&e=F z1C2JiM^xa)whGL!t!k&#m-~>mk#=F*#Yr+jg3~nUKIF@-jOXYESv}jj`;dzX`n>hJ zsG}cp7;z0x+yQM8n=+He5aTsAgN+~0W60AEtF=ICg%m|P=a>3!K$Nsl#>PF2XDPHD z8>WabUmWtxFb#vNAJ1>Yy+JT-0n0X|sz_HUb*>oGL9n-B0d9?;uv1iY`Yhpm;iGU? zXh`%^G4A=}?s|-jlJ-7RoO=*20}M9T;EjAVT1CglP2fA3ad8DNDh__}qReiBk3H!z z>lc2e;T5P@FW&@iPkY>g=*_3CY({z!uR=lAKjY$ps%!SXl`xBM?|nIs}vvoYkf3NQSN4un5x7R z_(qS@R9}S;jakn117(YbEH%E%G`37cSe$K5GAGbmJ}XZ=$|2 A+yDRo literal 0 HcmV?d00001 diff --git a/external/binary-reference-assemblies/v4.5/System.Xml.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.Xml.dll.REMOVED.git-id new file mode 100644 index 0000000000..9cf924990d --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.Xml.dll.REMOVED.git-id @@ -0,0 +1 @@ +d52fe94ca1c001624bdd995dc2ec00bc7362be9d \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/System.dll.REMOVED.git-id b/external/binary-reference-assemblies/v4.5/System.dll.REMOVED.git-id new file mode 100644 index 0000000000..8315034fd6 --- /dev/null +++ b/external/binary-reference-assemblies/v4.5/System.dll.REMOVED.git-id @@ -0,0 +1 @@ +2189052cb07e2f93e56710c23fa473df3aff9adc \ No newline at end of file diff --git a/external/binary-reference-assemblies/v4.5/SystemWebTestShim.dll b/external/binary-reference-assemblies/v4.5/SystemWebTestShim.dll new file mode 100644 index 0000000000000000000000000000000000000000..b89fcd85083c9a55e2a429cdf1917a598e45104f GIT binary patch literal 10752 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 printUsage = true }, - { "out", v => outputFile = v } + { "out", v => outputFile = v }, + { "assembly", v =>tableToDump = MetadataTableIndex.Assembly }, + { "assemblyref", v =>tableToDump = MetadataTableIndex.AssemblyRef }, + { "moduleref", v =>tableToDump = MetadataTableIndex.ModuleRef }, }; args = p.Parse (args).ToArray (); if (printUsage) { @@ -117,6 +121,22 @@ namespace Ildasm PrintUsage(); return 1; } + if (tableToDump.HasValue) + { + var tableDumper = new TableDumper(inputFile); + if (outputFile != null) + { + using (StreamWriter sw = new StreamWriter(outputFile, false)) + { + tableDumper.DumpTable(sw, tableToDump.Value); + } + } + else + { + tableDumper.DumpTable(Console.Out, tableToDump.Value); + } + return 0; + } var disassembler = new Disassembler(inputFile, outputFile, compatLevel, flags); if (outputFile != null) { diff --git a/external/ikdasm/TableDumper.cs b/external/ikdasm/TableDumper.cs new file mode 100644 index 0000000000..0599ed3236 --- /dev/null +++ b/external/ikdasm/TableDumper.cs @@ -0,0 +1,142 @@ +// +// Copyright (C) 2011 Xamarin Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using IKVM.Reflection; + +namespace Ildasm +{ + enum MetadataTableIndex { + ModuleRef = 0x1a, + Assembly = 0x20, + AssemblyRef = 0x23, + } + + class TableDumper + { + Universe universe; + Assembly assembly; + Module module; + + public TableDumper (string inputFile) { + universe = new Universe (UniverseOptions.None); + + var raw = universe.OpenRawModule (System.IO.File.OpenRead (inputFile), System.IO.Path.GetTempPath () + "/Dummy"); + if (raw.IsManifestModule) + { + assembly = universe.LoadAssembly (raw); + module = assembly.ManifestModule; + } + else + { + var ab = universe.DefineDynamicAssembly (new AssemblyName (""), IKVM.Reflection.Emit.AssemblyBuilderAccess.ReflectionOnly); + assembly = ab; + module = ab.__AddModule (raw); + } + } + + public void DumpTable (TextWriter w, MetadataTableIndex tableIndex) { + switch (tableIndex) { + case MetadataTableIndex.Assembly: + DumpAssemblyTable (w); + break; + case MetadataTableIndex.AssemblyRef: + DumpAssemblyRefTable (w); + break; + case MetadataTableIndex.ModuleRef: + DumpModuleRefTable (w); + break; + default: + throw new NotImplementedException (); + } + } + + void HexDump (TextWriter w, byte[] bytes, int len) { + for (int i = 0; i < len; ++i) { + if ((i % 16) == 0) + w.Write (String.Format ("\n0x{0:x08}: ", i)); + w.Write (String.Format ("{0:X02} ", bytes [i])); + } + } + + void DumpAssemblyTable (TextWriter w) { + var t = module.AssemblyTable; + w.WriteLine ("Assembly Table"); + foreach (var r in t.records) { + w.WriteLine (String.Format ("Name: {0}", module.GetString (r.Name))); + w.WriteLine (String.Format ("Hash Algoritm: 0x{0:x08}", r.HashAlgId)); + w.WriteLine (String.Format ("Version: {0}.{1}.{2}.{3}", r.MajorVersion, r.MinorVersion, r.BuildNumber, r.RevisionNumber)); + w.WriteLine (String.Format ("Flags: 0x{0:x08}", r.Flags)); + w.WriteLine (String.Format ("PublicKey: BlobPtr (0x{0:x08})", r.PublicKey)); + + var blob = module.GetBlob (r.PublicKey); + if (blob.Length == 0) { + w.WriteLine ("\tZero sized public key"); + } else { + w.Write ("\tDump:"); + byte[] bytes = blob.ReadBytes (blob.Length); + HexDump (w, bytes, bytes.Length); + w.WriteLine (); + } + w.WriteLine (String.Format ("Culture: {0}", module.GetString (r.Culture))); + w.WriteLine (); + } + } + + void DumpAssemblyRefTable (TextWriter w) { + var t = module.AssemblyRef; + w.WriteLine ("AssemblyRef Table"); + int rowIndex = 1; + foreach (var r in t.records) { + w.WriteLine (String.Format ("{0}: Version={1}.{2}.{3}.{4}", rowIndex, r.MajorVersion, r.MinorVersion, r.BuildNumber, r.RevisionNumber)); + w.WriteLine (String.Format ("\tName={0}", module.GetString (r.Name))); + w.WriteLine (String.Format ("\tFlags=0x{0:x08}", r.Flags)); + var blob = module.GetBlob (r.PublicKeyOrToken); + if (blob.Length == 0) { + w.WriteLine ("\tZero sized public key"); + } else { + w.Write ("\tPublic Key:"); + byte[] bytes = blob.ReadBytes (blob.Length); + HexDump (w, bytes, bytes.Length); + w.WriteLine (); + } + w.WriteLine (); + rowIndex ++; + } + } + + void DumpModuleRefTable (TextWriter w) { + var t = module.ModuleRef; + w.WriteLine ("ModuleRef Table (1.." + t.RowCount + ")"); + int rowIndex = 1; + foreach (var r in t.records) { + w.WriteLine (String.Format ("{0}: {1}", rowIndex, module.GetString (r))); + rowIndex ++; + } + } + } +} diff --git a/external/referencesource/README.md b/external/referencesource/README.md index 3b2fccf802..5ca7180514 100644 --- a/external/referencesource/README.md +++ b/external/referencesource/README.md @@ -5,4 +5,6 @@ that represent a subset of the .NET Framework. This subset contains similar fun developed in [.NET Core](https://github.com/dotnet/corefx). We intend to consult the referencesource repository as we develop .NET Core. It is also for the community to leverage to enable more scenarios for .NET developers. -Please note that the referencesource repository is read-only. Questions and pull requests should be done through [.NET Core](https://github.com/dotnet/corefx). +**Please note that the referencesource repository is read-only**. [See this blog post](http://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx) for the rationale. + +Questions, bugs, and pull requests should be done through [.NET Core](https://github.com/dotnet/corefx). diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs index 11bca18653..e68da03ac2 100644 --- a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogCategory.cs @@ -4,8 +4,8 @@ namespace System.ServiceModel.Diagnostics { - // - + // FUTURE: This class is kept so that 4.0 Extended SKU runs fine on 4.5 Client. Will remove this in the future. + // Order is important here. The order must match the order of strings in ..\EventLog\EventLog.mc [Obsolete("This has been replaced by System.Runtime.Diagnostics.EventLogCategory")] enum EventLogCategory : ushort { @@ -25,4 +25,4 @@ namespace System.ServiceModel.Diagnostics ListenerAdapter } -} +} \ No newline at end of file diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs index 3fe96971ff..0652dfe0c7 100644 --- a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/EventLogEventId.cs @@ -4,8 +4,8 @@ namespace System.ServiceModel.Diagnostics { - // - + // FUTURE: This class is kept so that 4.0 Extended SKU runs fine on 4.5 Client. Will remove this in the future. + // Order is important here. The order must match the order of strings in ..\EventLog\EventLog.mc [Obsolete("This has been replaced by System.Runtime.Diagnostics.EventLogEventId")] enum EventLogEventId : uint { diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs index bbcf4395c8..1da0a2cfd7 100644 --- a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/NativeMethods.cs @@ -19,4 +19,4 @@ namespace System.ServiceModel.Diagnostics [SecurityCritical] internal static extern SafeEventLogWriteHandle RegisterEventSource(string uncServerName, string sourceName); } -} +} \ No newline at end of file diff --git a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs index 97ccaa01f2..8b361b2287 100644 --- a/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs +++ b/external/referencesource/SMDiagnostics/System/ServiceModel/Diagnostics/TraceSourceKind.cs @@ -9,4 +9,4 @@ namespace System.ServiceModel.Diagnostics DiagnosticTraceSource, PiiTraceSource } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/AssemblyInfo.cs b/external/referencesource/System.Activities.Core.Presentation/AssemblyInfo.cs similarity index 90% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/AssemblyInfo.cs rename to external/referencesource/System.Activities.Core.Presentation/AssemblyInfo.cs index 7c865848af..5919b78629 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/AssemblyInfo.cs +++ b/external/referencesource/System.Activities.Core.Presentation/AssemblyInfo.cs @@ -2,4 +2,4 @@ using System.Runtime.CompilerServices; using System.Diagnostics.CodeAnalysis; [assembly: InternalsVisibleTo("CIT.System.Activities.Core.Design, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -[assembly: SuppressMessage("Microsoft.MSInternal", "CA904:DeclareTypesInMicrosoftOrSystemNamespace", Scope = "namespace", Target = "XamlGeneratedNamespace", Justification = "Xaml Generated")] +[assembly: SuppressMessage("Microsoft.MSInternal", "CA904:DeclareTypesInMicrosoftOrSystemNamespace", Scope = "namespace", Target = "XamlGeneratedNamespace", Justification = "Xaml Generated")] \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/SR.Designer.cs b/external/referencesource/System.Activities.Core.Presentation/SR.Designer.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/SR.Designer.cs rename to external/referencesource/System.Activities.Core.Presentation/SR.Designer.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ArgumentIdentifierTrimConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ArgumentIdentifierTrimConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ArgumentIdentifierTrimConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ArgumentIdentifierTrimConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/AssignDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/AssignDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/AssignDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/AssignDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CancellationScopeDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CancellationScopeDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CancellationScopeDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CancellationScopeDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewInterface.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewInterface.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewInterface.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewInterface.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewModel.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewModel.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewModel.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.ViewModel.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBox.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBoxIsEnabledConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBoxIsEnabledConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBoxIsEnabledConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseKeyBoxIsEnabledConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseLabelVisibilityConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseLabelVisibilityConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseLabelVisibilityConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CaseLabelVisibilityConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CatchDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CatchDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CatchDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CatchDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ComboBoxHelper.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ComboBoxHelper.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ComboBoxHelper.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ComboBoxHelper.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CompensableActivityDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CompensableActivityDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CompensableActivityDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/CompensableActivityDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ConnectionPointType.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ConnectionPointType.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ConnectionPointType.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ConnectionPointType.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DelegateArgumentsValueEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DelegateArgumentsValueEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DelegateArgumentsValueEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DelegateArgumentsValueEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DesignerMetadata.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DesignerMetadata.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DesignerMetadata.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DesignerMetadata.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DisplayNameConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DisplayNameConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DisplayNameConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DisplayNameConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DoWhileDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DoWhileDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DoWhileDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DoWhileDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooser.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooser.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooser.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooser.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooserViewModel.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooserViewModel.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooserViewModel.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyChooserViewModel.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyToTooltipConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyToTooltipConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyToTooltipConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/DynamicActivityPropertyToTooltipConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemShowExpandedMultiValueConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemShowExpandedMultiValueConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemShowExpandedMultiValueConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemShowExpandedMultiValueConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemWrapper.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemWrapper.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemWrapper.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpandableItemWrapper.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpressionToExpressionTextConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpressionToExpressionTextConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpressionToExpressionTextConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ExpressionToExpressionTextConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericForEachWithBodyFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericForEachWithBodyFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericForEachWithBodyFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericForEachWithBodyFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericParallelForEachWithBodyFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericParallelForEachWithBodyFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericParallelForEachWithBodyFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/GenericParallelForEachWithBodyFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/PickWithTwoBranchesFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/PickWithTwoBranchesFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/PickWithTwoBranchesFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/PickWithTwoBranchesFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/StateMachineWithInitialStateFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/StateMachineWithInitialStateFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/StateMachineWithInitialStateFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Factories/StateMachineWithInitialStateFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FakeRoot.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FakeRoot.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FakeRoot.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FakeRoot.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs similarity index 99% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs index 681ede84fb..4cbffae1b4 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs +++ b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FinalState.cs @@ -12,4 +12,4 @@ namespace System.Activities.Core.Presentation public sealed class FinalState { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionLabelFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionLabelFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionLabelFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowDecisionLabelFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchCaseEditorDialog.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchCaseEditorDialog.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchCaseEditorDialog.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchCaseEditorDialog.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDefaultLinkFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDefaultLinkFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDefaultLinkFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDefaultLinkFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLabelFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLabelFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLabelFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLabelFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLink.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLink.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLink.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLink.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkCasePropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkCasePropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkCasePropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkCasePropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkMultiValueConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkMultiValueConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkMultiValueConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowSwitchLinkMultiValueConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartConnectionPointsAdorner.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartConnectionPointsAdorner.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartConnectionPointsAdorner.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartConnectionPointsAdorner.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Container.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Container.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Container.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Container.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Helpers.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Helpers.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Helpers.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.Helpers.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChangeReactions.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChangeReactions.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChangeReactions.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChangeReactions.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChanges.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChanges.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChanges.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.ModelChanges.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.xaml.cs.REMOVED.git-id b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.xaml.cs.REMOVED.git-id similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.xaml.cs.REMOVED.git-id rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesigner.xaml.cs.REMOVED.git-id diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesignerCommands.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesignerCommands.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesignerCommands.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartDesignerCommands.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAdorner.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAdorner.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAdorner.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAdorner.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAutomationPeer.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAutomationPeer.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAutomationPeer.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartExpressionAutomationPeer.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartFreeFormPanel.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartFreeFormPanel.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartFreeFormPanel.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartFreeFormPanel.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartResizeGrip.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartResizeGrip.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartResizeGrip.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartResizeGrip.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartSizeFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartSizeFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartSizeFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FlowchartSizeFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ForEachDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ForEachDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ForEachDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ForEachDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FreeFormPanelUtilities.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FreeFormPanelUtilities.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FreeFormPanelUtilities.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/FreeFormPanelUtilities.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericFlowSwitchHelper.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericFlowSwitchHelper.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericFlowSwitchHelper.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericFlowSwitchHelper.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericTypeArgumentConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericTypeArgumentConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericTypeArgumentConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/GenericTypeArgumentConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextMaxWidthConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextMaxWidthConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextMaxWidthConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/HintTextMaxWidthConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IFlowSwitch.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IFlowSwitch.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IFlowSwitch.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IFlowSwitch.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IfElseDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IfElseDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IfElseDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IfElseDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InteropDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InteropDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InteropDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InteropDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateValidationFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateValidationFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateValidationFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeDelegateValidationFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeMethodDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeMethodDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeMethodDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/InvokeMethodDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsLastSelectedItemConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsLastSelectedItemConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsLastSelectedItemConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsLastSelectedItemConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsStateRootDesignerConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsStateRootDesignerConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsStateRootDesignerConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/IsStateRootDesignerConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/LocationChangedEventArgs.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/LocationChangedEventArgs.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/LocationChangedEventArgs.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/LocationChangedEventArgs.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MaxValueConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MaxValueConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MaxValueConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MaxValueConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MorphHelpers.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MorphHelpers.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MorphHelpers.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/MorphHelpers.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NoPersistScopeDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NoPersistScopeDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NoPersistScopeDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NoPersistScopeDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NotConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NotConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NotConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/NotConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelSeparator.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelSeparator.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelSeparator.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ParallelSeparator.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickBranchDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickBranchDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickBranchDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickBranchDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocator.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocator.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocator.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocator.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocatorFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocatorFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocatorFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PickValidationErrorSourceLocatorFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PropertyNames.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PropertyNames.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PropertyNames.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/PropertyNames.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/RegisterMetadataDelayedWorker.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/RegisterMetadataDelayedWorker.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/RegisterMetadataDelayedWorker.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/RegisterMetadataDelayedWorker.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ReorderableListEditor.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ReorderableListEditor.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ReorderableListEditor.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/ReorderableListEditor.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SelectedPropertyNameChangedEventArgs.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SelectedPropertyNameChangedEventArgs.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SelectedPropertyNameChangedEventArgs.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SelectedPropertyNameChangedEventArgs.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SequenceDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SequenceDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SequenceDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SequenceDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartNode.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartNode.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartNode.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartNode.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartSymbol.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartSymbol.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartSymbol.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StartSymbol.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateConnectionPointToolTip.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateConnectionPointToolTip.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateConnectionPointToolTip.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateConnectionPointToolTip.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.CompositeView.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.CompositeView.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.CompositeView.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.CompositeView.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChangeReactions.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChangeReactions.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChangeReactions.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChangeReactions.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChanges.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChanges.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChanges.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.ModelChanges.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.Utilities.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.Utilities.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.Utilities.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.Utilities.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.xaml.cs.REMOVED.git-id b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.xaml.cs.REMOVED.git-id similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.xaml.cs.REMOVED.git-id rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerEditor.xaml.cs.REMOVED.git-id diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerResizeGrip.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerResizeGrip.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerResizeGrip.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateContainerResizeGrip.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateLinkButtonToolTipConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateLinkButtonToolTipConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateLinkButtonToolTipConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateLinkButtonToolTipConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineConnetionPointsAdorner.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineConnetionPointsAdorner.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineConnetionPointsAdorner.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineConnetionPointsAdorner.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineFreeFormPanel.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineFreeFormPanel.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineFreeFormPanel.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineFreeFormPanel.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocator.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocator.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocator.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocator.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocatorFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocatorFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocatorFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/StateMachineValidationErrorSourceLocatorFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchTryCatchDesignerHelper.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchTryCatchDesignerHelper.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchTryCatchDesignerHelper.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/SwitchTryCatchDesignerHelper.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/DesignerStyleDictionary.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/DesignerStyleDictionary.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/DesignerStyleDictionary.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/DesignerStyleDictionary.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/EditorCategoryTemplateDictionary.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/EditorCategoryTemplateDictionary.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/EditorCategoryTemplateDictionary.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/EditorCategoryTemplateDictionary.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/StringResourceDictionary.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/StringResourceDictionary.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/StringResourceDictionary.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/Themes/StringResourceDictionary.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransactionScopeDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransactionScopeDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransactionScopeDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransactionScopeDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionReorderChange.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionReorderChange.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionReorderChange.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TransitionReorderChange.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TryCatchDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TryCatchDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TryCatchDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/TryCatchDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/VerticalConnector.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/VerticalConnector.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/VerticalConnector.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/VerticalConnector.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WhileDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WhileDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WhileDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WhileDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WriteLineDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WriteLineDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WriteLineDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Core/Presentation/WriteLineDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityDesignerHelper.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityDesignerHelper.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityDesignerHelper.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityDesignerHelper.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityXRefPropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityXRefPropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityXRefPropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ActivityXRefPropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ArgumentCollectionPropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ArgumentCollectionPropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/ArgumentCollectionPropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/ArgumentCollectionPropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesignerOptions.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesignerOptions.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesignerOptions.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDesignerOptions.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDialog.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDialog.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDialog.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/DynamicArgumentDialog.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionPropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionPropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionPropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/Activities/Presentation/TypeCollectionPropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ActivityXRefConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ActivityXRefConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ActivityXRefConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ActivityXRefConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingEditor.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingEditor.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingEditor.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingEditor.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingPropertyValueEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingPropertyValueEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingPropertyValueEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/BindingPropertyValueEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentButtonTitleConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentButtonTitleConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentButtonTitleConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentButtonTitleConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentCorrelationTypeExpander.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentCorrelationTypeExpander.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentCorrelationTypeExpander.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentCorrelationTypeExpander.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentDialogViewModel.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentDialogViewModel.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentDialogViewModel.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ContentDialogViewModel.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveMessageContentSearchableStringConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveMessageContentSearchableStringConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveMessageContentSearchableStringConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveMessageContentSearchableStringConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveParametersContentSearchableStringConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveParametersContentSearchableStringConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveParametersContentSearchableStringConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/ReceiveParametersContentSearchableStringConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendMessageContentSearchableStringConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendMessageContentSearchableStringConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendMessageContentSearchableStringConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendMessageContentSearchableStringConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendParametersContentSearchableStringConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendParametersContentSearchableStringConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendParametersContentSearchableStringConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/SendParametersContentSearchableStringConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/XPathMessageQuerySearchableStringConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/XPathMessageQuerySearchableStringConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/XPathMessageQuerySearchableStringConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Converters/XPathMessageQuerySearchableStringConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelatesOnValueEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelatesOnValueEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelatesOnValueEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelatesOnValueEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationDataDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationDataDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationDataDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationDataDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerValueEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerValueEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerValueEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationInitializerValueEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationScopeDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationScopeDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationScopeDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/CorrelationScopeDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/EndpointDesigner.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/EndpointDesigner.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/EndpointDesigner.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/EndpointDesigner.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/ReceiveAndSendReplyFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/ReceiveAndSendReplyFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/ReceiveAndSendReplyFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/ReceiveAndSendReplyFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/SendAndReceiveReplyFactory.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/SendAndReceiveReplyFactory.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/SendAndReceiveReplyFactory.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/Factories/SendAndReceiveReplyFactory.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/InitializeCorrelationDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/InitializeCorrelationDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/InitializeCorrelationDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/InitializeCorrelationDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQueryEditor.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQueryEditor.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQueryEditor.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQueryEditor.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQuerySetDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQuerySetDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQuerySetDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessageQuerySetDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessagingContentPropertyEditorResources.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessagingContentPropertyEditorResources.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessagingContentPropertyEditorResources.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/MessagingContentPropertyEditorResources.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentDialog.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentDialog.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentDialog.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentDialog.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentPropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentPropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentPropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveContentPropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyValidationFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyValidationFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyValidationFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ReceiveReplyValidationFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentDialog.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentDialog.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentDialog.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentDialog.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentPropertyEditor.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentPropertyEditor.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentPropertyEditor.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendContentPropertyEditor.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyValidationFeature.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyValidationFeature.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyValidationFeature.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/SendReplyValidationFeature.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ServiceContractImporter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ServiceContractImporter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ServiceContractImporter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/ServiceContractImporter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TransactedReceiveScope.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TransactedReceiveScope.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TransactedReceiveScope.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TransactedReceiveScope.xaml.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TypeToTreeConverter.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TypeToTreeConverter.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TypeToTreeConverter.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Activities/Presentation/TypeToTreeConverter.cs diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Presentation/ServiceDesigner.xaml.cs b/external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Presentation/ServiceDesigner.xaml.cs similarity index 100% rename from external/referencesource/System.Activities.Presentation/System.Activities.Core.Presentation/System/ServiceModel/Presentation/ServiceDesigner.xaml.cs rename to external/referencesource/System.Activities.Core.Presentation/System/ServiceModel/Presentation/ServiceDesigner.xaml.cs diff --git a/external/referencesource/System.Activities.DurableInstancing/AssemblyInfo.cs b/external/referencesource/System.Activities.DurableInstancing/AssemblyInfo.cs index b8d9e68ff0..bbaeab37ba 100644 --- a/external/referencesource/System.Activities.DurableInstancing/AssemblyInfo.cs +++ b/external/referencesource/System.Activities.DurableInstancing/AssemblyInfo.cs @@ -27,4 +27,4 @@ using System.Security.Permissions; // by using the '*' as shown below: // Friend assemblies -// Partial Trust : +// Partial Trust : \ No newline at end of file diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceCompletionAction.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceCompletionAction.cs index caf08656b2..c8b21a74a7 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceCompletionAction.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceCompletionAction.cs @@ -9,4 +9,4 @@ namespace System.Activities.DurableInstancing DeleteNothing = 0, DeleteAll }; -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceEncodingOption.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceEncodingOption.cs index e313b7eeea..62ab9512eb 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceEncodingOption.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/InstanceEncodingOption.cs @@ -9,4 +9,4 @@ namespace System.Activities.DurableInstancing None = 0, GZip }; -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/LoadType.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/LoadType.cs index ebc665f5dd..6507d03da2 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/LoadType.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/LoadType.cs @@ -11,4 +11,4 @@ namespace System.Activities.DurableInstancing LoadByKey = 2, LoadByInstance = 3 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/PrimitiveType.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/PrimitiveType.cs index f1a6a749e7..d919f07772 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/PrimitiveType.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/PrimitiveType.cs @@ -30,4 +30,4 @@ namespace System.Activities.DurableInstancing XmlQualifiedName, Unavailable = 99 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SqlCommandAsyncResult.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SqlCommandAsyncResult.cs index 1c9cd4b90f..8335154acf 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SqlCommandAsyncResult.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SqlCommandAsyncResult.cs @@ -35,6 +35,8 @@ namespace System.Activities.DurableInstancing new RetryErrorCode(10054, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // Severed tcp connection drawn from the pool new RetryErrorCode(10060, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // The server was not found or was not accessible. new RetryErrorCode(10061, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Server not started + new RetryErrorCode(10928, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Azure error - The limit for the database resource has been reached. + new RetryErrorCode(10929, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Azure error - The server is currently too busy to support requests up to the maximum limit. new RetryErrorCode(40143, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Azure error - server encountered error processing the request. new RetryErrorCode(40197, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Azure error - server encountered error processing the request. new RetryErrorCode(40501, RetryErrorOptions.RetryBeginOrEnd | RetryErrorOptions.RetryWhenTransaction), // SQL Azure error - server is currently busy. diff --git a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SuspensionStateChange.cs b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SuspensionStateChange.cs index 52cbdd6a0e..0999941ca2 100644 --- a/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SuspensionStateChange.cs +++ b/external/referencesource/System.Activities.DurableInstancing/System/Activities/DurableInstancing/SuspensionStateChange.cs @@ -10,4 +10,4 @@ namespace System.Activities.DurableInstancing SuspendInstance = 1, UnsuspendInstance = 2 }; -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/Microsoft.Tools.Common/Microsoft/Activities/Presentation/Xaml/XamlTypeKind.cs b/external/referencesource/System.Activities.Presentation/Microsoft.Tools.Common/Microsoft/Activities/Presentation/Xaml/XamlTypeKind.cs index 2aaae52f26..bf1bf11343 100644 --- a/external/referencesource/System.Activities.Presentation/Microsoft.Tools.Common/Microsoft/Activities/Presentation/Xaml/XamlTypeKind.cs +++ b/external/referencesource/System.Activities.Presentation/Microsoft.Tools.Common/Microsoft/Activities/Presentation/Xaml/XamlTypeKind.cs @@ -12,4 +12,4 @@ namespace Microsoft.Activities.Presentation.Xaml PartialSupported, // I understand this type if you would like to remove some new properties FullySupported, // I understand this type } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/AdornerLocation.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/AdornerLocation.cs index 86f482beb1..34d3d24b7e 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/AdornerLocation.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/AdornerLocation.cs @@ -14,4 +14,4 @@ namespace System.Activities.Presentation.Annotations TopLeft, BottomLeft } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/IDockedAnnotation.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/IDockedAnnotation.cs index 80054290f6..658c833204 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/IDockedAnnotation.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Annotations/IDockedAnnotation.cs @@ -24,4 +24,4 @@ namespace System.Activities.Presentation.Annotations void FocusOnContent(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/CategoryContainerCommands.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/CategoryContainerCommands.cs new file mode 100644 index 0000000000..3897fd57c7 --- /dev/null +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/CategoryContainerCommands.cs @@ -0,0 +1,40 @@ + + +// ------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// ------------------------------------------------------------------- +//From \\authoring\Sparkle\Source\1.0.1083.0\Common\Source\Framework\Properties +namespace System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.PropertyInspector +{ + using System; + using System.Windows; + using System.Windows.Input; + + + //

    + // Standard commands and command implementations used by PropertyContainer templates + // and implemented by property editing hosts + // + internal static class CategoryContainerCommands + { + private static readonly RoutedCommand togglePinAdvancedProperties = new RoutedCommand("TogglePinAdvancedProperties", typeof(CategoryContainerCommands)); + private static readonly RoutedCommand updateCategoryExpansionState = new RoutedCommand("UpdateCategoryExpansionState", typeof(CategoryContainerCommands)); + + // + // standard command to category edit host to togglePinAdvancedProperties + // + public static RoutedCommand TogglePinAdvancedProperties + { + get { return CategoryContainerCommands.togglePinAdvancedProperties; } + } + + // + // standard command to property edit host to updateCategoryExpansionState + // + public static RoutedCommand UpdateCategoryExpansionState + { + get { return CategoryContainerCommands.updateCategoryExpansionState; } + } + + } +} diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/ExtensibilityMetadataHelper.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/ExtensibilityMetadataHelper.cs new file mode 100644 index 0000000000..5b106a83a2 --- /dev/null +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/ExtensibilityMetadataHelper.cs @@ -0,0 +1,113 @@ + +// ------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// ------------------------------------------------------------------- +//From \\authoring\Sparkle\Source\1.0.1083.0\Common\Source\Framework\Properties +namespace System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.PropertyInspector +{ + using System.ComponentModel; + using System.Diagnostics; + using System.Collections.Generic; + using System.Collections.ObjectModel; + using System; + using System.Activities.Presentation.PropertyEditing; + using System.Collections; + using System.Globalization; + using System.Runtime; + using System.Diagnostics.CodeAnalysis; + + internal static class ExtensibilityMetadataHelper + { + // + // Returns an instance of the PropertyValueEditor specified in the provided attribute list. + // + // A list of attributes. If an EditorAttribute is not specified in this collection, will return null. + // Interface for exception logging. If null, exceptions will be silently ignored. + // + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Propagating the error might cause VS to crash")] + [SuppressMessage("Reliability", "Reliability108", Justification = "Propagating the error might cause VS to crash")] + public static PropertyValueEditor GetValueEditor(IEnumerable attributes, IMessageLogger exceptionLogger) + { + PropertyValueEditor propertyValueEditor = null; + if (attributes != null) + { + foreach (Attribute attribute in attributes) + { + EditorAttribute editorAttribute = attribute as EditorAttribute; + if (editorAttribute != null) + { + try + { + Type editorType = Type.GetType(editorAttribute.EditorTypeName); + if (editorType != null && typeof(PropertyValueEditor).IsAssignableFrom(editorType)) + { + propertyValueEditor = (PropertyValueEditor)Activator.CreateInstance(editorType); + break; + } + } + catch (Exception e) + { + if (exceptionLogger != null) + { + exceptionLogger.WriteLine(string.Format(CultureInfo.CurrentCulture, ExceptionStringTable.ValueEditorLoadFailed, ExtensibilityMetadataHelper.GetExceptionMessage(e))); + } + } + } + } + } + return propertyValueEditor; + } + + // + // Returns the type of the editor specified by the provided EditorAttribute. + // + // EditorAttribute that specifies a CategoryEditor type. If the type specified is not derived from CategoryEditor, or cannot be loaded, will return null. + // Interface for exception logging. If null, exceptions will be silently ignored. + // + [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification = "Propagating the error might cause VS to crash")] + [SuppressMessage("Reliability", "Reliability108", Justification = "Propagating the error might cause VS to crash")] + public static Type GetCategoryEditorType(EditorAttribute attribute, IMessageLogger exceptionLogger) + { + try + { + Type editorType = Type.GetType(attribute.EditorTypeName); + if (editorType != null && typeof(CategoryEditor).IsAssignableFrom(editorType)) + { + return editorType; + } + } + catch (Exception e) + { + if (exceptionLogger != null) + { + exceptionLogger.WriteLine(string.Format(CultureInfo.CurrentCulture, ExceptionStringTable.CategoryEditorTypeLoadFailed, ExtensibilityMetadataHelper.GetExceptionMessage(e))); + } + } + return null; + } + + public static string GetExceptionMessage(Exception e) + { + return (e.InnerException != null) ? e.InnerException.ToString() : e.Message; + } + + public static bool IsEditorReusable(IEnumerable attributes) + { + bool isEditorReusable = true; + if (attributes != null) + { + foreach (Attribute attribute in attributes) + { + EditorReuseAttribute editorReuseAttribute = attribute as EditorReuseAttribute; + if (editorReuseAttribute != null) + { + isEditorReusable = editorReuseAttribute.ReuseEditor; + break; + } + } + } + return isEditorReusable; + } + } +} + diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/PropertyContainerPopupHelper.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/PropertyContainerPopupHelper.cs new file mode 100644 index 0000000000..f4591eff47 --- /dev/null +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/Internal/PropertyEditing/FromExpression/Framework/PropertyInspector/PropertyContainerPopupHelper.cs @@ -0,0 +1,74 @@ +// ------------------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// ------------------------------------------------------------------- +//From \\authoring\Sparkle\Source\1.0.1083.0\Common\Source\Framework\Properties +namespace System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.PropertyInspector +{ + using System; + using System.Collections.Generic; + using System.Text; + using System.Windows; + using System.Windows.Controls.Primitives; + using System.Windows.Input; + using System.Windows.Media; + using System.Activities.Presentation.PropertyEditing; + using System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.Controls; + + // + // Acrylic needs a way of knowing when we begin and end extended edit mode, + // so this class fires commands when those two events take place. + // + internal class PropertyContainerPopup : WorkaroundPopup + { + // these events allow Acrylic to implement its workaround for Avalon/MFC interop + // focus issues (WinOS bug # 1713206) + public static readonly RoutedCommand OnBeginExtendedEdit = new RoutedCommand("OnBeginExtendedEdit", typeof(PropertyContainerPopup)); + public static readonly RoutedCommand OnEndExtendedEdit = new RoutedCommand("OnEndExtendedEdit", typeof(PropertyContainerPopup)); + + public static CustomPopupPlacementCallback RightAlignedPopupPlacement + { + get { return new CustomPopupPlacementCallback(PropertyContainerPopup.RightAlignedPopupPlacementCallback); } + } + + protected override void OnOpened(EventArgs e) + { + // Fire OnBeginExtendedEdit command (for Acrylic) + PropertyContainer owningPropertyContainer = (PropertyContainer)this.GetValue(PropertyContainer.OwningPropertyContainerProperty); + PropertyContainerPopup.OnBeginExtendedEdit.Execute(this, owningPropertyContainer); + + base.OnOpened(e); + } + + protected override void OnClosed(EventArgs e) + { + base.OnClosed(e); + + PropertyContainer owningPropertyContainer = (PropertyContainer)this.GetValue(PropertyContainer.OwningPropertyContainerProperty); + + // Revert back to Inline when the popup is dismissed and we haven't already switched + // to the pinned mode + if (owningPropertyContainer != null && owningPropertyContainer.ActiveEditMode == PropertyContainerEditMode.ExtendedPopup) + { + DependencyObject potentialDescendant = Mouse.Captured as DependencyObject; + if (potentialDescendant != null && owningPropertyContainer.IsAncestorOf(potentialDescendant)) + { + // v1 38479: This is a mitigation for Windows OS Bug 1965872. + // Here we force any control which has capture to lose it, though + // this situation can occur in other cases (e.g. via extensibility) but this covers the most + // common cases and is a safe fix. + Mouse.Capture(null); + } + + owningPropertyContainer.ActiveEditMode = PropertyContainerEditMode.Inline; + } + + // Fire OnEndExtendedEdit command (for Acrylic) + OnEndExtendedEdit.Execute(this, owningPropertyContainer); + } + + public static CustomPopupPlacement[] RightAlignedPopupPlacementCallback(Size popupSize, Size targetSize, Point offset) + { + return new CustomPopupPlacement[] { new CustomPopupPlacement(new Point(targetSize.Width - popupSize.Width, targetSize.Height), PopupPrimaryAxis.Horizontal) }; + } + } +} diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/PropertyEditing/PropertyMarker.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/PropertyEditing/PropertyMarker.cs index 5155e5f3c0..13d1cb6737 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/PropertyEditing/PropertyMarker.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Base/Core/PropertyEditing/PropertyMarker.cs @@ -11,4 +11,4 @@ namespace System.Activities.Presentation.PropertyEditing { /// class PropertyMarker : Control { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoConnectDirections.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoConnectDirections.cs index bbb763183a..c1e980ce6a 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoConnectDirections.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoConnectDirections.cs @@ -37,4 +37,4 @@ namespace System.Activities.Presentation.FreeFormEditing /// Bottom = 8 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoSplitAlignment.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoSplitAlignment.cs index 4246d77845..ff4a253684 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoSplitAlignment.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/AutoSplitAlignment.cs @@ -26,4 +26,4 @@ namespace System.Activities.Presentation.FreeFormEditing /// Horizontal } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/INestedFreeFormPanelContainer.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/INestedFreeFormPanelContainer.cs index 4b1b9c54c4..1900d4ec23 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/INestedFreeFormPanelContainer.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/INestedFreeFormPanelContainer.cs @@ -9,4 +9,4 @@ namespace System.Activities.Presentation.FreeFormEditing FreeFormPanel GetChildFreeFormPanel(); FreeFormPanel GetOutmostFreeFormPanel(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/RequiredSizeChangedEventHandler.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/RequiredSizeChangedEventHandler.cs index 1acab96b1b..97283b0920 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/RequiredSizeChangedEventHandler.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/FreeFormEditing/RequiredSizeChangedEventHandler.cs @@ -5,4 +5,4 @@ namespace System.Activities.Presentation.FreeFormEditing { internal delegate void RequiredSizeChangedEventHandler(object sender, RequiredSizeChangedEventArgs e); -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Toolbox/IActivityTemplateFactory.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Toolbox/IActivityTemplateFactory.cs index 86ecd7ee0b..dca449e198 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Toolbox/IActivityTemplateFactory.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Toolbox/IActivityTemplateFactory.cs @@ -15,4 +15,4 @@ namespace System.Activities.Presentation { T Create(DependencyObject target, IDataObject dataObject); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationReason.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationReason.cs index be04091bc3..81e4593e86 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationReason.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationReason.cs @@ -11,4 +11,4 @@ namespace System.Activities.Presentation.Validation Save, ModelChange, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationState.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationState.cs index c6766aa386..62f42b9a69 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationState.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/Validation/ValidationState.cs @@ -37,4 +37,4 @@ namespace System.Activities.Presentation.Validation /// Valid = 0 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/IVersionEditor.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/IVersionEditor.cs index 49051223a9..aaa7622211 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/IVersionEditor.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/IVersionEditor.cs @@ -10,4 +10,4 @@ namespace System.Activities.Presentation.View { void ShowErrorMessage(string message); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/ViewStateService.cs b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/ViewStateService.cs index bdf1b73ba5..de09908116 100644 --- a/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/ViewStateService.cs +++ b/external/referencesource/System.Activities.Presentation/System.Activities.Presentation/System/Activities/Presentation/View/ViewStateService.cs @@ -17,4 +17,4 @@ namespace System.Activities.Presentation.View public abstract Dictionary RetrieveAllViewState(ModelItem modelItem); public abstract bool RemoveViewState(ModelItem modelItem, string key); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/ActivityInstance.cs b/external/referencesource/System.Activities/System/Activities/ActivityInstance.cs index df8eb6ea82..1393d9b34e 100644 --- a/external/referencesource/System.Activities/System/Activities/ActivityInstance.cs +++ b/external/referencesource/System.Activities/System/Activities/ActivityInstance.cs @@ -1292,7 +1292,7 @@ namespace System.Activities if (TD.ActivityCompletedIsEnabled()) { - TD.ActivityCompleted(this.Activity.GetType().ToString(), this.Activity.DisplayName, this.Id, this.State.ToString()); + TD.ActivityCompleted(this.Activity.GetType().ToString(), this.Activity.DisplayName, this.Id, this.State.GetStateName()); } } diff --git a/external/referencesource/System.Activities/System/Activities/ActivityInstanceState.cs b/external/referencesource/System.Activities/System/Activities/ActivityInstanceState.cs index 0148272a1e..1c9943e05a 100644 --- a/external/referencesource/System.Activities/System/Activities/ActivityInstanceState.cs +++ b/external/referencesource/System.Activities/System/Activities/ActivityInstanceState.cs @@ -5,6 +5,7 @@ namespace System.Activities { using System.Runtime.Serialization; + using System.Runtime; [DataContract] public enum ActivityInstanceState @@ -20,5 +21,28 @@ namespace System.Activities [EnumMember] Faulted, + + // If any more states are added, ensure they are also added to ActivityInstanceStateExtension.GetStateName + } + + internal static class ActivityInstanceStateExtension + { + internal static string GetStateName(this ActivityInstanceState state) + { + switch (state) + { + case ActivityInstanceState.Executing: + return "Executing"; + case ActivityInstanceState.Closed: + return "Closed"; + case ActivityInstanceState.Canceled: + return "Canceled"; + case ActivityInstanceState.Faulted: + return "Faulted"; + default: + Fx.Assert("Don't understand ActivityInstanceState named " + state.ToString()); + return state.ToString(); + } + } } } diff --git a/external/referencesource/System.Activities/System/Activities/AssemblyInfo.cs b/external/referencesource/System.Activities/System/Activities/AssemblyInfo.cs index ab3fa5c387..9523e62204 100644 --- a/external/referencesource/System.Activities/System/Activities/AssemblyInfo.cs +++ b/external/referencesource/System.Activities/System/Activities/AssemblyInfo.cs @@ -24,7 +24,7 @@ using System.Windows.Markup; [assembly: XmlnsPrefix("http://schemas.microsoft.com/netfx/2010/xaml/activities/debugger", "sads")] // Friends Assembly -// +// TODO, 33059, Make common shim to access System.Activities's internal classes. [assembly: InternalsVisibleTo("CDF.CIT.Scenarios.WorkflowModel.Debugger, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("CDF.CIT.Scenarios.WorkflowModel.Compensation, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("CDF.CIT.Scenarios.WorkflowModel.DataModel, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] diff --git a/external/referencesource/System.Activities/System/Activities/Debugger/ICharacterSpottingTextReaderForUnitTest.cs b/external/referencesource/System.Activities/System/Activities/Debugger/ICharacterSpottingTextReaderForUnitTest.cs index 7d6881d39a..7e179b65a3 100644 --- a/external/referencesource/System.Activities/System/Activities/Debugger/ICharacterSpottingTextReaderForUnitTest.cs +++ b/external/referencesource/System.Activities/System/Activities/Debugger/ICharacterSpottingTextReaderForUnitTest.cs @@ -20,4 +20,4 @@ namespace System.Activities.Debugger List DoubleQuotes { get; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/Debugger/StateManager.cs b/external/referencesource/System.Activities/System/Activities/Debugger/StateManager.cs index 662116b4d4..3671724485 100644 --- a/external/referencesource/System.Activities/System/Activities/Debugger/StateManager.cs +++ b/external/referencesource/System.Activities/System/Activities/Debugger/StateManager.cs @@ -738,26 +738,36 @@ namespace System.Activities.Debugger if (isPriming) { - if (!islandsWithPriming.TryGetValue(state, out island)) + lock (islandsWithPriming) { - island = state.GetMethodInfo(true); - islandsWithPriming[state] = island; + if (!islandsWithPriming.TryGetValue(state, out island)) + { + island = state.GetMethodInfo(true); + islandsWithPriming[state] = island; + } } } else { - if (!islands.TryGetValue(state, out island)) + lock (islands) { - island = state.GetMethodInfo(false); - islands[state] = island; + if (!islands.TryGetValue(state, out island)) + { + island = state.GetMethodInfo(false); + islands[state] = island; + } } } return island; } + // This method is only called from CreateIsland, which is only called from Bake. + // Bake does a "lock(this)" before calling CreateIsland, so access to the sourceDocuments + // dictionary is protected by that lock. If this changes, locking will need to be added + // to this method to protect the sourceDocuments dictionary. [Fx.Tag.SecurityNote(Critical = "Used in generating the dynamic module.")] [SecurityCritical] - internal ISymbolDocumentWriter GetSourceDocument(string fileName, byte[] checksum, Dictionary checksumCache) + private ISymbolDocumentWriter GetSourceDocument(string fileName, byte[] checksum, Dictionary checksumCache) { ISymbolDocumentWriter documentWriter; string sourceDocKey = fileName + SymbolHelper.GetHexStringFromChecksum(checksum); diff --git a/external/referencesource/System.Activities/System/Activities/Expressions/ILocationReferenceExpression.cs b/external/referencesource/System.Activities/System/Activities/Expressions/ILocationReferenceExpression.cs index 3df5b7ca46..0eb19dffc1 100644 --- a/external/referencesource/System.Activities/System/Activities/Expressions/ILocationReferenceExpression.cs +++ b/external/referencesource/System.Activities/System/Activities/Expressions/ILocationReferenceExpression.cs @@ -10,4 +10,4 @@ namespace System.Activities.Expressions { ActivityWithResult CreateNewInstance(LocationReference locationReference); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/Hosting/IWorkflowInstanceExtension.cs b/external/referencesource/System.Activities/System/Activities/Hosting/IWorkflowInstanceExtension.cs index ffd3796a53..56eacc8e45 100644 --- a/external/referencesource/System.Activities/System/Activities/Hosting/IWorkflowInstanceExtension.cs +++ b/external/referencesource/System.Activities/System/Activities/Hosting/IWorkflowInstanceExtension.cs @@ -15,4 +15,4 @@ namespace System.Activities.Hosting // called with the targe instance under WorkflowInstance.Initialize void SetInstance(WorkflowInstanceProxy instance); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/Runtime/ActivityExecutor.cs.REMOVED.git-id b/external/referencesource/System.Activities/System/Activities/Runtime/ActivityExecutor.cs.REMOVED.git-id index 0e92a1ce78..d7a9162fa7 100644 --- a/external/referencesource/System.Activities/System/Activities/Runtime/ActivityExecutor.cs.REMOVED.git-id +++ b/external/referencesource/System.Activities/System/Activities/Runtime/ActivityExecutor.cs.REMOVED.git-id @@ -1 +1 @@ -1141038dd1e4ef79669d14307d12d08ad0d8d00e \ No newline at end of file +b9cf8fe7e52450ceff6d1c34154cba802c4c505e \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/Tracking/ActivityStates.cs b/external/referencesource/System.Activities/System/Activities/Tracking/ActivityStates.cs index 8ff24141ac..5ec4100006 100644 --- a/external/referencesource/System.Activities/System/Activities/Tracking/ActivityStates.cs +++ b/external/referencesource/System.Activities/System/Activities/Tracking/ActivityStates.cs @@ -11,4 +11,4 @@ namespace System.Activities.Tracking public const string Executing = "Executing"; public const string Faulted = "Faulted"; } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Activities/System/Activities/Tracking/ImplementationVisibility.cs b/external/referencesource/System.Activities/System/Activities/Tracking/ImplementationVisibility.cs index df3678b39a..30b1068926 100644 --- a/external/referencesource/System.Activities/System/Activities/Tracking/ImplementationVisibility.cs +++ b/external/referencesource/System.Activities/System/Activities/Tracking/ImplementationVisibility.cs @@ -9,4 +9,4 @@ namespace System.Activities.Tracking RootScope, All } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppContextDefaultValues.Default.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppContextDefaultValues.Default.cs new file mode 100644 index 0000000000..118df8bde9 --- /dev/null +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppContextDefaultValues.Default.cs @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +namespace System +{ + using System; + using System.ComponentModel.DataAnnotations; + + internal static partial class AppContextDefaultValues + { + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version) + { + // When defining a new switch you should add it to the last known version. + // For instance, if you are adding a switch in .NET 4.6 (the release after 4.5.2) you should defined your switch + // like this: + // if (version <= 40502) ... + // This ensures that all previous versions of that platform (up-to 4.5.2) will get the old behavior by default + // NOTE: When adding a default value for a switch please make sure that the default value is added to ALL of the existing platforms! + // NOTE: When adding a new if statement for the version please ensure that ALL previous switches are enabled (ie. don't use else if) + switch (platformIdentifier) + { + case ".NETCore": + case ".NETFramework": + { + if (version <= 40600) + { + LocalAppContextSwitches.SetDefaultsLessOrEqual_46(); + } + + break; + } + } + } + } +} diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppSettings.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppSettings.cs new file mode 100644 index 0000000000..6ffe4ca67d --- /dev/null +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/AppSettings.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ + +// AppSettings.cs +// + +using System; +using System.Collections.Specialized; +using System.Configuration; +using System.Diagnostics.CodeAnalysis; + +namespace System.ComponentModel.DataAnnotations { + internal static class AppSettings { +#if MONO + internal static readonly bool DisableRegEx = false; +#else + private static volatile bool _settingsInitialized = false; + private static object _appSettingsLock = new object(); + private static void EnsureSettingsLoaded() { + if (!_settingsInitialized) { + lock (_appSettingsLock) { + if (!_settingsInitialized) { + NameValueCollection settings = null; + + try { + settings = ConfigurationManager.AppSettings; + } + catch (ConfigurationErrorsException) { } + finally { + if (settings == null || !Boolean.TryParse(settings["dataAnnotations:dataTypeAttribute:disableRegEx"], out _disableRegEx)) + _disableRegEx = false; + + _settingsInitialized = true; + } + } + } + } + } + + private static bool _disableRegEx; + internal static bool DisableRegEx { + get { + EnsureSettingsLoaded(); + return _disableRegEx; + } + } +#endif + } +} diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/CreditCardAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/CreditCardAttribute.cs index a67feda81d..b071cf9acd 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/CreditCardAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/CreditCardAttribute.cs @@ -9,7 +9,10 @@ public sealed class CreditCardAttribute : DataTypeAttribute { public CreditCardAttribute() : base(DataType.CreditCard) { - ErrorMessage = DataAnnotationsResources.CreditCardAttribute_Invalid; + + // DevDiv 468241: set DefaultErrorMessage not ErrorMessage, allowing user to set + // ErrorMessageResourceType and ErrorMessageResourceName to use localized messages. + DefaultErrorMessage = DataAnnotationsResources.CreditCardAttribute_Invalid; } public override bool IsValid(object value) { diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs index 4d667658ae..1e809619dc 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/EmailAddressAttribute.cs @@ -8,11 +8,14 @@ // This attribute provides server-side email validation equivalent to jquery validate, // and therefore shares the same regular expression. See unit tests for examples. - private static Regex _regex = new Regex(@"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); + private static Regex _regex = CreateRegEx(); public EmailAddressAttribute() : base(DataType.EmailAddress) { - ErrorMessage = DataAnnotationsResources.EmailAddressAttribute_Invalid; + + // DevDiv 468241: set DefaultErrorMessage not ErrorMessage, allowing user to set + // ErrorMessageResourceType and ErrorMessageResourceName to use localized messages. + DefaultErrorMessage = DataAnnotationsResources.EmailAddressAttribute_Invalid; } public override bool IsValid(object value) { @@ -21,7 +24,51 @@ } string valueAsString = value as string; - return valueAsString != null && _regex.Match(valueAsString).Length > 0; + + // Use RegEx implementation if it has been created, otherwise use a non RegEx version. + if (_regex != null) { + return valueAsString != null && _regex.Match(valueAsString).Length > 0; + } + else { + int atCount = 0; + + foreach (char c in valueAsString) { + if (c == '@') { + atCount++; + } + } + + return (valueAsString != null + && atCount == 1 + && valueAsString[0] != '@' + && valueAsString[valueAsString.Length - 1] != '@'); + } + } + + private static Regex CreateRegEx() { + // We only need to create the RegEx if this switch is enabled. + if (AppSettings.DisableRegEx) { + return null; + } + + const string pattern = @"^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$"; + const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture; + + // Set explicit regex match timeout, sufficient enough for email parsing + // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set + TimeSpan matchTimeout = TimeSpan.FromSeconds(2); + + try { + if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null) { + return new Regex(pattern, options, matchTimeout); + } + } + catch { + // Fallback on error + } + + // Legacy fallback (without explicit match timeout) + return new Regex(pattern, options); } } } diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/FileExtensionsAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/FileExtensionsAttribute.cs index 5644864486..93d9e2e151 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/FileExtensionsAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/FileExtensionsAttribute.cs @@ -14,7 +14,10 @@ namespace System.ComponentModel.DataAnnotations { public FileExtensionsAttribute() : base(DataType.Upload) { - ErrorMessage = DataAnnotationsResources.FileExtensionsAttribute_Invalid; + + // DevDiv 468241: set DefaultErrorMessage not ErrorMessage, allowing user to set + // ErrorMessageResourceType and ErrorMessageResourceName to use localized messages. + DefaultErrorMessage = DataAnnotationsResources.FileExtensionsAttribute_Invalid; } public string Extensions { diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/IValidatableObject.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/IValidatableObject.cs index 7bdca5cfa3..cbf5fe05d9 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/IValidatableObject.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/IValidatableObject.cs @@ -8,4 +8,4 @@ namespace System.ComponentModel.DataAnnotations { IEnumerable Validate(ValidationContext validationContext); } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/LocalAppContextSwitches.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/LocalAppContextSwitches.cs new file mode 100644 index 0000000000..20b80cfdef --- /dev/null +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/LocalAppContextSwitches.cs @@ -0,0 +1,28 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +namespace System.ComponentModel.DataAnnotations { + using System; + using System.Runtime.CompilerServices; + + // When adding a quirk, name it such that false is new behavior and true is old behavior. + // You are opting IN to old behavior. The new behavior is default. + // For example, we don't want to use legacy regex timeout for RegularExpressionAttribute in 4.6.1+. + // So we set UseLegacyRegExTimeout to true if running 4.6 or less. + internal static class LocalAppContextSwitches { + private const string UseLegacyRegExTimeoutString = "Switch.System.ComponentModel.DataAnnotations.RegularExpressionAttribute.UseLegacyRegExTimeout"; + private static int useLegacyRegExTimeout; + + public static bool UseLegacyRegExTimeout { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get { + return LocalAppContext.GetCachedSwitchValue(UseLegacyRegExTimeoutString, ref useLegacyRegExTimeout); + } + } + + public static void SetDefaultsLessOrEqual_46() { + // Define the switches that should be true for 4.6 or less, false for 4.6.1+. + LocalAppContext.DefineSwitchDefault(UseLegacyRegExTimeoutString, true); + } + } +} diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs index 926a1f58ea..597862d7b2 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/PhoneAttribute.cs @@ -6,11 +6,15 @@ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)] public sealed class PhoneAttribute : DataTypeAttribute { // see unit tests for examples - private static Regex _regex = new Regex(@"^(\+\s?)?((? 0; + + // Use RegEx implementation if it has been created, otherwise use a non RegEx version. + if (_regex != null) { + return valueAsString != null && _regex.Match(valueAsString).Length > 0; + } + else { + if (valueAsString == null) { + return false; + } + + valueAsString = valueAsString.Replace("+", string.Empty).TrimEnd(); + valueAsString = RemoveExtension(valueAsString); + + bool digitFound = false; + foreach (char c in valueAsString) { + if (Char.IsDigit(c)) { + digitFound = true; + break; + } + } + + if (!digitFound) { + return false; + } + + foreach (char c in valueAsString) + { + if (!(Char.IsDigit(c) + || Char.IsWhiteSpace(c) + || _additionalPhoneNumberCharacters.IndexOf(c) != -1)) { + return false; + } + } + return true; + } + } + + private static Regex CreateRegEx() { + // We only need to create the RegEx if this switch is enabled. + if (AppSettings.DisableRegEx) { + return null; + } + + const string pattern = @"^(\+\s?)?((?= 0) { + string extension = potentialPhoneNumber.Substring(lastIndexOfExtension + 4); + if (MatchesExtension(extension)) { + return potentialPhoneNumber.Substring(0, lastIndexOfExtension); + } + } + + lastIndexOfExtension = potentialPhoneNumber + .LastIndexOf("ext", StringComparison.InvariantCultureIgnoreCase); + if (lastIndexOfExtension >= 0) { + string extension = potentialPhoneNumber.Substring(lastIndexOfExtension + 3); + if (MatchesExtension(extension)) { + return potentialPhoneNumber.Substring(0, lastIndexOfExtension); + } + } + + + lastIndexOfExtension = potentialPhoneNumber + .LastIndexOf("x", StringComparison.InvariantCultureIgnoreCase); + if (lastIndexOfExtension >= 0) { + string extension = potentialPhoneNumber.Substring(lastIndexOfExtension + 1); + if (MatchesExtension(extension)) { + return potentialPhoneNumber.Substring(0, lastIndexOfExtension); + } + } + + return potentialPhoneNumber; + } + + private static bool MatchesExtension(string potentialExtension) { + potentialExtension = potentialExtension.TrimStart(); + if (potentialExtension.Length == 0) { + return false; + } + + foreach (char c in potentialExtension) { + if (!Char.IsDigit(c)) { + return false; + } + } + + return true; } } } diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/RegularExpressionAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/RegularExpressionAttribute.cs index 482df85520..cd4ac2683e 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/RegularExpressionAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/RegularExpressionAttribute.cs @@ -1,4 +1,4 @@ -using System.ComponentModel.DataAnnotations.Resources; +using System.ComponentModel.DataAnnotations.Resources; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Text.RegularExpressions; @@ -15,6 +15,12 @@ namespace System.ComponentModel.DataAnnotations { /// public string Pattern { get; private set; } + /// + /// Gets or sets the timeout to use when matching the regular expression pattern (in milliseconds) + /// (-1 means never timeout). + /// + public int MatchTimeoutInMilliseconds { get; set; } = GetDefaultTimeout(); + private Regex Regex { get; set; } /// @@ -77,13 +83,33 @@ namespace System.ComponentModel.DataAnnotations { /// /// is thrown if the current cannot be parsed /// is thrown if the current attribute is ill-formed. + /// thrown if is negative (except -1), + /// zero or greater than approximately 24 days private void SetupRegex() { if (this.Regex == null) { if (string.IsNullOrEmpty(this.Pattern)) { throw new InvalidOperationException(DataAnnotationsResources.RegularExpressionAttribute_Empty_Pattern); } - this.Regex = new Regex(this.Pattern); + Regex = MatchTimeoutInMilliseconds == -1 + ? new Regex(Pattern) + : Regex = new Regex(Pattern, default(RegexOptions), TimeSpan.FromMilliseconds((double)MatchTimeoutInMilliseconds)); } } + + /// + /// Returns the default MatchTimeout based on UseLegacyRegExTimeout switch. + /// + private static int GetDefaultTimeout() { +#if !MONO + if (LocalAppContextSwitches.UseLegacyRegExTimeout) { + return -1; + } + else +#endif + { + return 2000; + } + + } } } diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/ComplexTypeAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/ComplexTypeAttribute.cs index e2063b1c75..a1ab21924d 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/ComplexTypeAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/ComplexTypeAttribute.cs @@ -10,4 +10,4 @@ namespace System.ComponentModel.DataAnnotations.Schema { [SuppressMessage("Microsoft.Performance", "CA1813:AvoidUnsealedAttributes", Justification = "We want users to be able to extend this class")] public class ComplexTypeAttribute : Attribute { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/DatabaseGeneratedOption.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/DatabaseGeneratedOption.cs index ec47f9afbb..7e6df60e33 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/DatabaseGeneratedOption.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/DatabaseGeneratedOption.cs @@ -18,4 +18,4 @@ namespace System.ComponentModel.DataAnnotations.Schema { /// Computed } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/NotMappedAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/NotMappedAttribute.cs index 1463ed7371..2127d5eeb9 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/NotMappedAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/Schema/NotMappedAttribute.cs @@ -8,4 +8,4 @@ namespace System.ComponentModel.DataAnnotations.Schema { [SuppressMessage("Microsoft.Performance", "CA1813:AvoidUnsealedAttributes", Justification = "We want users to be able to extend this class")] public class NotMappedAttribute : Attribute { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/UrlAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/UrlAttribute.cs index e8f5376ddf..a6e0610428 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/UrlAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/UrlAttribute.cs @@ -8,11 +8,14 @@ // This attribute provides server-side url validation equivalent to jquery validate, // and therefore shares the same regular expression. See unit tests for examples. - private static Regex _regex = new Regex(@"^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); + private static Regex _regex = CreateRegEx(); public UrlAttribute() : base(DataType.Url) { - ErrorMessage = DataAnnotationsResources.UrlAttribute_Invalid; + + // DevDiv 468241: set DefaultErrorMessage not ErrorMessage, allowing user to set + // ErrorMessageResourceType and ErrorMessageResourceName to use localized messages. + DefaultErrorMessage = DataAnnotationsResources.UrlAttribute_Invalid; } public override bool IsValid(object value) { @@ -21,7 +24,44 @@ } string valueAsString = value as string; - return valueAsString != null && _regex.Match(valueAsString).Length > 0; + + // Use RegEx implementation if it has been created, otherwise use a non RegEx version. + if (_regex != null) { + return valueAsString != null && _regex.Match(valueAsString).Length > 0; + } + else { + return valueAsString != null && + (valueAsString.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) + || valueAsString.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase) + || valueAsString.StartsWith("ftp://", StringComparison.InvariantCultureIgnoreCase)); + } + } + + private static Regex CreateRegEx() { + // We only need to create the RegEx if this switch is enabled. + if (AppSettings.DisableRegEx) { + return null; + } + + const string pattern = @"^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$"; + + const RegexOptions options = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture; + + // Set explicit regex match timeout, sufficient enough for url parsing + // Unless the global REGEX_DEFAULT_MATCH_TIMEOUT is already set + TimeSpan matchTimeout = TimeSpan.FromSeconds(2); + + try { + if (AppDomain.CurrentDomain.GetData("REGEX_DEFAULT_MATCH_TIMEOUT") == null) { + return new Regex(pattern, options, matchTimeout); + } + } + catch { + // Fallback on error + } + + // Legacy fallback (without explicit match timeout) + return new Regex(pattern, options); } } } diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs index 8e3727e399..a8d7d4d05f 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/DataAnnotations/ValidationAttribute.cs @@ -21,8 +21,9 @@ namespace System.ComponentModel.DataAnnotations { private Func _errorMessageResourceAccessor; private string _errorMessageResourceName; private Type _errorMessageResourceType; - private bool _isCallingOverload; - private object _syncLock = new object(); + private string _defaultErrorMessage; + + private volatile bool _hasBaseIsValid; #endregion @@ -60,6 +61,31 @@ namespace System.ComponentModel.DataAnnotations { #endregion + #region Internal Properties + /// + /// Gets or sets and the default error message string. + /// This message will be used if the user has not set + /// or the and pair. + /// This property was added after the public contract for DataAnnotations was created. + /// It was added to fix DevDiv issue 468241. + /// It is internal to avoid changing the DataAnnotations contract. + /// + internal string DefaultErrorMessage + { + get + { + return this._defaultErrorMessage; + } + set + { + this._defaultErrorMessage = value; + this._errorMessageResourceAccessor = null; + this.CustomErrorMessageSet = true; + } + } + + #endregion + #region Protected Properties /// @@ -75,7 +101,7 @@ namespace System.ComponentModel.DataAnnotations { /// /// A flag indicating whether a developer has customized the attribute's error message by setting any one of - /// ErrorMessage, ErrorMessageResourceName, or ErrorMessageResourceType. + /// ErrorMessage, ErrorMessageResourceName, ErrorMessageResourceType or DefaultErrorMessage. /// internal bool CustomErrorMessageSet { get; @@ -105,12 +131,23 @@ namespace System.ComponentModel.DataAnnotations { /// public string ErrorMessage { get { - return this._errorMessage; + // DevDiv: 468241 + // If _errorMessage is not set, return the default. This is done to preserve + // behavior prior to the fix where ErrorMessage showed the non-null message to use. + return this._errorMessage ?? this._defaultErrorMessage; } set { this._errorMessage = value; this._errorMessageResourceAccessor = null; this.CustomErrorMessageSet = true; + + // DevDiv: 468241 + // Explicitly setting ErrorMessage also sets DefaultErrorMessage if null. + // This prevents subsequent read of ErrorMessage from returning default. + if (value == null) + { + this._defaultErrorMessage = null; + } } } @@ -163,14 +200,16 @@ namespace System.ComponentModel.DataAnnotations { /// is thrown if the current attribute is malformed. private void SetupResourceAccessor() { if (this._errorMessageResourceAccessor == null) { - string localErrorMessage = this._errorMessage; + string localErrorMessage = this.ErrorMessage; bool resourceNameSet = !string.IsNullOrEmpty(this._errorMessageResourceName); - bool errorMessageSet = !string.IsNullOrEmpty(localErrorMessage); + bool errorMessageSet = !string.IsNullOrEmpty(this._errorMessage); bool resourceTypeSet = this._errorMessageResourceType != null; + bool defaultMessageSet = !string.IsNullOrEmpty(this._defaultErrorMessage); - // Either ErrorMessageResourceName or ErrorMessage may be set, but not both. - // The following test checks both being set as well as both being not set. - if (resourceNameSet == errorMessageSet) { + // The following combinations are illegal and throw InvalidOperationException: + // 1) Both ErrorMessage and ErrorMessageResourceName are set, or + // 2) None of ErrorMessage, ErrorMessageReourceName, and DefaultErrorMessage are set. + if ((resourceNameSet && errorMessageSet) || !(resourceNameSet || errorMessageSet || defaultMessageSet)) { throw new InvalidOperationException(DataAnnotationsResources.ValidationAttribute_Cannot_Set_ErrorMessage_And_Resource); } @@ -281,20 +320,14 @@ namespace System.ComponentModel.DataAnnotations { #else internal #endif - virtual bool IsValid(object value) { - lock (this._syncLock) { - if (this._isCallingOverload) { - throw new NotImplementedException(DataAnnotationsResources.ValidationAttribute_IsValid_NotImplemented); - } else { - this._isCallingOverload = true; - - try { - return this.IsValid(value, null) == null; - } finally { - this._isCallingOverload = false; - } - } + virtual bool IsValid(object value) { + if(!this._hasBaseIsValid) { + // track that this method overload has not been overridden. + this._hasBaseIsValid = true; } + + // call overridden method. + return this.IsValid(value, null) == null; } #if !SILVERLIGHT @@ -336,25 +369,20 @@ namespace System.ComponentModel.DataAnnotations { /// #endif protected virtual ValidationResult IsValid(object value, ValidationContext validationContext) { - lock (this._syncLock) { - if (this._isCallingOverload) { - throw new NotImplementedException(DataAnnotationsResources.ValidationAttribute_IsValid_NotImplemented); - } else { - this._isCallingOverload = true; + if (this._hasBaseIsValid) { + // this means neither of the IsValid methods has been overriden, throw. + throw new NotImplementedException(DataAnnotationsResources.ValidationAttribute_IsValid_NotImplemented); + } + + ValidationResult result = ValidationResult.Success; - try { - ValidationResult result = ValidationResult.Success; - - if (!this.IsValid(value)) { - string[] memberNames = validationContext.MemberName != null ? new string[] { validationContext.MemberName } : null; - result = new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName), memberNames); - } - return result; - } finally { - this._isCallingOverload = false; - } - } + // call overridden method. + if (!this.IsValid(value)) { + string[] memberNames = validationContext.MemberName != null ? new string[] { validationContext.MemberName } : null; + result = new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName), memberNames); } + + return result; } /// diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/AppContextDefaultValues.cs b/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/AppContextDefaultValues.cs new file mode 100644 index 0000000000..8a130a0f34 --- /dev/null +++ b/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/AppContextDefaultValues.cs @@ -0,0 +1,169 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== +using System; +using System.Collections.Generic; + +namespace System +{ + internal static partial class AppContextDefaultValues + { + public static void PopulateDefaultValues() + { + string platformIdentifier, profile; + int version; + + ParseTargetFrameworkName(out platformIdentifier, out profile, out version); + + // Call into each library to populate their default switches + PopulateDefaultValuesPartial(platformIdentifier, profile, version); + } + + /// + /// We have this separate method for getting the parsed elements out of the TargetFrameworkName so we can + /// more easily support this on other platforms. + /// + private static void ParseTargetFrameworkName(out string identifier, out string profile, out int version) + { + string targetFrameworkMoniker = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName; + + // If we don't have a TFM then we should default to the 4.0 behavior where all quirks are turned on. + if (!TryParseFrameworkName(targetFrameworkMoniker, out identifier, out version, out profile)) + { +#if FEATURE_CORECLR + if (CompatibilitySwitches.UseLatestBehaviorWhenTFMNotSpecified) + { + // If we want to use the latest behavior it is enough to set the value of the switch to string.Empty. + // When the get to the caller of this method (PopulateDefaultValuesPartial) we are going to use the + // identifier we just set to decide which switches to turn on. By having an empty string as the + // identifier we are simply saying -- don't turn on any switches, and we are going to get the latest + // behavior for all the switches + identifier = string.Empty; + } + else +#endif + { + identifier = ".NETFramework"; + version = 40000; + profile = string.Empty; + } + } + } + + // This code was a constructor copied from the FrameworkName class, which is located in System.dll. + // Parses strings in the following format: ", Version=[v|V], Profile=" + // - The identifier and version is required, profile is optional + // - Only three components are allowed. + // - The version string must be in the System.Version format; an optional "v" or "V" prefix is allowed + private static bool TryParseFrameworkName(String frameworkName, out String identifier, out int version, out String profile) + { + // For parsing a target Framework moniker, from the FrameworkName class + const char c_componentSeparator = ','; + const char c_keyValueSeparator = '='; + const char c_versionValuePrefix = 'v'; + const String c_versionKey = "Version"; + const String c_profileKey = "Profile"; + + identifier = profile = string.Empty; + version = 0; + + if (frameworkName == null || frameworkName.Length == 0) + { + return false; + } + + String[] components = frameworkName.Split(c_componentSeparator); + version = 0; + + // Identifer and Version are required, Profile is optional. + if (components.Length < 2 || components.Length > 3) + { + return false; + } + + // + // 1) Parse the "Identifier", which must come first. Trim any whitespace + // + identifier = components[0].Trim(); + + if (identifier.Length == 0) + { + return false; + } + + bool versionFound = false; + profile = null; + + // + // The required "Version" and optional "Profile" component can be in any order + // + for (int i = 1; i < components.Length; i++) + { + // Get the key/value pair separated by '=' + string[] keyValuePair = components[i].Split(c_keyValueSeparator); + + if (keyValuePair.Length != 2) + { + return false; + } + + // Get the key and value, trimming any whitespace + string key = keyValuePair[0].Trim(); + string value = keyValuePair[1].Trim(); + + // + // 2) Parse the required "Version" key value + // + if (key.Equals(c_versionKey, StringComparison.OrdinalIgnoreCase)) + { + versionFound = true; + + // Allow the version to include a 'v' or 'V' prefix... + if (value.Length > 0 && (value[0] == c_versionValuePrefix || value[0] == 'V')) + { + value = value.Substring(1); + } + Version realVersion = new Version(value); + // The version class will represent some unset values as -1 internally (instead of 0). + version = realVersion.Major * 10000; + if (realVersion.Minor > 0) + version += realVersion.Minor * 100; + if (realVersion.Build > 0) + version += realVersion.Build; + } + // + // 3) Parse the optional "Profile" key value + // + else if (key.Equals(c_profileKey, StringComparison.OrdinalIgnoreCase)) + { + if (!String.IsNullOrEmpty(value)) + { + profile = value; + } + } + else + { + return false; + } + } + + if (!versionFound) + { + return false; + } + + return true; + } + + // This is a partial method. Platforms (such as Desktop) can provide an implementation of it that will read override value + // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls + // to it from the code + static partial void TryGetSwitchOverridePartial(string switchName, ref bool overrideFound, ref bool overrideValue); + + /// This is a partial method. This method is responsible for populating the default values based on a TFM. + /// It is partial because each library should define this method in their code to contain their defaults. + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version); + } +} diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/LocalAppContext.cs b/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/LocalAppContext.cs new file mode 100644 index 0000000000..f05b599ed3 --- /dev/null +++ b/external/referencesource/System.ComponentModel.DataAnnotations/InternalApis/Clr/inc/LocalAppContext.cs @@ -0,0 +1,128 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== + +// NOTE: This file should not be included in mscorlib. This should only be included in FX libraries that need to provide switches +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace System +{ + internal static partial class LocalAppContext + { + private delegate bool TryGetSwitchDelegate(string switchName, out bool value); + + private static TryGetSwitchDelegate TryGetSwitchFromCentralAppContext; + private static bool s_canForwardCalls; + + private static Dictionary s_switchMap = new Dictionary(); + private static readonly object s_syncLock = new object(); + + private static bool DisableCaching { get; set; } + + static LocalAppContext() + { + // Try to setup the callback into the central AppContext + s_canForwardCalls = SetupDelegate(); + + // Populate the default values of the local app context + AppContextDefaultValues.PopulateDefaultValues(); + + // Cache the value of the switch that help with testing + DisableCaching = IsSwitchEnabled(@"TestSwitch.LocalAppContext.DisableCaching"); + } + + public static bool IsSwitchEnabled(string switchName) + { + if (s_canForwardCalls) + { + bool isEnabledCentrally; + if (TryGetSwitchFromCentralAppContext(switchName, out isEnabledCentrally)) + { + // we found the switch, so return whatever value it has + return isEnabledCentrally; + } + // if we could not get the value from the central authority, try the local storage. + } + + return IsSwitchEnabledLocal(switchName); + } + + private static bool IsSwitchEnabledLocal(string switchName) + { + // read the value from the set of local defaults + bool isEnabled, isPresent; + lock (s_switchMap) + { + isPresent = s_switchMap.TryGetValue(switchName, out isEnabled); + } + + // If the value is in the set of local switches, reutrn the value + if (isPresent) + { + return isEnabled; + } + + // if we could not find the switch name, we should return 'false' + // This will preserve the concept of switches been 'off' unless explicitly set to 'on' + return false; + } + + private static bool SetupDelegate() + { + Type appContextType = typeof(object).Assembly.GetType("System.AppContext"); + if (appContextType == null) + return false; + + MethodInfo method = appContextType.GetMethod( + "TryGetSwitch", // the method name + BindingFlags.Static | BindingFlags.Public, // binding flags + null, // use the default binder + new Type[] { typeof(string), typeof(bool).MakeByRefType() }, + null); // parameterModifiers - this is ignored by the default binder + if (method == null) + return false; + + // Create delegate if we found the method. + TryGetSwitchFromCentralAppContext = (TryGetSwitchDelegate)Delegate.CreateDelegate(typeof(TryGetSwitchDelegate), method); + + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static bool GetCachedSwitchValue(string switchName, ref int switchValue) + { + if (switchValue < 0) return false; + if (switchValue > 0) return true; + + return GetCachedSwitchValueInternal(switchName, ref switchValue); + } + + private static bool GetCachedSwitchValueInternal(string switchName, ref int switchValue) + { + if (LocalAppContext.DisableCaching) + { + return LocalAppContext.IsSwitchEnabled(switchName); + } + + bool isEnabled = LocalAppContext.IsSwitchEnabled(switchName); + switchValue = isEnabled ? 1 /*true*/ : -1 /*false*/; + return isEnabled; + } + + /// + /// This method is going to be called from the AppContextDefaultValues class when setting up the + /// default values for the switches. !!!! This method is called during the static constructor so it does not + /// take a lock !!!! If you are planning to use this outside of that, please ensure proper locking. + /// + internal static void DefineSwitchDefault(string switchName, bool initialValue) + { + s_switchMap[switchName] = initialValue; + } + } +} diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/Properties/AssemblyInfo.cs b/external/referencesource/System.ComponentModel.DataAnnotations/Properties/AssemblyInfo.cs index fcd6198cd5..ecf6158fe5 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/Properties/AssemblyInfo.cs +++ b/external/referencesource/System.ComponentModel.DataAnnotations/Properties/AssemblyInfo.cs @@ -32,4 +32,4 @@ using System.Security; [assembly: CLSCompliant(true)] [assembly: AssemblyVersion("99.0.0.0")] [assembly: NeutralResourcesLanguage("en-US")] -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations.txt b/external/referencesource/System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations.txt index 48b500d603..eabcd33cce 100644 --- a/external/referencesource/System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations.txt +++ b/external/referencesource/System.ComponentModel.DataAnnotations/System.ComponentModel.DataAnnotations.txt @@ -18,3 +18,6 @@ ArgumentIsNullOrWhitespace=The argument '{0}' cannot be null, empty or contain o RequiredAttribute_ValidationError=The {0} field is required. CompareAttribute_MustMatch='{0}' and '{1}' do not match. + +RegexAttribute_ValidationError=The field {0} must match the regular expression '{1}'. + diff --git a/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationCollection.cs b/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationCollection.cs index 14a4f5253f..1fd7e32bbf 100644 --- a/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationCollection.cs +++ b/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationCollection.cs @@ -89,4 +89,4 @@ namespace System.Configuration { } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationElement.cs b/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationElement.cs index 666cb52e96..3e4b0d5142 100644 --- a/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationElement.cs +++ b/external/referencesource/System.Configuration/System/Configuration/DateTimeConfigurationElement.cs @@ -82,4 +82,4 @@ namespace System.Configuration { } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Configuration/System/Configuration/FipsAwareEncryptedXml.cs b/external/referencesource/System.Configuration/System/Configuration/FipsAwareEncryptedXml.cs new file mode 100644 index 0000000000..ce7a3a24c3 --- /dev/null +++ b/external/referencesource/System.Configuration/System/Configuration/FipsAwareEncryptedXml.cs @@ -0,0 +1,75 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ + +namespace System.Configuration { + using System.Collections; + using System.Security.Cryptography; + using System.Security.Cryptography.Xml; + using System.Xml; + + // + // Extends EncryptedXml to use FIPS-certified symmetric algorithm + // + class FipsAwareEncryptedXml : EncryptedXml { + + public FipsAwareEncryptedXml(XmlDocument doc) + : base(doc) { + } + + // Override EncryptedXml.GetDecryptionKey to avoid calling into CryptoConfig.CreateFromName + // When detect AES, we need to return AesCryptoServiceProvider (FIPS certified) instead of AesManaged (FIPS obsolated) + public override SymmetricAlgorithm GetDecryptionKey(EncryptedData encryptedData, string symmetricAlgorithmUri) { + + // If AES is used then assume FIPS is required + bool fipsRequired = IsAesDetected(encryptedData, symmetricAlgorithmUri); + + if (fipsRequired) { + // Obtain the EncryptedKey + EncryptedKey ek = null; + + foreach (var ki in encryptedData.KeyInfo) { + KeyInfoEncryptedKey kiEncKey = ki as KeyInfoEncryptedKey; + if (kiEncKey != null) { + ek = kiEncKey.EncryptedKey; + break; + } + } + + // Got an EncryptedKey, decrypt it to get the AES key + if (ek != null) { + byte[] key = DecryptEncryptedKey(ek); + + // Construct FIPS-certified AES provider + if (key != null) { + AesCryptoServiceProvider aes = new AesCryptoServiceProvider(); + aes.Key = key; + + return aes; + } + } + } + + // Fallback to the base implementation + return base.GetDecryptionKey(encryptedData, symmetricAlgorithmUri); + } + + private static bool IsAesDetected(EncryptedData encryptedData, string symmetricAlgorithmUri) { + if (encryptedData != null && + encryptedData.KeyInfo != null && + (symmetricAlgorithmUri != null || encryptedData.EncryptionMethod != null)) { + + if (symmetricAlgorithmUri == null) { + symmetricAlgorithmUri = encryptedData.EncryptionMethod.KeyAlgorithm; + } + + // Check if the Uri matches AES256 + return string.Equals(symmetricAlgorithmUri, EncryptedXml.XmlEncAES256Url, StringComparison.InvariantCultureIgnoreCase); + } + + return false; + } + } +} diff --git a/external/referencesource/System.Configuration/System/Configuration/RSAProtectedConfigurationProvider.cs b/external/referencesource/System.Configuration/System/Configuration/RSAProtectedConfigurationProvider.cs index 5f3d6a67cf..33fd93ca89 100644 --- a/external/referencesource/System.Configuration/System/Configuration/RSAProtectedConfigurationProvider.cs +++ b/external/referencesource/System.Configuration/System/Configuration/RSAProtectedConfigurationProvider.cs @@ -32,7 +32,7 @@ namespace System.Configuration xmlDocument.PreserveWhitespace = true; xmlDocument.LoadXml(encryptedNode.OuterXml); - exml = new EncryptedXml(xmlDocument); + exml = new FipsAwareEncryptedXml(xmlDocument); exml.AddKeyNameMapping(_KeyName, rsa); exml.DecryptDocument(); rsa.Clear(); @@ -46,13 +46,11 @@ namespace System.Configuration byte[] rgbOutput; EncryptedData ed; KeyInfoName kin; - SymmetricAlgorithm symAlg; EncryptedKey ek; KeyInfoEncryptedKey kek; XmlElement inputElement; RSACryptoServiceProvider rsa = GetCryptoServiceProvider(false, false); - // Encrypt the node with the new key xmlDocument = new XmlDocument(); xmlDocument.PreserveWhitespace = true; @@ -60,23 +58,20 @@ namespace System.Configuration exml = new EncryptedXml(xmlDocument); inputElement = xmlDocument.DocumentElement; - // Create a new 3DES key - symAlg = new TripleDESCryptoServiceProvider(); - byte[] rgbKey1 = GetRandomKey(); - symAlg.Key = rgbKey1; - symAlg.Mode = CipherMode.ECB; - symAlg.Padding = PaddingMode.PKCS7; - rgbOutput = exml.EncryptData(inputElement, symAlg, true); - ed = new EncryptedData(); - ed.Type = EncryptedXml.XmlEncElementUrl; - ed.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl); - ed.KeyInfo = new KeyInfo(); + using (SymmetricAlgorithm symAlg = GetSymAlgorithmProvider()) { + rgbOutput = exml.EncryptData(inputElement, symAlg, true); + ed = new EncryptedData(); + ed.Type = EncryptedXml.XmlEncElementUrl; + ed.EncryptionMethod = GetSymEncryptionMethod(); + ed.KeyInfo = new KeyInfo(); + + ek = new EncryptedKey(); + ek.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url); + ek.KeyInfo = new KeyInfo(); + ek.CipherData = new CipherData(); + ek.CipherData.CipherValue = EncryptedXml.EncryptKey(symAlg.Key, rsa, UseOAEP); + } - ek = new EncryptedKey(); - ek.EncryptionMethod = new EncryptionMethod(EncryptedXml.XmlEncRSA15Url); - ek.KeyInfo = new KeyInfo(); - ek.CipherData = new CipherData(); - ek.CipherData.CipherValue = EncryptedXml.EncryptKey(symAlg.Key, rsa, UseOAEP); kin = new KeyInfoName(); kin.Value = _KeyName; ek.KeyInfo.AddClause(kin); @@ -85,6 +80,9 @@ namespace System.Configuration ed.CipherData = new CipherData(); ed.CipherData.CipherValue = rgbOutput; EncryptedXml.ReplaceElement(inputElement, ed, true); + + rsa.Clear(); + // Get node from the document foreach (XmlNode node2 in xmlDocument.ChildNodes) if (node2.NodeType == XmlNodeType.Element) @@ -129,6 +127,8 @@ namespace System.Configuration public string CspProviderName { get { return _CspProviderName; } } public bool UseMachineContainer { get { return _UseMachineContainer; } } public bool UseOAEP { get { return _UseOAEP; } } + public bool UseFIPS { get { return _UseFIPS; } } + public override void Initialize(string name, NameValueCollection configurationValues) { base.Initialize(name, configurationValues); @@ -143,6 +143,7 @@ namespace System.Configuration configurationValues.Remove("cspProviderName"); _UseMachineContainer = GetBooleanValue(configurationValues, "useMachineContainer", true); _UseOAEP = GetBooleanValue(configurationValues, "useOAEP", false); + _UseFIPS = GetBooleanValue(configurationValues, "useFIPS", false); if (configurationValues.Count > 0) throw new ConfigurationErrorsException(SR.GetString(SR.Unrecognized_initialization_value, configurationValues.GetKey(0))); } @@ -153,6 +154,7 @@ namespace System.Configuration private string _CspProviderName; private bool _UseMachineContainer; private bool _UseOAEP; + private bool _UseFIPS; public RSAParameters RsaPublicKey { get { return GetCryptoServiceProvider(false, false).ExportParameters(false); } } @@ -234,5 +236,30 @@ namespace System.Configuration return false; throw new ConfigurationErrorsException(SR.GetString(SR.Config_invalid_boolean_attribute, valueName)); } + + private SymmetricAlgorithm GetSymAlgorithmProvider() { + SymmetricAlgorithm symAlg; + + if (UseFIPS) { + // AesCryptoServiceProvider implementation is FIPS certified + symAlg = new AesCryptoServiceProvider(); + } + else { + // Use the 3DES. FIPS obsolated 3DES + symAlg = new TripleDESCryptoServiceProvider(); + + byte[] rgbKey1 = GetRandomKey(); + symAlg.Key = rgbKey1; + symAlg.Mode = CipherMode.ECB; + symAlg.Padding = PaddingMode.PKCS7; + } + + return symAlg; + } + + private EncryptionMethod GetSymEncryptionMethod() { + return UseFIPS ? new EncryptionMethod(EncryptedXml.XmlEncAES256Url) : + new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl); + } } } diff --git a/external/referencesource/System.Configuration/System/Configuration/TypeUtil.cs b/external/referencesource/System.Configuration/System/Configuration/TypeUtil.cs index ce654da390..14af70f017 100644 --- a/external/referencesource/System.Configuration/System/Configuration/TypeUtil.cs +++ b/external/referencesource/System.Configuration/System/Configuration/TypeUtil.cs @@ -135,6 +135,7 @@ namespace System.Configuration { ilGen.Emit(OpCodes.Ldarg_0); // stack = { type } ilGen.Emit(OpCodes.Ldc_I4_1); // stack = { type, TRUE } ilGen.Emit(OpCodes.Call, typeof(Activator).GetMethod("CreateInstance", new Type[] { typeof(Type), typeof(bool) })); // stack = { retVal } + PreventTailCall(ilGen); // stack = { retVal } ilGen.Emit(OpCodes.Ret); var createInstanceDel = (Func)dm.CreateDelegate(typeof(Func)); return createInstanceDel(targetType); @@ -163,6 +164,7 @@ namespace System.Configuration { ilGen.Emit(OpCodes.Ldarg_0); // stack = { type } ilGen.Emit(OpCodes.Ldarg_1); // stack = { type, method } ilGen.Emit(OpCodes.Call, typeof(Delegate).GetMethod("CreateDelegate", new Type[] { typeof(Type), typeof(MethodInfo) })); // stack = { retVal } + PreventTailCall(ilGen); // stack = { retVal } ilGen.Emit(OpCodes.Ret); var createDelegateDel = (Func)dm.CreateDelegate(typeof(Func)); return createDelegateDel(delegateType, targetMethod); @@ -188,6 +190,17 @@ namespace System.Configuration { return new DynamicMethod("temp-dynamic-method", returnType, parameterTypes, owner); } + // DevDiv #736562: If a dynamic method tail-calls into Activator.CreateInstance or Delegate.CreateDelegate, it could + // modify stack frames in such a way that a stack walk fails when it should have succeeded. A volatile field read + // prevents reordering so ensures that the dynamic method cannot tail-call into these methods. + // + // Stack transitional behavior: unchanged. + private static void PreventTailCall(ILGenerator ilGen) { + ilGen.Emit(OpCodes.Volatile); + ilGen.Emit(OpCodes.Ldsfld, typeof(String).GetField("Empty")); + ilGen.Emit(OpCodes.Pop); + } + static internal ConstructorInfo GetConstructorWithReflectionPermission(Type type, Type baseType, bool throwOnError) { type = VerifyAssignableType(baseType, type, throwOnError); if (type == null) { diff --git a/external/referencesource/System.Core/BaselineExcludes.lst.cs.REMOVED.git-id b/external/referencesource/System.Core/BaselineExcludes.lst.cs.REMOVED.git-id index b1da805788..da96e24f63 100644 --- a/external/referencesource/System.Core/BaselineExcludes.lst.cs.REMOVED.git-id +++ b/external/referencesource/System.Core/BaselineExcludes.lst.cs.REMOVED.git-id @@ -1 +1 @@ -9b6cda1ef2f0ec69ddb4c682a32759face091e09 \ No newline at end of file +7e654aca3fad1551411b85be6048831bb7603646 \ No newline at end of file diff --git a/external/referencesource/System.Core/Microsoft/Scripting/Ast/DynamicExpression.cs b/external/referencesource/System.Core/Microsoft/Scripting/Ast/DynamicExpression.cs index c7bf9036a3..361d7eeda7 100644 --- a/external/referencesource/System.Core/Microsoft/Scripting/Ast/DynamicExpression.cs +++ b/external/referencesource/System.Core/Microsoft/Scripting/Ast/DynamicExpression.cs @@ -38,7 +38,8 @@ namespace System.Linq.Expressions { #if !SILVERLIGHT [DebuggerTypeProxy(typeof(Expression.DynamicExpressionProxy))] #endif - public class DynamicExpression : Expression, IArgumentProvider { + public class DynamicExpression : Expression, IDynamicExpression + { private readonly CallSiteBinder _binder; private readonly Type _delegateType; @@ -413,6 +414,16 @@ namespace System.Linq.Expressions { } #endif // !SILVERLIGHT || FEATURE_NETCORE #endregion + + Expression IDynamicExpression.Rewrite(Expression[] args) + { + return this.Rewrite(args); + } + + object IDynamicExpression.CreateCallSite() + { + return CallSite.Create(this.DelegateType, this.Binder); + } } #region Specialized Subclasses diff --git a/external/referencesource/System.Core/Microsoft/Scripting/Ast/IArgumentProvider.cs b/external/referencesource/System.Core/Microsoft/Scripting/Ast/IArgumentProvider.cs index c7d40c24c0..b023c23d38 100644 --- a/external/referencesource/System.Core/Microsoft/Scripting/Ast/IArgumentProvider.cs +++ b/external/referencesource/System.Core/Microsoft/Scripting/Ast/IArgumentProvider.cs @@ -55,7 +55,7 @@ namespace System.Linq.Expressions { /// an overloaded field enables us to both reduce memory usage as well as maintain compatibility and an /// easy to use external API. /// - internal interface IArgumentProvider { + public interface IArgumentProvider { Expression GetArgument(int index); int ArgumentCount { get; diff --git a/external/referencesource/System.Core/Microsoft/Scripting/Ast/IDynamicExpression.cs b/external/referencesource/System.Core/Microsoft/Scripting/Ast/IDynamicExpression.cs new file mode 100644 index 0000000000..70e2be4496 --- /dev/null +++ b/external/referencesource/System.Core/Microsoft/Scripting/Ast/IDynamicExpression.cs @@ -0,0 +1,49 @@ +/* **************************************************************************** + * + * Copyright (c) Microsoft Corporation. + * + * This source code is subject to terms and conditions of the Apache License, Version 2.0. A + * copy of the license can be found in the License.html file at the root of this distribution. If + * you cannot locate the Apache License, Version 2.0, please send an email to + * dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound + * by the terms of the Apache License, Version 2.0. + * + * You must not remove this notice, or any other, from this software. + * + * + * ***************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Text; + +#if CLR2 +namespace Microsoft.Scripting.Ast { + using Microsoft.Scripting.Utils; +#else +namespace System.Linq.Expressions +{ +#endif + + public interface IDynamicExpression : IArgumentProvider + { + /// + /// Gets the type of the delegate used by the CallSite />. + /// + Type DelegateType { get; } + + /// + /// Rewrite this node replacing the args with the provided values. The + /// number of the args needs to match the number of the current block. + /// + /// This helper is provided to allow re-writing of nodes to not depend on the specific + /// class of DynamicExpression which is being used. + /// + Expression Rewrite(Expression[] args); + + /// + /// Creates a CallSite for the node. + /// + object CreateCallSite(); + } +} \ No newline at end of file diff --git a/external/referencesource/System.Core/Microsoft/Scripting/Stubs.cs b/external/referencesource/System.Core/Microsoft/Scripting/Stubs.cs index b8e796f54f..08104e9fb2 100644 --- a/external/referencesource/System.Core/Microsoft/Scripting/Stubs.cs +++ b/external/referencesource/System.Core/Microsoft/Scripting/Stubs.cs @@ -209,4 +209,4 @@ namespace System { } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/BCryptSafeHandles.cs b/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/BCryptSafeHandles.cs index 638e9ca813..adcfe75a06 100644 --- a/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/BCryptSafeHandles.cs +++ b/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/BCryptSafeHandles.cs @@ -73,4 +73,22 @@ namespace Microsoft.Win32.SafeHandles { return success; } } + + /// + /// SafeHandle for a native BCRYPT_KEY_HANDLE. + /// + [SecuritySafeCritical] + internal sealed class SafeBCryptKeyHandle : SafeHandleZeroOrMinusOneIsInvalid { + internal SafeBCryptKeyHandle(): base(true){ } + + [DllImport("bcrypt.dll")] + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + [SuppressUnmanagedCodeSecurity] + internal static extern BCryptNative.ErrorCode BCryptDestroyKey(IntPtr hKey); + + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + protected override bool ReleaseHandle() { + return BCryptDestroyKey(handle) == BCryptNative.ErrorCode.Success; + } + } } diff --git a/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/CapiSafeHandles.cs b/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/CapiSafeHandles.cs index 7b577d04f2..16669900dc 100644 --- a/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/CapiSafeHandles.cs +++ b/external/referencesource/System.Core/Microsoft/Win32/SafeHandles/CapiSafeHandles.cs @@ -18,21 +18,27 @@ namespace Microsoft.Win32.SafeHandles { /// /// SafeHandle for buffers returned by the Axl APIs /// +#if !FEATURE_CORESYSTEM #pragma warning disable 618 // Have not migrated to v4 transparency yet [System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif internal sealed class SafeAxlBufferHandle : SafeHandleZeroOrMinusOneIsInvalid { private SafeAxlBufferHandle() : base(true) { return; } [DllImport("kernel32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] private static extern IntPtr GetProcessHeap(); [DllImport("kernel32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool HeapFree(IntPtr hHeap, int dwFlags, IntPtr lpMem); @@ -53,26 +59,43 @@ namespace Microsoft.Win32.SafeHandles { /// maintains a native refcount on its parent HCRYPTPROV to ensure that if the corresponding /// SafeCspKeyHandle is finalized first CAPI still keeps the provider alive. /// +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#else #pragma warning disable 618 // Have not migrated to v4 transparency yet [SecurityCritical(SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif internal abstract class SafeCapiHandleBase : SafeHandleZeroOrMinusOneIsInvalid { private IntPtr m_csp; +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] internal SafeCapiHandleBase() : base(true) { } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [DllImport("advapi32", SetLastError = true)] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptContextAddRef(IntPtr hProv, IntPtr pdwReserved, int dwFlags); +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [DllImport("advapi32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptReleaseContext(IntPtr hProv, int dwFlags); @@ -81,7 +104,9 @@ namespace Microsoft.Win32.SafeHandles { protected IntPtr ParentCsp { get { return m_csp; } +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif set { // We should not be resetting the parent CSP if it's already been set once - that will // lead to leaking the original handle. @@ -108,7 +133,12 @@ namespace Microsoft.Win32.SafeHandles { } } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] +#endif internal void SetParentCsp(SafeCspHandle parentCsp) { bool addedRef = false; RuntimeHelpers.PrepareConstrainedRegions(); @@ -124,8 +154,14 @@ namespace Microsoft.Win32.SafeHandles { } } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif protected abstract bool ReleaseCapiChildHandle(); +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif protected override sealed bool ReleaseHandle() { // Order is important here - we must destroy the child handle before the parent CSP bool destroyedChild = ReleaseCapiChildHandle(); @@ -142,10 +178,17 @@ namespace Microsoft.Win32.SafeHandles { /// /// SafeHandle for CAPI hash algorithms (HCRYPTHASH) /// +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#else #pragma warning disable 618 // Have not migrated to v4 transparency yet [System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif internal sealed class SafeCapiHashHandle : SafeCapiHandleBase { +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif private SafeCapiHashHandle() { } @@ -160,12 +203,20 @@ namespace Microsoft.Win32.SafeHandles { } } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [DllImport("advapi32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptDestroyHash(IntPtr hHash); +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif protected override bool ReleaseCapiChildHandle() { return CryptDestroyHash(handle); } @@ -174,10 +225,17 @@ namespace Microsoft.Win32.SafeHandles { /// /// SafeHandle for CAPI keys (HCRYPTKEY) /// +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#else #pragma warning disable 618 // Have not migrated to v4 transparency yet [System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif internal sealed class SafeCapiKeyHandle : SafeCapiHandleBase { +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif private SafeCapiKeyHandle() { } @@ -194,7 +252,11 @@ namespace Microsoft.Win32.SafeHandles { } [DllImport("advapi32")] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#else [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptDestroyKey(IntPtr hKey); @@ -203,6 +265,9 @@ namespace Microsoft.Win32.SafeHandles { /// Make a copy of this key handle /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif internal SafeCapiKeyHandle Duplicate() { Contract.Requires(!IsInvalid && !IsClosed); Contract.Ensures(Contract.Result() != null && !Contract.Result().IsInvalid && !Contract.Result().IsClosed); @@ -224,6 +289,9 @@ namespace Microsoft.Win32.SafeHandles { return duplicate; } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif protected override bool ReleaseCapiChildHandle() { return CryptDestroyKey(handle); } @@ -232,26 +300,43 @@ namespace Microsoft.Win32.SafeHandles { /// /// SafeHandle for crypto service providers (HCRYPTPROV) /// +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#else #pragma warning disable 618 // Have not migrated to v4 transparency yet [System.Security.SecurityCritical(System.Security.SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif internal sealed class SafeCspHandle : SafeHandleZeroOrMinusOneIsInvalid { [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif private SafeCspHandle() : base(true) { return; } [DllImport("advapi32", SetLastError = true)] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptContextAddRef(SafeCspHandle hProv, IntPtr pdwReserved, int dwFlags); [DllImport("advapi32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CryptReleaseContext(IntPtr hProv, int dwFlags); @@ -259,6 +344,9 @@ namespace Microsoft.Win32.SafeHandles { /// Create a second SafeCspHandle which refers to the same HCRYPTPROV /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif public SafeCspHandle Duplicate() { Contract.Requires(!IsInvalid && !IsClosed); @@ -308,6 +396,9 @@ namespace Microsoft.Win32.SafeHandles { } } +#if FEATURE_CORESYSTEM + [System.Security.SecurityCritical] +#endif protected override bool ReleaseHandle() { return CryptReleaseContext(handle, 0); } diff --git a/external/referencesource/System.Core/Microsoft/Win32/UnsafeNativeMethods.cs b/external/referencesource/System.Core/Microsoft/Win32/UnsafeNativeMethods.cs index fa5faaf065..5fba558def 100644 --- a/external/referencesource/System.Core/Microsoft/Win32/UnsafeNativeMethods.cs +++ b/external/referencesource/System.Core/Microsoft/Win32/UnsafeNativeMethods.cs @@ -438,7 +438,7 @@ namespace Microsoft.Win32 { // simultaneously: overlapped IO, free the memory for the overlapped // struct in a callback (or an EndRead method called by that callback), // and pass in an address for the numBytesRead parameter. - // See Windows Bug 105512 for details. -- + // < [DllImport(KERNEL32, SetLastError = true)] [SecurityCritical] @@ -456,7 +456,7 @@ namespace Microsoft.Win32 { // simultaneously: overlapped IO, free the memory for the overlapped // struct in a callback (or an EndWrite method called by that callback), // and pass in an address for the numBytesRead parameter. - // See Windows Bug 105512 for details. -- + // < [DllImport(KERNEL32, SetLastError = true)] [SecurityCritical] @@ -1474,19 +1474,24 @@ namespace Microsoft.Win32 { int pageProtectionMode ); - [DllImport(KERNEL32, CharSet = CharSet.Auto, SetLastError = true)] + [SecurityCritical] + internal static bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer) + { + lpBuffer.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX)); + return GlobalMemoryStatusExNative(ref lpBuffer); + } + + [DllImport(KERNEL32, CharSet = CharSet.Auto, SetLastError = true, EntryPoint = "GlobalMemoryStatusEx")] [SecurityCritical] [return: MarshalAs(UnmanagedType.Bool)] - internal static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer); + private static extern bool GlobalMemoryStatusExNative([In, Out] ref MEMORYSTATUSEX lpBuffer); + + [DllImport(KERNEL32, SetLastError = true)] + [SecurityCritical] + internal static unsafe extern bool CancelIoEx(SafeHandle handle, NativeOverlapped* lpOverlapped); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - internal class MEMORYSTATUSEX { - - [System.Security.SecurityCritical] - internal MEMORYSTATUSEX() { - this.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX)); - } - + internal struct MEMORYSTATUSEX { internal uint dwLength; internal uint dwMemoryLoad; internal ulong ullTotalPhys; diff --git a/external/referencesource/System.Core/System.Core.CLR.lst.cs.REMOVED.git-id b/external/referencesource/System.Core/System.Core.CLR.lst.cs.REMOVED.git-id index d2c2fc575a..ed77860919 100644 --- a/external/referencesource/System.Core/System.Core.CLR.lst.cs.REMOVED.git-id +++ b/external/referencesource/System.Core/System.Core.CLR.lst.cs.REMOVED.git-id @@ -1 +1 @@ -ded27b8e8b9c15fc9b7b4e1ece085f886cb28c11 \ No newline at end of file +07150ad804b6737d48b55bb7d2e3a8920819d508 \ No newline at end of file diff --git a/external/referencesource/System.Core/System.Core.dll.Triaged.lst.cs b/external/referencesource/System.Core/System.Core.dll.Triaged.lst.cs index 7569c7423e..ad3ebb3a67 100644 --- a/external/referencesource/System.Core/System.Core.dll.Triaged.lst.cs +++ b/external/referencesource/System.Core/System.Core.dll.Triaged.lst.cs @@ -1,53 +1,53 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "Member", Target = "System.SR.Resources.get_Resources():System.Resources.ResourceManager", Justification = "[....]:The assembly uses the ResourceManager. Fixing this error is more trouble than it is worth.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "Member", Target = "System.SR.GetObject(System.String):System.Object", Justification = "[....]:The assembly uses the ResourceManager. Fixing this error is more trouble than it is worth.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryGetLocalizedNameByMuiNativeResource(System.String):System.String", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.GetSystemTimeZones():System.Collections.ObjectModel.ReadOnlyCollection`1", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity", Scope = "Member", Target = "System.TimeZoneInfo.TryGetLocalizedNameByMuiNativeResource(System.String):System.String", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryGetTimeZoneByRegistryKey(System.String,System.TimeZoneInfo&,System.Exception&):System.TimeZoneInfo+TimeZoneInfoResult", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.CheckDaylightSavingTimeDisabled():System.Boolean", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.FindIdFromTimeZoneInformation(Microsoft.Win32.NativeMethods+TimeZoneInformation,System.Boolean&):System.String", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryCompareTimeZoneInformationToRegistry(Microsoft.Win32.NativeMethods+TimeZoneInformation,System.String,System.Boolean&):System.Boolean", Justification = "[....]:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1805:DoNotInitializeUnnecessarily", Scope = "Member", Target = "System.Management.Instrumentation.ManagementReferenceAttribute..ctor()", Justification = "[....]:FI cl 2523628 @ 2007/04/18 ")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Management", Justification = "[....]:FI cl 2523628 @ 2007/04/18")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNumericConversion(System.Reflection.Emit.ILGenerator,System.Type,System.Type,System.Boolean):System.Void", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateUnliftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateLiftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Type,System.Boolean,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.Expression.MakeBinary(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression):System.Linq.Expressions.BinaryExpression", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNullableToReferenceConversion(System.Reflection.Emit.ILGenerator,System.Type):System.Void", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateUnliftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", MessageId = "ask", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNumericConversion(System.Reflection.Emit.ILGenerator,System.Type,System.Type,System.Boolean):System.Void", Justification = "[....]:FI 20521")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Diagnostics", Justification = "[....]:This is a old namespace and is an extension of system.dll. We will most certainly have more types here going forward")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Scope = "Member", Target = "System.IO.LogStream._Init(System.String,System.Int32,System.IO.FileShare,Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES,System.Security.Permissions.FileIOPermissionAccess,System.IO.FileMode,System.Int32,System.Boolean):System.Void", Justification = "[....]:This rule is noisy, we already check it inside handle.IsInvalid case immediately after the P/Invoke to create file")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Init():System.Void", Justification = "[....]:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener+TraceWriter.Write(System.String):System.Void", Justification = "[....]:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.EnsureWriter():System.Boolean", Justification = "[....]:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.IO.LogStream.EnforceRetentionPolicy(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int64):System.Void", Justification = "[....]:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", Justification = "[....]:We are just handing out ActivityId which shouldn't require extra permission. ")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.IO.LogStream.GetSecAttrs(System.IO.FileShare):Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES", Justification = "[....]:This is well contained")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2002:DoNotLockOnObjectsWithWeakIdentity", Scope = "Member", Target = "System.IO.LogStream.EnforceRetentionPolicy(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int64):System.Void", Justification = "[....]:This is fine here")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2002:DoNotLockOnObjectsWithWeakIdentity", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Init():System.Void", Justification = "[....]:This is fine here")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized ")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.TraceData(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object[]):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.TraceData(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildMessage(System.Text.StringBuilder,System.String):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildFooter(System.Text.StringBuilder,System.Diagnostics.TraceEventType,System.Diagnostics.TraceEventCache,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "[....]:The event schema XML tags can't be localized")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes", Scope = "Member", Target = "System.IO.LogStream.WriteFileNative(System.Byte[],System.Int32,System.Int32,System.Threading.NativeOverlapped*,System.Int32&):System.Int32", Justification = "[....]:This is intentional and indicative of ---- in our code")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.UnescapedXmlDiagnosticData.UnescapedXml", MessageId = "Unescaped", Justification = "[....]:This is fine and widely referred so")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.UnescapedXmlDiagnosticData", MessageId = "Unescaped", Justification = "[....]:This is fine and widely referred so")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2204:LiteralsShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "apos", Justification = "[....]:This is an industry standard literal")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2204:LiteralsShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "quot", Justification = "[....]:This is an industry standard literal")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.IO.BufferedStream2.FlushRead():System.Void", Justification = "[....]:This functionality is no-op at present, pending stream re-factoring work")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "source", Justification = "[....]:This is provided for consistency")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA2101:SpecifyMarshalingForPInvokeStringArguments", Scope = "Member", Target = "Microsoft.Win32.UnsafeNativeMethods.CreateFile(System.String,System.Int32,System.IO.FileShare,Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES,System.IO.FileMode,System.Int32,System.IntPtr):Microsoft.Win32.SafeHandles.SafeFileHandle", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Writer.set_Writer(System.IO.TextWriter):System.Void", Justification = "[....]:This is for hiding base class method, bounded by contract")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Writer.set_Writer(System.IO.TextWriter):System.Void", MessageId = "value", Justification = "[....]:This is for hiding base class method, bounded by contract")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1802:UseLiteralsWhereAppropriate", Scope = "Member", Target = "Microsoft.Win32.UnsafeNativeMethods.NULL", Justification = "[....]:IntPtr' cannot be declared as const")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn.Pipeline", Justification = "[....]:Approval was granted")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn.Hosting", Justification = "[....]:Approval was granted")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn", Justification = "[....]:Approval was granted")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Security", Justification = "[....]:System.Security is also defined in other assemblies")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "Member", Target = "System.SR.Resources.get_Resources():System.Resources.ResourceManager", Justification = "jfree:The assembly uses the ResourceManager. Fixing this error is more trouble than it is worth.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "Member", Target = "System.SR.GetObject(System.String):System.Object", Justification = "jfree:The assembly uses the ResourceManager. Fixing this error is more trouble than it is worth.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryGetLocalizedNameByMuiNativeResource(System.String):System.String", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.GetSystemTimeZones():System.Collections.ObjectModel.ReadOnlyCollection`1", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2103:ReviewImperativeSecurity", Scope = "Member", Target = "System.TimeZoneInfo.TryGetLocalizedNameByMuiNativeResource(System.String):System.String", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryGetTimeZoneByRegistryKey(System.String,System.TimeZoneInfo&,System.Exception&):System.TimeZoneInfo+TimeZoneInfoResult", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.CheckDaylightSavingTimeDisabled():System.Boolean", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.FindIdFromTimeZoneInformation(Microsoft.Win32.NativeMethods+TimeZoneInformation,System.Boolean&):System.String", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2106:SecureAsserts", Scope = "Member", Target = "System.TimeZoneInfo.TryCompareTimeZoneInformationToRegistry(Microsoft.Win32.NativeMethods+TimeZoneInformation,System.String,System.Boolean&):System.Boolean", Justification = "jfree:Asserting permissions reviewed in threat model. see DevDiv Bugs number 24274")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1805:DoNotInitializeUnnecessarily", Scope = "Member", Target = "System.Management.Instrumentation.ManagementReferenceAttribute..ctor()", Justification = "clrgnt:FI cl 2523628 @ 2007/04/18 ")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Management", Justification = "clrgnt:FI cl 2523628 @ 2007/04/18")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNumericConversion(System.Reflection.Emit.ILGenerator,System.Type,System.Type,System.Boolean):System.Void", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateUnliftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateLiftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Type,System.Boolean,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Linq.Expressions.Expression.MakeBinary(System.Linq.Expressions.ExpressionType,System.Linq.Expressions.Expression,System.Linq.Expressions.Expression,System.Boolean,System.Reflection.MethodInfo,System.Linq.Expressions.LambdaExpression):System.Linq.Expressions.BinaryExpression", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNullableToReferenceConversion(System.Reflection.Emit.ILGenerator,System.Type):System.Void", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateUnliftedBinaryOp(System.Reflection.Emit.ILGenerator,System.Linq.Expressions.ExpressionType,System.Type,System.Type,System.Linq.Expressions.ExpressionCompiler+StackType):System.Linq.Expressions.ExpressionCompiler+StackType", MessageId = "ask", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Linq.Expressions.ExpressionCompiler.GenerateNumericConversion(System.Reflection.Emit.ILGenerator,System.Type,System.Type,System.Boolean):System.Void", Justification = "clrgnt:FI 20521")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Diagnostics", Justification = "rkrish:This is a old namespace and is an extension of system.dll. We will most certainly have more types here going forward")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1404:CallGetLastErrorImmediatelyAfterPInvoke", Scope = "Member", Target = "System.IO.LogStream._Init(System.String,System.Int32,System.IO.FileShare,Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES,System.Security.Permissions.FileIOPermissionAccess,System.IO.FileMode,System.Int32,System.Boolean):System.Void", Justification = "rkrish:This rule is noisy, we already check it inside handle.IsInvalid case immediately after the P/Invoke to create file")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Init():System.Void", Justification = "rkrish:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener+TraceWriter.Write(System.String):System.Void", Justification = "rkrish:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.EnsureWriter():System.Boolean", Justification = "rkrish:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Scope = "Member", Target = "System.IO.LogStream.EnforceRetentionPolicy(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int64):System.Void", Justification = "rkrish:This is intentional, such that we don't escape exception from tracing calls. App should never crash for benign tracing failures!")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", Justification = "rkrish:We are just handing out ActivityId which shouldn't require extra permission. ")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.IO.LogStream.GetSecAttrs(System.IO.FileShare):Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES", Justification = "rkrish:This is well contained")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2002:DoNotLockOnObjectsWithWeakIdentity", Scope = "Member", Target = "System.IO.LogStream.EnforceRetentionPolicy(Microsoft.Win32.SafeHandles.SafeFileHandle,System.Int64):System.Void", Justification = "rkrish:This is fine here")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2002:DoNotLockOnObjectsWithWeakIdentity", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Init():System.Void", Justification = "rkrish:This is fine here")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized ")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.TraceData(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object[]):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.TraceData(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildMessage(System.Text.StringBuilder,System.String):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildFooter(System.Text.StringBuilder,System.Diagnostics.TraceEventType,System.Diagnostics.TraceEventCache,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "System.Diagnostics.EventSchemaTraceListener._InternalBuildRaw(System.Text.StringBuilder,System.String)", Justification = "rkrish:The event schema XML tags can't be localized")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes", Scope = "Member", Target = "System.IO.LogStream.WriteFileNative(System.Byte[],System.Int32,System.Int32,System.Threading.NativeOverlapped*,System.Int32&):System.Int32", Justification = "rkrish:This is intentional and indicative of race in our code")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.UnescapedXmlDiagnosticData.UnescapedXml", MessageId = "Unescaped", Justification = "rkrish:This is fine and widely referred so")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.UnescapedXmlDiagnosticData", MessageId = "Unescaped", Justification = "rkrish:This is fine and widely referred so")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2204:LiteralsShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "apos", Justification = "rkrish:This is an industry standard literal")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2204:LiteralsShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildEscaped(System.Text.StringBuilder,System.String):System.Void", MessageId = "quot", Justification = "rkrish:This is an industry standard literal")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.IO.BufferedStream2.FlushRead():System.Void", Justification = "rkrish:This functionality is no-op at present, pending stream re-factoring work")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.BuildHeader(System.Text.StringBuilder,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Diagnostics.TraceEventCache,System.String,System.Boolean,System.Diagnostics.TraceOptions):System.Void", MessageId = "source", Justification = "rkrish:This is provided for consistency")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA2101:SpecifyMarshalingForPInvokeStringArguments", Scope = "Member", Target = "Microsoft.Win32.UnsafeNativeMethods.CreateFile(System.String,System.Int32,System.IO.FileShare,Microsoft.Win32.UnsafeNativeMethods+SECURITY_ATTRIBUTES,System.IO.FileMode,System.Int32,System.IntPtr):Microsoft.Win32.SafeHandles.SafeFileHandle", Justification = "rkrish:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Writer.set_Writer(System.IO.TextWriter):System.Void", Justification = "rkrish:This is for hiding base class method, bounded by contract")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Diagnostics.EventSchemaTraceListener.Writer.set_Writer(System.IO.TextWriter):System.Void", MessageId = "value", Justification = "rkrish:This is for hiding base class method, bounded by contract")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1802:UseLiteralsWhereAppropriate", Scope = "Member", Target = "Microsoft.Win32.UnsafeNativeMethods.NULL", Justification = "rkrish:IntPtr' cannot be declared as const")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn.Pipeline", Justification = "petes:Approval was granted")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn.Hosting", Justification = "petes:Approval was granted")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.AddIn", Justification = "petes:Approval was granted")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Security", Justification = "ShawnFa:System.Security is also defined in other assemblies")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "Namespace", Target = "System.Diagnostics.Eventing", Justification = "josesua:more classes will come into this name space")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.Diagnostics.Eventing.EventProvider.GetActivityId():System.Guid", Justification = "josesua:handing out ActivityId which shouldn't require extra permission.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1045:DoNotPassTypesByReference", Scope = "Member", Target = "System.Diagnostics.Eventing.EventProvider.SetActivityId(System.Guid&):System.Void", MessageId = "0#", Justification = "josesua:need to for performance")] @@ -109,52 +109,52 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.Diagnostics.PerformanceData.PerfProviderCollection.RemoveProvider(System.Guid):System.Void", Justification = "jenlc:Force PerfStopProvider() being called.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "Member", Target = "System.Diagnostics.PerformanceData.CounterSetInstanceCounterDataSet.Dispose(System.Boolean):System.Void", Justification = "jenlc:Explicitly free allocated heap memory.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "Member", Target = "System.Diagnostics.PerformanceData.CounterSetInstanceCounterDataSet.Dispose(System.Boolean):System.Void", MessageId = "disposing", Justification = "jenlc:Dispose() pattern.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSetChannelConfigProperty(System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtChannelConfigPropertyId,System.Object):System.Void", Justification = "[....]:contains large switch statement for conversion, cannot reduce anymore.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.ConvertToObject(Microsoft.Win32.UnsafeNativeMethods+EvtVariant):System.Object", Justification = "[....]:contains large switch statement for conversion, cannot reduce anymore.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtRenderBufferWithContextSystem(System.Diagnostics.Eventing.Reader.EventLogHandle,System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtRenderFlags,System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties,System.Int32):System.Void", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtRenderBufferWithContextSystem(System.Diagnostics.Eventing.Reader.EventLogHandle,System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtRenderFlags,System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties,System.Int32):System.Void", Justification = "[....]:contains large switch statement for conversion, cannot reduce anymore.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSetChannelConfigProperty(System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtChannelConfigPropertyId,System.Object):System.Void", Justification = "[....]:cast occurs only once per case of switch statement.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "Type", Target = "System.Diagnostics.Eventing.Reader.PathType", Justification = "[....]:Need to match this enum up against a native API enum.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.ProviderMetadata.Opcodes", MessageId = "Opcodes", Justification = "[....]:OpCode is an existing name in eventlog world and would be more confusing to use different name.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogSession.GetProviderNames():System.Collections.Generic.IEnumerable`1", Justification = "[....]:The method performs a time-consuming operation. ")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogSession.GetLogNames():System.Collections.Generic.IEnumerable`1", Justification = "[....]:The method performs a time-consuming operation. ")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EvtVariant.StringVal", Justification = "[....]:reviewed usage - in one instance unmanaged memory is owned/referenced by this member, but is appropriately freed in this case. It is not appropriate for this member to be SafeHandle for this one case.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderKeywords.get_ProviderKeywords():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderLatency.get_ProviderLatency():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderBufferSize.get_ProviderBufferSize():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderMinimumNumberOfBuffers.get_ProviderMinimumNumberOfBuffers():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderMaximumNumberOfBuffers.get_ProviderMaximumNumberOfBuffers():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogInformation..ctor(System.Diagnostics.Eventing.Reader.EventLogSession,System.String,System.Diagnostics.Eventing.Reader.PathType)", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderLevel.get_ProviderLevel():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.Sqm", MessageId = "Sqm", Justification = "[....]:This is an acronym.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.WdiContext", MessageId = "Wdi", Justification = "[....]:This is an acronym.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.WdiDiagnostic", MessageId = "Wdi", Justification = "[....]:This is an acronym.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader", MessageId = "Eventing", Justification = "[....]:'Eventing' is already used in an approved namespace : System.Diagnostics.Eventing")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.Diagnostics.Eventing.Reader", Justification = "[....]:Namespace approved by BCL team.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Keywords", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.ProcessId", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties..ctor()", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Id", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Task", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.ThreadId", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Qualifiers", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.RecordId", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Opcode.get_Opcode():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.ProcessId.get_ProcessId():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.RecordId.get_RecordId():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Task.get_Task():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.ThreadId.get_ThreadId():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Id.get_Id():System.Int32", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Keywords.get_Keywords():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Qualifiers.get_Qualifiers():System.Nullable`1", Justification = "[....]:use of nullable generics approved by BCL team in spec review.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Exists(System.Int32,System.Int32,System.Predicate`1):System.Boolean", Justification = "[....]:Delegates do not need our PZM hack. Confirmed with Jan Kotas, 10/2006")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.ForAll(System.Int32,System.Int32,System.Predicate`1):System.Boolean", Justification = "[....]:Delegates do not need our PZM hack. Confirmed with Jan Kotas, 10/2006")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.AssertOnReturn(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.AssertOnException(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Ensures(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Invariant(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.ThrowsEnsures(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "[....]:")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Threading.ReaderWriterLockSlim.TryEnterWriteLock(System.Int32):System.Boolean", Justification = "[....]:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSetChannelConfigProperty(System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtChannelConfigPropertyId,System.Object):System.Void", Justification = "pkenny:contains large switch statement for conversion, cannot reduce anymore.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.ConvertToObject(Microsoft.Win32.UnsafeNativeMethods+EvtVariant):System.Object", Justification = "pkenny:contains large switch statement for conversion, cannot reduce anymore.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtRenderBufferWithContextSystem(System.Diagnostics.Eventing.Reader.EventLogHandle,System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtRenderFlags,System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties,System.Int32):System.Void", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtRenderBufferWithContextSystem(System.Diagnostics.Eventing.Reader.EventLogHandle,System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtRenderFlags,System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties,System.Int32):System.Void", Justification = "pkenny:contains large switch statement for conversion, cannot reduce anymore.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper.EvtSetChannelConfigProperty(System.Diagnostics.Eventing.Reader.EventLogHandle,Microsoft.Win32.UnsafeNativeMethods+EvtChannelConfigPropertyId,System.Object):System.Void", Justification = "pkenny:cast occurs only once per case of switch statement.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Scope = "Type", Target = "System.Diagnostics.Eventing.Reader.PathType", Justification = "pkenny:Need to match this enum up against a native API enum.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.ProviderMetadata.Opcodes", MessageId = "Opcodes", Justification = "pkenny:OpCode is an existing name in eventlog world and would be more confusing to use different name.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogSession.GetProviderNames():System.Collections.Generic.IEnumerable`1", Justification = "pkenny:The method performs a time-consuming operation. ")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogSession.GetLogNames():System.Collections.Generic.IEnumerable`1", Justification = "pkenny:The method performs a time-consuming operation. ")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2006:UseSafeHandleToEncapsulateNativeResources", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EvtVariant.StringVal", Justification = "pkenny:reviewed usage - in one instance unmanaged memory is owned/referenced by this member, but is appropriately freed in this case. It is not appropriate for this member to be SafeHandle for this one case.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderKeywords.get_ProviderKeywords():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderLatency.get_ProviderLatency():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderBufferSize.get_ProviderBufferSize():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderMinimumNumberOfBuffers.get_ProviderMinimumNumberOfBuffers():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderMaximumNumberOfBuffers.get_ProviderMaximumNumberOfBuffers():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogInformation..ctor(System.Diagnostics.Eventing.Reader.EventLogSession,System.String,System.Diagnostics.Eventing.Reader.PathType)", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogConfiguration.ProviderLevel.get_ProviderLevel():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.Sqm", MessageId = "Sqm", Justification = "pkenny:This is an acronym.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.WdiContext", MessageId = "Wdi", Justification = "pkenny:This is an acronym.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.StandardEventKeywords.WdiDiagnostic", MessageId = "Wdi", Justification = "pkenny:This is an acronym.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader", MessageId = "Eventing", Justification = "pkenny:'Eventing' is already used in an approved namespace : System.Diagnostics.Eventing")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA905:SystemAndMicrosoftNamespacesRequireApproval", Scope = "Namespace", Target = "System.Diagnostics.Eventing.Reader", Justification = "pkenny:Namespace approved by BCL team.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Keywords", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.ProcessId", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties..ctor()", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Id", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Task", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.ThreadId", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.Qualifiers", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.NativeWrapper+SystemProperties.RecordId", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Opcode.get_Opcode():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.ProcessId.get_ProcessId():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.RecordId.get_RecordId():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Task.get_Task():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.ThreadId.get_ThreadId():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Id.get_Id():System.Int32", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Keywords.get_Keywords():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Eventing.Reader.EventLogRecord.Qualifiers.get_Qualifiers():System.Nullable`1", Justification = "pkenny:use of nullable generics approved by BCL team in spec review.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Exists(System.Int32,System.Int32,System.Predicate`1):System.Boolean", Justification = "briangru:Delegates do not need our PZM hack. Confirmed with Jan Kotas, 10/2006")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.MSInternal", "CA908:AvoidTypesThatRequireJitCompilationInPrecompiledAssemblies", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.ForAll(System.Int32,System.Int32,System.Predicate`1):System.Boolean", Justification = "briangru:Delegates do not need our PZM hack. Confirmed with Jan Kotas, 10/2006")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.AssertOnReturn(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "briangru:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.AssertOnException(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "briangru:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Ensures(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "briangru:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.Invariant(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "briangru:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "Member", Target = "System.Diagnostics.Contracts.Contract.ThrowsEnsures(System.Boolean):System.Void", MessageId = "System.String.Concat(System.String,System.String)", Justification = "briangru:")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity", Scope = "Member", Target = "System.Threading.ReaderWriterLockSlim.TryEnterWriteLock(System.Int32):System.Boolean", Justification = "sidharth:")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1710:IdentifiersShouldHaveCorrectSuffix", Scope="type", Target="System.Linq.OrderedParallelQuery`1", Justification="The name OrderedParallelQuery is more acceptable than the FXCop suggestion.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1720:IdentifiersShouldNotContainTypeNames", MessageId="long", Scope="member", Target="System.Linq.ParallelEnumerable.#LongCount`1(System.Linq.ParallelQuery`1)", Justification="This is for System.Linq.Enumerable.LongCount")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming","CA1720:IdentifiersShouldNotContainTypeNames", MessageId="long", Scope="member", Target="System.Linq.ParallelEnumerable.#LongCount`1(System.Linq.ParallelQuery`1,System.Func`2)", Justification="This is for System.Linq.Enumerable.LongCount")] diff --git a/external/referencesource/System.Core/System/Collections/Generic/HashSet.cs b/external/referencesource/System.Core/System/Collections/Generic/HashSet.cs index 889b638df3..95d4834c07 100644 --- a/external/referencesource/System.Core/System/Collections/Generic/HashSet.cs +++ b/external/referencesource/System.Core/System/Collections/Generic/HashSet.cs @@ -56,11 +56,11 @@ namespace System.Collections.Generic { [DebuggerDisplay("Count = {Count}")] [SuppressMessage("Microsoft.Naming","CA1710:IdentifiersShouldHaveCorrectSuffix", Justification="By design")] #if SILVERLIGHT - public class HashSet : ICollection, ISet + public class HashSet : ICollection, ISet, IReadOnlyCollection #else [Serializable()] [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] - public class HashSet : ICollection, ISerializable, IDeserializationCallback, ISet + public class HashSet : ICollection, ISerializable, IDeserializationCallback, ISet, IReadOnlyCollection #endif { @@ -303,7 +303,7 @@ namespace System.Collections.Generic { // need to serialize version to avoid problems with serializing while enumerating info.AddValue(VersionName, m_version); -#if FEATURE_RANDOMIZED_STRING_HASHING +#if FEATURE_RANDOMIZED_STRING_HASHING && !FEATURE_NETCORE info.AddValue(ComparerName, HashHelpers.GetEqualityComparerForSerialization(m_comparer), typeof(IEqualityComparer)); #else info.AddValue(ComparerName, m_comparer, typeof(IEqualityComparer)); @@ -962,14 +962,14 @@ namespace System.Collections.Generic { int hashCode = InternalGetHashCode(value); int bucket = hashCode % m_buckets.Length; -#if FEATURE_RANDOMIZED_STRING_HASHING +#if FEATURE_RANDOMIZED_STRING_HASHING && !FEATURE_NETCORE int collisionCount = 0; #endif for (int i = m_buckets[hashCode % m_buckets.Length] - 1; i >= 0; i = m_slots[i].next) { if (m_slots[i].hashCode == hashCode && m_comparer.Equals(m_slots[i].value, value)) { return false; } -#if FEATURE_RANDOMIZED_STRING_HASHING +#if FEATURE_RANDOMIZED_STRING_HASHING && !FEATURE_NETCORE collisionCount++; #endif } @@ -995,7 +995,7 @@ namespace System.Collections.Generic { m_count++; m_version++; -#if FEATURE_RANDOMIZED_STRING_HASHING +#if FEATURE_RANDOMIZED_STRING_HASHING && !FEATURE_NETCORE if(collisionCount > HashHelpers.HashCollisionThreshold && HashHelpers.IsWellKnownEqualityComparer(m_comparer)) { m_comparer = (IEqualityComparer) HashHelpers.GetRandomizedEqualityComparer(m_comparer); SetCapacity(m_buckets.Length, true); diff --git a/external/referencesource/System.Core/System/Diagnostics/Eventing/Reader/Winmeta.cs b/external/referencesource/System.Core/System/Diagnostics/Eventing/Reader/Winmeta.cs index 883eea188e..e8d96dcb3b 100644 --- a/external/referencesource/System.Core/System/Diagnostics/Eventing/Reader/Winmeta.cs +++ b/external/referencesource/System.Core/System/Diagnostics/Eventing/Reader/Winmeta.cs @@ -57,7 +57,7 @@ namespace System.Diagnostics.Eventing.Reader { /// /// EventOpcode /// - [SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="Opcode", Justification="[....]: Shipped public in 3.5, breaking change to fix now.")] + [SuppressMessage("Microsoft.Naming","CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId="Opcode", Justification="matell: Shipped public in 3.5, breaking change to fix now.")] public enum StandardEventOpcode { /// /// An informational event @@ -152,4 +152,4 @@ namespace System.Diagnostics.Eventing.Reader { /// EventLogClassic = 0x80000000000000 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/FuncAndAction.cs b/external/referencesource/System.Core/System/FuncAndAction.cs index ab43cd2d68..eaeca8fc9c 100644 --- a/external/referencesource/System.Core/System/FuncAndAction.cs +++ b/external/referencesource/System.Core/System/FuncAndAction.cs @@ -17,4 +17,4 @@ // Action and Func types exist in mscorlib (up to 8 generic argument paremeters) // and in System.Core.dll (See Microsoft\Scripting\Utils\[Action.cs | Function.cs]) -// for 9-16 generic argument parameter versions. +// for 9-16 generic argument parameter versions. \ No newline at end of file diff --git a/external/referencesource/System.Core/System/IO/Enums.cs b/external/referencesource/System.Core/System/IO/Enums.cs index c53835134c..bed84594e7 100644 --- a/external/referencesource/System.Core/System/IO/Enums.cs +++ b/external/referencesource/System.Core/System/IO/Enums.cs @@ -18,7 +18,9 @@ using System.Text; namespace System.IO { +#if !FEATURE_CORESYSTEM [Serializable] +#endif public enum HandleInheritability { None = 0, Inheritable = 1, diff --git a/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFile.cs b/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFile.cs index e1e2d1d2d7..274d98ad10 100644 --- a/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFile.cs +++ b/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedFile.cs @@ -181,6 +181,12 @@ namespace System.IO.MemoryMappedFiles { return new MemoryMappedFile(handle, fileStream, false); } + public static MemoryMappedFile CreateFromFile(FileStream fileStream, String mapName, Int64 capacity, + MemoryMappedFileAccess access, + HandleInheritability inheritability, bool leaveOpen) { + return CreateFromFile(fileStream, mapName, capacity, access, null, inheritability, leaveOpen); + } + [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] public static MemoryMappedFile CreateFromFile(FileStream fileStream, String mapName, Int64 capacity, @@ -250,6 +256,12 @@ namespace System.IO.MemoryMappedFiles { HandleInheritability.None); } + public static MemoryMappedFile CreateNew(String mapName, Int64 capacity, MemoryMappedFileAccess access, + MemoryMappedFileOptions options, + HandleInheritability inheritability) { + return CreateNew(mapName, capacity, access, options, null, inheritability); + } + [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] public static MemoryMappedFile CreateNew(String mapName, Int64 capacity, MemoryMappedFileAccess access, @@ -305,6 +317,12 @@ namespace System.IO.MemoryMappedFiles { return CreateOrOpen(mapName, capacity, access, MemoryMappedFileOptions.None, null, HandleInheritability.None); } + public static MemoryMappedFile CreateOrOpen(String mapName, Int64 capacity, + MemoryMappedFileAccess access, MemoryMappedFileOptions options, + HandleInheritability inheritability) { + return CreateOrOpen(mapName, capacity, access, options, null, inheritability); + } + [System.Security.SecurityCritical] [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] public static MemoryMappedFile CreateOrOpen(String mapName, Int64 capacity, diff --git a/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedView.cs b/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedView.cs index 19bfac4949..98e30f009f 100644 --- a/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedView.cs +++ b/external/referencesource/System.Core/System/IO/MemoryMappedFiles/MemoryMappedView.cs @@ -102,7 +102,7 @@ namespace System.IO.MemoryMappedFiles { // if request is >= than total virtual, then MapViewOfFile will fail with meaningless error message // "the parameter is incorrect"; this provides better error message in advance UnsafeNativeMethods.MEMORYSTATUSEX memStatus = new UnsafeNativeMethods.MEMORYSTATUSEX(); - bool result = UnsafeNativeMethods.GlobalMemoryStatusEx(memStatus); + bool result = UnsafeNativeMethods.GlobalMemoryStatusEx(ref memStatus); ulong totalVirtual = memStatus.ullTotalVirtual; if (nativeSize >= totalVirtual) { throw new IOException(SR.GetString(SR.IO_NotEnoughMemory)); @@ -125,14 +125,32 @@ namespace System.IO.MemoryMappedFiles { ulong viewSize = (ulong)viewInfo.RegionSize; - // allocate the pages if we were using the MemoryMappedFileOptions.DelayAllocatePages option - if ((viewInfo.State & UnsafeNativeMethods.MEM_RESERVE) != 0) { - IntPtr tempHandle = UnsafeNativeMethods.VirtualAlloc(viewHandle, (UIntPtr)viewSize, UnsafeNativeMethods.MEM_COMMIT, + // Allocate the pages if we were using the MemoryMappedFileOptions.DelayAllocatePages option + // OR check if the allocated view size is smaller than the expected native size + // If multiple overlapping views are created over the file mapping object, the pages in a given region + // could have different attributes(MEM_RESERVE OR MEM_COMMIT) as MapViewOfFile preserves coherence between + // views created on a mapping object backed by same file. + // In which case, the viewSize will be smaller than nativeSize required and viewState could be MEM_COMMIT + // but more pages may need to be committed in the region. + // This is because, VirtualQuery function(that internally invokes VirtualQueryEx function) returns the attributes + // and size of the region of pages with matching attributes starting from base address. + // VirtualQueryEx: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366907(v=vs.85).aspx + if (((viewInfo.State & UnsafeNativeMethods.MEM_RESERVE) != 0) || (viewSize < nativeSize)) { + ulong allocSize = (nativeSize == 0) ? viewSize : nativeSize; + IntPtr tempHandle = UnsafeNativeMethods.VirtualAlloc(viewHandle, (UIntPtr)allocSize, UnsafeNativeMethods.MEM_COMMIT, MemoryMappedFile.GetPageAccess(access)); int lastError = Marshal.GetLastWin32Error(); - if (viewHandle.IsInvalid) { - __Error.WinIOError(lastError, String.Empty); - } + // The following is commented out for backward compatibility. + // Previously releases failed to check for this error so introducing this check + // could cause new/different exceptions in existing code paths. + // if (tempHandle == IntPtr.Zero) { + // __Error.WinIOError(lastError, String.Empty); + // } + + // again query the view for its new size + viewInfo = new UnsafeNativeMethods.MEMORY_BASIC_INFORMATION(); + UnsafeNativeMethods.VirtualQuery(viewHandle, ref viewInfo, (IntPtr)Marshal.SizeOf(viewInfo)); + viewSize = (ulong)viewInfo.RegionSize; } // if the user specified DefaultSize as the size, we need to get the actual size diff --git a/external/referencesource/System.Core/System/IO/Pipes/IOCancellationHelper.cs b/external/referencesource/System.Core/System/IO/Pipes/IOCancellationHelper.cs new file mode 100644 index 0000000000..3c6d42bdc2 --- /dev/null +++ b/external/referencesource/System.Core/System/IO/Pipes/IOCancellationHelper.cs @@ -0,0 +1,99 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ +using System.Diagnostics; +using System.Diagnostics.Contracts; +using System.Runtime.InteropServices; +using System.Security; +using System.Threading; +using UnsafeNativeMethods = Microsoft.Win32.UnsafeNativeMethods; + +namespace System.IO.Pipes { + internal unsafe class IOCancellationHelper { + private CancellationToken _cancellationToken; + private CancellationTokenRegistration _cancellationRegistration; + [SecurityCritical] + private SafeHandle _handle; + [SecurityCritical] + private NativeOverlapped* _overlapped; + + public IOCancellationHelper(CancellationToken cancellationToken) { + this._cancellationToken = cancellationToken; + } + + /// + /// Marking that from this moment on + /// user can cancel operation using cancellationToken + /// + [SecurityCritical] + public void AllowCancellation(SafeHandle handle, NativeOverlapped* overlapped) { + Contract.Assert(handle != null, "Handle cannot be null"); + Contract.Assert(!handle.IsInvalid, "Handle cannot be invalid"); + Contract.Assert(overlapped != null, "Overlapped cannot be null"); + Contract.Assert(this._handle == null && this._overlapped == null, "Cancellation is already allowed."); + + if (!_cancellationToken.CanBeCanceled) { + return; + } + + this._handle = handle; + this._overlapped = overlapped; + if (this._cancellationToken.IsCancellationRequested) { + this.Cancel(); + } + else { + this._cancellationRegistration = this._cancellationToken.Register(Cancel); + } + } + + /// + /// Marking that operation is completed and + /// from this moment cancellation is no longer possible. + /// This MUST happen before Overlapped is freed and Handle is disposed. + /// + [SecurityCritical] + public void SetOperationCompleted() { + if (this._overlapped != null) { + this._cancellationRegistration.Dispose(); + this._handle = null; + this._overlapped = null; + } + } + + public void ThrowIOOperationAborted() { + this._cancellationToken.ThrowIfCancellationRequested(); + + // If we didn't throw that means that this is unexpected abortion + __Error.OperationAborted(); + } + + /// + /// Cancellation is not guaranteed to succeed. + /// We ignore all errors here because operation could + /// succeed just before it was called or someone already + /// cancelled this operation without using token which should + /// be manually detected - when operation finishes we should + /// compare error code to ERROR_OPERATION_ABORTED and if cancellation + /// token was not used to cancel we will throw. + /// + [SecurityCritical] + private void Cancel() { + // Storing to locals to avoid data ----s + SafeHandle handle = this._handle; + NativeOverlapped* overlapped = this._overlapped; + if (handle != null && !handle.IsInvalid && overlapped != null) { + if (!UnsafeNativeMethods.CancelIoEx(handle, overlapped)) + { + // This case should not have any consequences although + // it will be easier to debug if there exists any special case + // we are not aware of. + int errorCode = Marshal.GetLastWin32Error(); + Debug.WriteLine("CancelIoEx finished with error code {0}.", errorCode); + } + SetOperationCompleted(); + } + } + } +} diff --git a/external/referencesource/System.Core/System/IO/Pipes/Pipe.cs b/external/referencesource/System.Core/System/IO/Pipes/Pipe.cs index 7e7df0033e..7880ffd20f 100644 --- a/external/referencesource/System.Core/System/IO/Pipes/Pipe.cs +++ b/external/referencesource/System.Core/System/IO/Pipes/Pipe.cs @@ -28,6 +28,7 @@ using System.Security.Permissions; using System.Security.Principal; using System.Text; using System.Threading; +using System.Threading.Tasks; using Microsoft.Win32; using Microsoft.Win32.SafeHandles; @@ -623,6 +624,24 @@ namespace System.IO.Pipes { } } + public Task WaitForConnectionAsync(CancellationToken cancellationToken) { + if (cancellationToken.IsCancellationRequested) { + return Task.FromCancellation(cancellationToken); + } + + if (!IsAsync) { + return Task.Factory.StartNew(WaitForConnection, cancellationToken); + } + + // Avoiding allocation if the task cannot be cancelled + IOCancellationHelper cancellationHelper = cancellationToken.CanBeCanceled ? new IOCancellationHelper(cancellationToken) : null; + return Task.Factory.FromAsync(BeginWaitForConnection, EndWaitForConnection, cancellationHelper); + } + + public Task WaitForConnectionAsync() { + return WaitForConnectionAsync(CancellationToken.None); + } + // Async version of WaitForConnection. See the comments above for more info. [System.Security.SecurityCritical] [HostProtection(ExternalThreading = true)] @@ -640,6 +659,8 @@ namespace System.IO.Pipes { asyncResult._userCallback = callback; asyncResult._userStateObject = state; + IOCancellationHelper cancellationHelper = state as IOCancellationHelper; + // Create wait handle and store in async result ManualResetEvent waitHandle = new ManualResetEvent(false); asyncResult._waitHandle = waitHandle; @@ -655,8 +676,12 @@ namespace System.IO.Pipes { if (!UnsafeNativeMethods.ConnectNamedPipe(InternalHandle, intOverlapped)) { int errorCode = Marshal.GetLastWin32Error(); - if (errorCode == UnsafeNativeMethods.ERROR_IO_PENDING) + if (errorCode == UnsafeNativeMethods.ERROR_IO_PENDING) { + if (cancellationHelper != null) { + cancellationHelper.AllowCancellation(InternalHandle, intOverlapped); + } return asyncResult; + } // WaitForConnectionCallback will not be called becasue we completed synchronously. // Either the pipe is already connected, or there was an error. Unpin and free the overlapped again. @@ -676,6 +701,9 @@ namespace System.IO.Pipes { __Error.WinIOError(errorCode, String.Empty); } // will set state to Connected when EndWait is called + if (cancellationHelper != null) { + cancellationHelper.AllowCancellation(InternalHandle, intOverlapped); + } return asyncResult; } @@ -704,6 +732,11 @@ namespace System.IO.Pipes { __Error.EndWaitForConnectionCalledTwice(); } + IOCancellationHelper cancellationHelper = afsar.AsyncState as IOCancellationHelper; + if (cancellationHelper != null) { + cancellationHelper.SetOperationCompleted(); + } + // Obtain the WaitHandle, but don't use public property in case we // delay initialize the manual reset event in the future. WaitHandle wh = afsar._waitHandle; @@ -728,6 +761,11 @@ namespace System.IO.Pipes { // Now check for any error during the read. if (afsar._errorCode != 0) { + if (afsar._errorCode == UnsafeNativeMethods.ERROR_OPERATION_ABORTED) { + if (cancellationHelper != null) { + cancellationHelper.ThrowIOOperationAborted(); + } + } __Error.WinIOError(afsar._errorCode, String.Empty); } @@ -939,6 +977,9 @@ namespace System.IO.Pipes { [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public sealed class NamedPipeClientStream : PipeStream { + // Maximum interval in miliseconds between which cancellation is checked. + // Used by ConnectInternal. 50ms is fairly responsive time but really long time for processor. + private const int CancellationCheckIntervalInMilliseconds = 50; private string m_normalizedPipePath; private TokenImpersonationLevel m_impersonationLevel; private PipeOptions m_pipeOptions; @@ -1193,6 +1234,127 @@ namespace System.IO.Pipes { throw new TimeoutException(); } + public Task ConnectAsync() { + // We cannot avoid creating lambda here by using Connect method + // unless we don't care about start time to be measured before the thread is started + return ConnectAsync(Timeout.Infinite, CancellationToken.None); + } + + public Task ConnectAsync(int timeout) { + return ConnectAsync(timeout, CancellationToken.None); + } + + public Task ConnectAsync(CancellationToken cancellationToken) { + return ConnectAsync(Timeout.Infinite, cancellationToken); + } + + public Task ConnectAsync(int timeout, CancellationToken cancellationToken) { + CheckConnectOperationsClient(); + + if (timeout < 0 && timeout != Timeout.Infinite) { + throw new ArgumentOutOfRangeException("timeout", SR.GetString(SR.ArgumentOutOfRange_InvalidTimeout)); + } + + if (cancellationToken.IsCancellationRequested) { + return Task.FromCancellation(cancellationToken); + } + + // We need to measure time here, not in the lambda + int startTime = Environment.TickCount; + return Task.Factory.StartNew(() => ConnectInternal(timeout, cancellationToken, startTime), cancellationToken); + } + + // Waits for a pipe instance to become available. This method may return before WaitForConnection is called + // on the server end, but WaitForConnection will not return until we have returned. Any data writen to the + // pipe by us after we have connected but before the server has called WaitForConnection will be available + // to the server after it calls WaitForConnection. + [System.Security.SecuritySafeCritical] + private void ConnectInternal(int timeout, CancellationToken cancellationToken, int startTime) { + UnsafeNativeMethods.SECURITY_ATTRIBUTES secAttrs = PipeStream.GetSecAttrs(m_inheritability); + + int _pipeFlags = (int)m_pipeOptions; + if (m_impersonationLevel != TokenImpersonationLevel.None) { + _pipeFlags |= UnsafeNativeMethods.SECURITY_SQOS_PRESENT; + _pipeFlags |= (((int)m_impersonationLevel - 1) << 16); + } + + // This is the main connection loop. It will loop until the timeout expires. Most of the + // time, we will be waiting in the WaitNamedPipe win32 blocking function; however, there are + // cases when we will need to loop: 1) The server is not created (WaitNamedPipe returns + // straight away in such cases), and 2) when another client connects to our server in between + // our WaitNamedPipe and CreateFile calls. + int elapsed = 0; + do { + // We want any other exception and and success to have priority over cancellation. + cancellationToken.ThrowIfCancellationRequested(); + + // Wait for pipe to become free (this will block unless the pipe does not exist). + int timeLeft = timeout - elapsed; + int waitTime; + if (cancellationToken.CanBeCanceled) { + waitTime = Math.Min(CancellationCheckIntervalInMilliseconds, timeLeft); + } + else { + waitTime = timeLeft; + } + + if (!UnsafeNativeMethods.WaitNamedPipe(m_normalizedPipePath, waitTime)) { + int errorCode = Marshal.GetLastWin32Error(); + + // Server is not yet created so let's keep looping. + if (errorCode == UnsafeNativeMethods.ERROR_FILE_NOT_FOUND) { + continue; + } + + // The timeout has expired. + if (errorCode == UnsafeNativeMethods.ERROR_SUCCESS) { + if (cancellationToken.CanBeCanceled) { + // It may not be real timeout and only checking for cancellation + // let the while condition check it and decide + continue; + } + else { + break; + } + } + + __Error.WinIOError(errorCode, String.Empty); + } + + // Pipe server should be free. Let's try to connect to it. + SafePipeHandle handle = UnsafeNativeMethods.CreateNamedPipeClient(m_normalizedPipePath, + m_access, // read and write access + 0, // sharing: none + secAttrs, // security attributes + FileMode.Open, // open existing + _pipeFlags, // impersonation flags + UnsafeNativeMethods.NULL); // template file: null + + if (handle.IsInvalid) { + int errorCode = Marshal.GetLastWin32Error(); + + // Handle the possible race condition of someone else connecting to the server + // between our calls to WaitNamedPipe & CreateFile. + if (errorCode == UnsafeNativeMethods.ERROR_PIPE_BUSY) { + continue; + } + + __Error.WinIOError(errorCode, String.Empty); + } + + // Success! + InitializeHandle(handle, false, (m_pipeOptions & PipeOptions.Asynchronous) != 0); + State = PipeState.Connected; + + return; + } + while (timeout == Timeout.Infinite || (elapsed = unchecked(Environment.TickCount - startTime)) < timeout); + // BUGBUG: SerialPort does not use unchecked arithmetic when calculating elapsed times. This is needed + // because Environment.TickCount can overflow (though only every 49.7 days). + + throw new TimeoutException(); + } + public int NumberOfServerInstances { [System.Security.SecurityCritical] [SuppressMessage("Microsoft.Security","CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification="Security model of pipes: demand at creation but no subsequent demands")] diff --git a/external/referencesource/System.Core/System/IO/__Error.cs b/external/referencesource/System.Core/System/IO/__Error.cs index 02960e8466..596a0e973d 100644 --- a/external/referencesource/System.Core/System/IO/__Error.cs +++ b/external/referencesource/System.Core/System/IO/__Error.cs @@ -217,5 +217,8 @@ namespace System.IO { throw new NotSupportedException(SR.GetString(SR.NotSupported_UnwritableStream)); } + internal static void OperationAborted() { + throw new IOException(SR.GetString(SR.IO_OperationAborted)); + } } } diff --git a/external/referencesource/System.Core/System/Linq/Enumerable.cs.REMOVED.git-id b/external/referencesource/System.Core/System/Linq/Enumerable.cs.REMOVED.git-id index 08b6bcf71f..1d89f21c13 100644 --- a/external/referencesource/System.Core/System/Linq/Enumerable.cs.REMOVED.git-id +++ b/external/referencesource/System.Core/System/Linq/Enumerable.cs.REMOVED.git-id @@ -1 +1 @@ -d718d487e993e0ad7c2fa7a559117a327d48a95e \ No newline at end of file +f062ca5e6394c3e981aa5bf8417cf029954e40a0 \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/IQueryable.cs b/external/referencesource/System.Core/System/Linq/IQueryable.cs index 6b05902237..fa32bb39d7 100644 --- a/external/referencesource/System.Core/System/Linq/IQueryable.cs +++ b/external/referencesource/System.Core/System/Linq/IQueryable.cs @@ -40,6 +40,34 @@ namespace System.Linq { public static class Queryable { +#region Helper methods to obtain MethodInfo in a safe way + + private static MethodInfo GetMethodInfo(Func f, T1 unused1) { + return f.Method; + } + + private static MethodInfo GetMethodInfo(Func f, T1 unused1, T2 unused2) { + return f.Method; + } + + private static MethodInfo GetMethodInfo(Func f, T1 unused1, T2 unused2, T3 unused3) { + return f.Method; + } + + private static MethodInfo GetMethodInfo(Func f, T1 unused1, T2 unused2, T3 unused3, T4 unused4) { + return f.Method; + } + + private static MethodInfo GetMethodInfo(Func f, T1 unused1, T2 unused2, T3 unused3, T4 unused4, T5 unused5) { + return f.Method; + } + + private static MethodInfo GetMethodInfo(Func f, T1 unused1, T2 unused2, T3 unused3, T4 unused4, T5 unused5, T6 unused6) { + return f.Method; + } + +#endregion + public static IQueryable AsQueryable(this IEnumerable source) { if (source == null) throw Error.ArgumentNull("source"); @@ -67,7 +95,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Where, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -79,8 +107,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.CreateQuery( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Where, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -91,7 +119,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TResult)), + GetMethodInfo(Queryable.OfType, source), new Expression[] { source.Expression } )); } @@ -101,8 +129,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.CreateQuery( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TResult)), + null, + GetMethodInfo(Queryable.Cast, source), new Expression[] { source.Expression } )); } @@ -115,7 +143,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + GetMethodInfo(Queryable.Select, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -128,7 +156,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + GetMethodInfo(Queryable.Select, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -141,7 +169,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + GetMethodInfo(Queryable.SelectMany, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -154,7 +182,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + GetMethodInfo(Queryable.SelectMany, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -169,7 +197,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), + GetMethodInfo(Queryable.SelectMany, source, collectionSelector, resultSelector), new Expression[] { source.Expression, Expression.Quote(collectionSelector), Expression.Quote(resultSelector) } )); } @@ -184,7 +212,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), + GetMethodInfo(Queryable.SelectMany, source, collectionSelector, resultSelector), new Expression[] { source.Expression, Expression.Quote(collectionSelector), Expression.Quote(resultSelector) } )); } @@ -209,7 +237,7 @@ namespace System.Linq { return outer.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TOuter), typeof(TInner), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.Join, outer, inner, outerKeySelector, innerKeySelector, resultSelector), new Expression[] { outer.Expression, GetSourceExpression(inner), @@ -234,7 +262,7 @@ namespace System.Linq { return outer.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TOuter), typeof(TInner), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.Join, outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer), new Expression[] { outer.Expression, GetSourceExpression(inner), @@ -260,7 +288,7 @@ namespace System.Linq { return outer.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TOuter), typeof(TInner), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.GroupJoin, outer, inner, outerKeySelector, innerKeySelector, resultSelector), new Expression[] { outer.Expression, GetSourceExpression(inner), @@ -284,7 +312,7 @@ namespace System.Linq { return outer.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TOuter), typeof(TInner), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.GroupJoin, outer, inner, outerKeySelector, innerKeySelector, resultSelector, comparer), new Expression[] { outer.Expression, GetSourceExpression(inner), @@ -304,7 +332,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.OrderBy, source, keySelector), new Expression[] { source.Expression, Expression.Quote(keySelector) } )); } @@ -317,7 +345,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.OrderBy, source, keySelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Constant(comparer, typeof(IComparer)) } )); } @@ -327,10 +355,10 @@ namespace System.Linq { throw Error.ArgumentNull("source"); if (keySelector == null) throw Error.ArgumentNull("keySelector"); - return (IOrderedQueryable) source.Provider.CreateQuery( + return (IOrderedQueryable)source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.OrderByDescending, source, keySelector), new Expression[] { source.Expression, Expression.Quote(keySelector) } )); } @@ -343,7 +371,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.OrderByDescending, source, keySelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Constant(comparer, typeof(IComparer)) } )); } @@ -356,7 +384,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.ThenBy, source, keySelector), new Expression[] { source.Expression, Expression.Quote(keySelector) } )); } @@ -369,7 +397,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.ThenBy, source, keySelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Constant(comparer, typeof(IComparer)) } )); } @@ -382,7 +410,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.ThenByDescending, source, keySelector), new Expression[] { source.Expression, Expression.Quote(keySelector) } )); } @@ -395,7 +423,7 @@ namespace System.Linq { return (IOrderedQueryable) source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.ThenByDescending, source, keySelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Constant(comparer, typeof(IComparer)) } )); } @@ -406,7 +434,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Take, source, count), new Expression[] { source.Expression, Expression.Constant(count) } )); } @@ -419,7 +447,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.TakeWhile, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -432,7 +460,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.TakeWhile, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -443,7 +471,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Skip, source, count), new Expression[] { source.Expression, Expression.Constant(count) } )); } @@ -456,7 +484,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.SkipWhile, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -469,7 +497,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.SkipWhile, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -482,7 +510,7 @@ namespace System.Linq { return source.Provider.CreateQuery>( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.GroupBy, source, keySelector), new Expression[] { source.Expression, Expression.Quote(keySelector) } )); } @@ -497,7 +525,7 @@ namespace System.Linq { return source.Provider.CreateQuery>( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, elementSelector), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(elementSelector) } )); } @@ -510,7 +538,7 @@ namespace System.Linq { return source.Provider.CreateQuery>( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -525,7 +553,7 @@ namespace System.Linq { return source.Provider.CreateQuery>( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, elementSelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(elementSelector), Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -543,7 +571,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TResult)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, elementSelector, resultSelector), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(elementSelector), Expression.Quote(resultSelector) } )); } @@ -559,7 +587,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, resultSelector), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(resultSelector) } )); } @@ -575,7 +603,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TResult)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, resultSelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(resultSelector), Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -593,7 +621,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TResult)), + GetMethodInfo(Queryable.GroupBy, source, keySelector, elementSelector, resultSelector, comparer), new Expression[] { source.Expression, Expression.Quote(keySelector), Expression.Quote(elementSelector), Expression.Quote(resultSelector), Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -604,7 +632,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Distinct, source), new Expression[] { source.Expression } )); } @@ -615,7 +643,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Distinct, source, comparer), new Expression[] { source.Expression, Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -627,8 +655,8 @@ namespace System.Linq { throw Error.ArgumentNull("source2"); return source1.Provider.CreateQuery( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Concat, source1, source2), new Expression[] { source1.Expression, GetSourceExpression(source2) } )); } @@ -643,7 +671,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TFirst), typeof(TSecond), typeof(TResult)), + GetMethodInfo(Queryable.Zip, source1, source2, resultSelector), new Expression[] { source1.Expression, GetSourceExpression(source2), Expression.Quote(resultSelector) } )); } @@ -655,8 +683,8 @@ namespace System.Linq { throw Error.ArgumentNull("source2"); return source1.Provider.CreateQuery( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Union, source1, source2), new Expression[] { source1.Expression, GetSourceExpression(source2) } )); } @@ -669,7 +697,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Union, source1, source2, comparer), new Expression[] { source1.Expression, GetSourceExpression(source2), @@ -686,7 +714,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Intersect, source1, source2), new Expression[] { source1.Expression, GetSourceExpression(source2) } )); } @@ -699,7 +727,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Intersect, source1, source2, comparer), new Expression[] { source1.Expression, GetSourceExpression(source2), @@ -716,7 +744,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Except, source1, source2), new Expression[] { source1.Expression, GetSourceExpression(source2) } )); } @@ -729,7 +757,7 @@ namespace System.Linq { return source1.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Except, source1, source2, comparer), new Expression[] { source1.Expression, GetSourceExpression(source2), @@ -743,8 +771,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.First, source), new Expression[] { source.Expression } )); } @@ -756,8 +784,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.First, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -768,7 +796,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.FirstOrDefault, source), new Expression[] { source.Expression } )); } @@ -780,8 +808,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.FirstOrDefault, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -791,8 +819,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Last, source), new Expression[] { source.Expression } )); } @@ -804,8 +832,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Last, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -816,7 +844,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.LastOrDefault, source), new Expression[] { source.Expression } )); } @@ -828,8 +856,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.LastOrDefault, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -840,7 +868,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Single, source), new Expression[] { source.Expression } )); } @@ -852,8 +880,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Single, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -864,7 +892,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.SingleOrDefault, source), new Expression[] { source.Expression } )); } @@ -876,8 +904,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.SingleOrDefault, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -889,8 +917,8 @@ namespace System.Linq { throw Error.ArgumentOutOfRange("index"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.ElementAt, source, index), new Expression[] { source.Expression, Expression.Constant(index) } )); } @@ -900,8 +928,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.ElementAtOrDefault, source, index), new Expression[] { source.Expression, Expression.Constant(index) } )); } @@ -912,7 +940,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.DefaultIfEmpty, source), new Expression[] { source.Expression } )); } @@ -922,8 +950,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.CreateQuery( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.DefaultIfEmpty, source, defaultValue), new Expression[] { source.Expression, Expression.Constant(defaultValue, typeof(TSource)) } )); } @@ -933,8 +961,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Contains, source, item), new Expression[] { source.Expression, Expression.Constant(item, typeof(TSource)) } )); } @@ -945,7 +973,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Contains, source, item, comparer), new Expression[] { source.Expression, Expression.Constant(item, typeof(TSource)), Expression.Constant(comparer, typeof(IEqualityComparer)) } )); } @@ -956,7 +984,7 @@ namespace System.Linq { return source.Provider.CreateQuery( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Reverse, source), new Expression[] { source.Expression } )); } @@ -969,7 +997,7 @@ namespace System.Linq { return source1.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.SequenceEqual, source1, source2), new Expression[] { source1.Expression, GetSourceExpression(source2) } )); } @@ -982,7 +1010,7 @@ namespace System.Linq { return source1.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.SequenceEqual, source1, source2, comparer), new Expression[] { source1.Expression, GetSourceExpression(source2), @@ -997,7 +1025,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Any, source), new Expression[] { source.Expression } )); } @@ -1009,8 +1037,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Any, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -1022,8 +1050,8 @@ namespace System.Linq { throw Error.ArgumentNull("predicate"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.All, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -1034,7 +1062,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Count, source), new Expression[] { source.Expression } )); } @@ -1047,7 +1075,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Count, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -1058,7 +1086,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.LongCount, source), new Expression[] { source.Expression } )); } @@ -1071,7 +1099,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.LongCount, source, predicate), new Expression[] { source.Expression, Expression.Quote(predicate) } )); } @@ -1082,7 +1110,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Min, source), new Expression[] { source.Expression } )); } @@ -1094,8 +1122,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + null, + GetMethodInfo(Queryable.Min, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1106,7 +1134,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Max, source), new Expression[] { source.Expression } )); } @@ -1118,8 +1146,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), + null, + GetMethodInfo(Queryable.Max, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1130,7 +1158,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1140,8 +1168,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1151,8 +1179,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1162,8 +1190,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1173,8 +1201,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1184,8 +1212,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1195,8 +1223,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1206,8 +1234,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1217,8 +1245,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1228,8 +1256,8 @@ namespace System.Linq { throw Error.ArgumentNull("source"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + null, + GetMethodInfo(Queryable.Sum, source), new Expression[] { source.Expression } )); } @@ -1241,8 +1269,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1254,8 +1282,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1267,8 +1295,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1280,8 +1308,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1293,8 +1321,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1306,8 +1334,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1319,8 +1347,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1332,8 +1360,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1345,8 +1373,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1358,8 +1386,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Sum, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1370,7 +1398,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1381,7 +1409,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1392,7 +1420,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1403,7 +1431,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1415,7 +1443,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1427,7 +1455,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1438,7 +1466,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1449,7 +1477,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1460,7 +1488,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1471,7 +1499,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()), + GetMethodInfo(Queryable.Average, source), new Expression[] { source.Expression } )); } @@ -1483,8 +1511,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1496,8 +1524,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1511,7 +1539,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1525,7 +1553,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1537,8 +1565,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1550,8 +1578,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1563,8 +1591,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1576,8 +1604,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1589,8 +1617,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1602,8 +1630,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + null, + GetMethodInfo(Queryable.Average, source, selector), new Expression[] { source.Expression, Expression.Quote(selector) } )); } @@ -1616,7 +1644,7 @@ namespace System.Linq { return source.Provider.Execute( Expression.Call( null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), + GetMethodInfo(Queryable.Aggregate, source, func), new Expression[] { source.Expression, Expression.Quote(func) } )); } @@ -1628,8 +1656,8 @@ namespace System.Linq { throw Error.ArgumentNull("func"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TAccumulate)), + null, + GetMethodInfo(Queryable.Aggregate, source, seed, func), new Expression[] { source.Expression, Expression.Constant(seed), Expression.Quote(func) } )); } @@ -1643,8 +1671,8 @@ namespace System.Linq { throw Error.ArgumentNull("selector"); return source.Provider.Execute( Expression.Call( - null, - ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TAccumulate), typeof(TResult)), + null, + GetMethodInfo(Queryable.Aggregate, source, seed, func, selector), new Expression[] { source.Expression, Expression.Constant(seed), Expression.Quote(func), Expression.Quote(selector) } )); } diff --git a/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/IParallelPartitionable.cs b/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/IParallelPartitionable.cs index 1aa7a43653..abf57edfe9 100644 --- a/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/IParallelPartitionable.cs +++ b/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/IParallelPartitionable.cs @@ -7,7 +7,7 @@ // // IParallelPartitionable.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -23,4 +23,4 @@ namespace System.Linq.Parallel { QueryOperatorEnumerator[] GetPartitions(int partitionCount); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/QueryAggregationOptions.cs b/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/QueryAggregationOptions.cs index 2a73072bdf..7775a87ab4 100644 --- a/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/QueryAggregationOptions.cs +++ b/external/referencesource/System.Core/System/Linq/Parallel/Enumerables/QueryAggregationOptions.cs @@ -7,7 +7,7 @@ // // QueryAggregationOptions.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -27,4 +27,4 @@ namespace System.Linq.Parallel Commutative = 2, AssociativeCommutative = (Associative | Commutative) // For convenience. } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/Parallel/Merging/IMergeHelper.cs b/external/referencesource/System.Core/System/Linq/Parallel/Merging/IMergeHelper.cs index 862b053f9f..fc9b564241 100644 --- a/external/referencesource/System.Core/System/Linq/Parallel/Merging/IMergeHelper.cs +++ b/external/referencesource/System.Core/System/Linq/Parallel/Merging/IMergeHelper.cs @@ -7,7 +7,7 @@ // // ImergeHelper.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -32,4 +32,4 @@ namespace System.Linq.Parallel // Returns the merged output as an array. TInputOutput[] GetResultsAsArray(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/Parallel/Partitioning/IPartitionedStreamRecipient.cs b/external/referencesource/System.Core/System/Linq/Parallel/Partitioning/IPartitionedStreamRecipient.cs index 748d853a73..d2f6a35cd4 100644 --- a/external/referencesource/System.Core/System/Linq/Parallel/Partitioning/IPartitionedStreamRecipient.cs +++ b/external/referencesource/System.Core/System/Linq/Parallel/Partitioning/IPartitionedStreamRecipient.cs @@ -7,7 +7,7 @@ // // IPartitionedStreamRecipient.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -22,4 +22,4 @@ namespace System.Linq.Parallel { void Receive(PartitionedStream partitionedStream); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/Parallel/QueryOperators/OrdinalIndexState.cs b/external/referencesource/System.Core/System/Linq/Parallel/QueryOperators/OrdinalIndexState.cs index 62660a567c..c928a13d31 100644 --- a/external/referencesource/System.Core/System/Linq/Parallel/QueryOperators/OrdinalIndexState.cs +++ b/external/referencesource/System.Core/System/Linq/Parallel/QueryOperators/OrdinalIndexState.cs @@ -7,7 +7,7 @@ // // OrdinalIndexState.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -23,4 +23,4 @@ namespace System.Linq.Parallel Increasing = 2, // Indices of elements are increasing. Within each partition, elements are in the correct order. Shuffled = 3, // Indices are of arbitrary type. Elements appear in an arbitrary order in each partition. } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Linq/ParallelExecutionMode.cs b/external/referencesource/System.Core/System/Linq/ParallelExecutionMode.cs index 1447b87013..fe09a4a7e9 100644 --- a/external/referencesource/System.Core/System/Linq/ParallelExecutionMode.cs +++ b/external/referencesource/System.Core/System/Linq/ParallelExecutionMode.cs @@ -7,7 +7,7 @@ // // ParallelQueryExecutionMode.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- diff --git a/external/referencesource/System.Core/System/Linq/ParallelMergeOptions.cs b/external/referencesource/System.Core/System/Linq/ParallelMergeOptions.cs index ea6b174f75..5eeb15854c 100644 --- a/external/referencesource/System.Core/System/Linq/ParallelMergeOptions.cs +++ b/external/referencesource/System.Core/System/Linq/ParallelMergeOptions.cs @@ -7,7 +7,7 @@ // // ParallelMergeOptions.cs // -// [....] +// igoro // // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @@ -60,4 +60,4 @@ namespace System.Linq /// FullyBuffered = 3 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Runtime/InteropServices/ComAwareEventInfo.cs b/external/referencesource/System.Core/System/Runtime/InteropServices/ComAwareEventInfo.cs index 6b61bbdd4d..86ac682095 100644 --- a/external/referencesource/System.Core/System/Runtime/InteropServices/ComAwareEventInfo.cs +++ b/external/referencesource/System.Core/System/Runtime/InteropServices/ComAwareEventInfo.cs @@ -18,6 +18,9 @@ namespace System.Runtime.InteropServices { #endregion #region protected overrides +#if FEATURE_NETCORE + [System.Security.SecuritySafeCritical] +#endif//FEATURE_NETCORE public override void AddEventHandler(object target, Delegate handler) { if (Marshal.IsComObject(target)) { // retrieve sourceIid and dispid @@ -25,9 +28,11 @@ namespace System.Runtime.InteropServices { int dispid; GetDataForComInvocation(_innerEventInfo, out sourceIid, out dispid); +#if FEATURE_CAS_POLICY // now validate the caller can call into native and redirect to ComEventHelpers.Combine SecurityPermission perm = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); perm.Demand(); +#endif//FEATURE_CAS_POLICY System.Runtime.InteropServices.ComEventsHelper.Combine(target, sourceIid, dispid, handler); } else { // we are dealing with a managed object - just add the delegate through reflection @@ -35,6 +40,9 @@ namespace System.Runtime.InteropServices { } } +#if FEATURE_NETCORE + [System.Security.SecuritySafeCritical] +#endif//FEATURE_NETCORE public override void RemoveEventHandler(object target, Delegate handler) { if (Marshal.IsComObject(target)) { // retrieve sourceIid and dispid @@ -42,9 +50,11 @@ namespace System.Runtime.InteropServices { int dispid; GetDataForComInvocation(_innerEventInfo, out sourceIid, out dispid); +#if FEATURE_CAS_POLICY // now validate the caller can call into native and redirect to ComEventHelpers.Combine SecurityPermission perm = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode); perm.Demand(); +#endif//FEATURE_CAS_POLICY System.Runtime.InteropServices.ComEventsHelper.Remove(target, sourceIid, dispid, handler); } else { // we are dealing with a managed object - just add the delegate through relection diff --git a/external/referencesource/System.Core/System/Security/Cryptography/Aes.cs b/external/referencesource/System.Core/System/Security/Cryptography/Aes.cs index 981e08887c..913e423fd3 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/Aes.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/Aes.cs @@ -5,4 +5,4 @@ // ==--== // moved to mscorlib.dll -[assembly:System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.Security.Cryptography.Aes))] +[assembly:System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.Security.Cryptography.Aes))] \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Security/Cryptography/AesCryptoServiceProvider.cs b/external/referencesource/System.Core/System/Security/Cryptography/AesCryptoServiceProvider.cs index 284990875a..bea786468a 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/AesCryptoServiceProvider.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/AesCryptoServiceProvider.cs @@ -6,6 +6,9 @@ using System; using System.Collections.Generic; +#if FEATURE_CORESYSTEM +using System.Core; +#endif using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; @@ -67,7 +70,7 @@ namespace System.Security.Cryptography { /// Value of the symmetric key used for encryption / decryption /// public override byte[] Key { - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] get { Contract.Ensures(m_key != null && !m_key.IsInvalid && !m_key.IsClosed); @@ -84,7 +87,7 @@ namespace System.Security.Cryptography { return keyValue; } - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] set { Contract.Ensures(m_key != null && !m_key.IsInvalid && !m_key.IsClosed); @@ -120,7 +123,7 @@ namespace System.Security.Cryptography { public override int KeySize { get { return base.KeySize; } - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] set { base.KeySize = value; @@ -136,7 +139,7 @@ namespace System.Security.Cryptography { /// Create an object to perform AES decryption with the current key and IV /// /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] public override ICryptoTransform CreateDecryptor() { Contract.Ensures(Contract.Result() != null); @@ -151,7 +154,7 @@ namespace System.Security.Cryptography { /// /// Create an object to perform AES decryption with the given key and IV /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] public override ICryptoTransform CreateDecryptor(byte[] key, byte[] iv) { Contract.Ensures(Contract.Result() != null); @@ -197,7 +200,7 @@ namespace System.Security.Cryptography { /// /// Create an object to do AES encryption with the current key and IV /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] public override ICryptoTransform CreateEncryptor() { Contract.Ensures(Contract.Result() != null); @@ -217,7 +220,7 @@ namespace System.Security.Cryptography { /// /// Create an object to do AES encryption with the given key and IV /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] public override ICryptoTransform CreateEncryptor(byte[] key, byte[] iv) { Contract.Ensures(Contract.Result() != null); @@ -263,7 +266,7 @@ namespace System.Security.Cryptography { /// /// Release any CAPI handles we're holding onto /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] protected override void Dispose(bool disposing) { Contract.Ensures(!disposing || m_key == null || m_key.IsClosed); Contract.Ensures(!disposing || m_cspHandle == null || m_cspHandle.IsClosed); @@ -360,7 +363,7 @@ namespace System.Security.Cryptography { /// /// Generate a new random key /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] public override void GenerateKey() { Contract.Ensures(m_key != null && !m_key.IsInvalid & !m_key.IsClosed); @@ -393,7 +396,7 @@ namespace System.Security.Cryptography { /// /// Generate a random initialization vector /// - [System.Security.SecurityCritical] + [System.Security.SecuritySafeCritical] [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "Reviewed")] public override void GenerateIV() { Contract.Ensures(IVValue != null && IVValue.Length == BlockSizeValue / 8); diff --git a/external/referencesource/System.Core/System/Security/Cryptography/BCryptNative.cs b/external/referencesource/System.Core/System/Security/Cryptography/BCryptNative.cs index 7272e139ab..48a8467961 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/BCryptNative.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/BCryptNative.cs @@ -13,8 +13,31 @@ using System.Runtime.InteropServices; using System.Diagnostics.Contracts; using Microsoft.Win32; using Microsoft.Win32.SafeHandles; +using System.Security.Cryptography.X509Certificates; namespace System.Security.Cryptography { + + internal enum AsymmetricPaddingMode { + /// + /// No padding + /// + None = 1, // BCRYPT_PAD_NONE + + /// + /// PKCS #1 padding + /// + Pkcs1 = 2, // BCRYPT_PAD_PKCS1 + + /// + /// Optimal Asymmetric Encryption Padding + /// + Oaep = 4, // BCRYPT_PAD_OAEP + + /// + /// Probabilistic Signature Scheme padding + /// + Pss = 8 // BCRYPT_PAD_PSS + } /// /// Native interop with CNG's BCrypt layer. Native definitions can be found in bcrypt.h /// @@ -34,6 +57,29 @@ namespace System.Security.Cryptography { public const string Sha256 = "SHA256"; // BCRYPT_SHA256_ALGORITHM public const string Sha384 = "SHA384"; // BCRYPT_SHA384_ALGORITHM public const string Sha512 = "SHA512"; // BCRYPT_SHA512_ALGORITHM + internal const string Rsa = "RSA"; // BCRYPT_RSA_ALGORITHM + } + + /// + /// Well known key blob tyes + /// + internal static class KeyBlobType { + //During Win8 Windows introduced BCRYPT_PUBLIC_KEY_BLOB L"PUBLICBLOB" + //and #define BCRYPT_PRIVATE_KEY_BLOB L"PRIVATEBLOB". We should use the + //same on ProjectN and ProjectK + internal const string RsaFullPrivateBlob = "RSAFULLPRIVATEBLOB"; // BCRYPT_RSAFULLPRIVATE_BLOB + internal const string RsaPrivateBlob = "RSAPRIVATEBLOB"; // BCRYPT_RSAPRIVATE_BLOB + internal const string RsaPublicBlob = "RSAPUBLICBLOB"; // BCRYPT_PUBLIC_KEY_BLOB + } + + [StructLayout(LayoutKind.Sequential)] + internal struct BCRYPT_RSAKEY_BLOB { + internal KeyBlobMagicNumber Magic; + internal int BitLength; + internal int cbPublicExp; + internal int cbModulus; + internal int cbPrime1; + internal int cbPrime2; } /// @@ -61,7 +107,35 @@ namespace System.Security.Cryptography { ECDHPublicP521 = 0x354B4345, // BCRYPT_ECDH_PUBLIC_P521_MAGIC ECDsaPublicP256 = 0x31534345, // BCRYPT_ECDSA_PUBLIC_P256_MAGIC ECDsaPublicP384 = 0x33534345, // BCRYPT_ECDSA_PUBLIC_P384_MAGIC - ECDsaPublicP521 = 0x35534345 // BCRYPT_ECDSA_PUBLIC_P521_MAGIC + ECDsaPublicP521 = 0x35534345, // BCRYPT_ECDSA_PUBLIC_P521_MAGIC + RsaPublic = 0x31415352, // BCRYPT_RSAPUBLIC_MAGIC + RsaPrivate = 0x32415352, // BCRYPT_RSAPRIVATE_MAGIC + RsaFullPrivateMagic = 0x33415352, //BCRYPT_RSAFULLPRIVATE_MAGIC + KeyDataBlob = 0x4d42444b // BCRYPT_KEY_DATA_BLOB_MAGIC + } + + [StructLayout(LayoutKind.Sequential)] + internal struct BCRYPT_OAEP_PADDING_INFO { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszAlgId; + + internal IntPtr pbLabel; + + internal int cbLabel; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct BCRYPT_PKCS1_PADDING_INFO { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszAlgId; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct BCRYPT_PSS_PADDING_INFO { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pszAlgId; + + internal int cbSalt; } /// @@ -73,6 +147,9 @@ namespace System.Security.Cryptography { public const string Tls = "TLS_PRF"; // BCRYPT_KDF_TLS_PRF } + internal const string BCRYPT_ECCPUBLIC_BLOB = "ECCPUBLICBLOB"; + internal const string BCRYPT_ECCPRIVATE_BLOB = "ECCPRIVATEBLOB"; + /// /// Well known BCrypt provider names /// @@ -163,6 +240,22 @@ namespace System.Security.Cryptography { string pszAlgId, // BCryptAlgorithm string pszImplementation, // ProviderNames int dwFlags); + + [DllImport("bcrypt.dll", SetLastError = true)] + internal static extern ErrorCode BCryptExportKey([In]SafeBCryptKeyHandle hKey, + [In]IntPtr hExportKey, + [In][MarshalAs(UnmanagedType.LPWStr)] string pszBlobType, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, + [In]int cbOutput, + [In]ref int pcbResult, + [In] int dwFlags); + + [DllImport("Crypt32.dll", SetLastError = true)] + internal static extern int CryptImportPublicKeyInfoEx2([In] uint dwCertEncodingType, + [In] ref X509Native.CERT_PUBLIC_KEY_INFO pInfo, + [In] int dwFlags, + [In] IntPtr pvAuxInfo, + [Out] out SafeBCryptKeyHandle phKey); } // @@ -326,5 +419,40 @@ namespace System.Security.Cryptography { return algorithmHandle; } + + [SecuritySafeCritical] + internal static SafeBCryptKeyHandle ImportAsymmetricPublicKey(X509Native.CERT_PUBLIC_KEY_INFO certPublicKeyInfo, int dwFlag) { + SafeBCryptKeyHandle keyHandle = null; + int error = UnsafeNativeMethods.CryptImportPublicKeyInfoEx2( + X509Native.X509_ASN_ENCODING, + ref certPublicKeyInfo, + dwFlag, + IntPtr.Zero, + out keyHandle); + if (error == 0) { + throw new CryptographicException(Marshal.GetLastWin32Error()); + } + return keyHandle; + } + + [SecuritySafeCritical] + internal static byte[] ExportBCryptKey(SafeBCryptKeyHandle hKey, string blobType) { + byte[] keyBlob = null; + int length = 0; + + ErrorCode error = UnsafeNativeMethods.BCryptExportKey(hKey, IntPtr.Zero, blobType, null, 0, ref length, 0); + + if (error != ErrorCode.BufferToSmall && error != ErrorCode.Success) + { + throw new CryptographicException(Marshal.GetLastWin32Error()); + } + + keyBlob = new byte[length]; + error = UnsafeNativeMethods.BCryptExportKey(hKey, IntPtr.Zero, blobType, keyBlob, length, ref length, 0); + if (error != ErrorCode.Success) { + throw new CryptographicException(Marshal.GetLastWin32Error()); + } + return keyBlob; + } } } diff --git a/external/referencesource/System.Core/System/Security/Cryptography/CapiNative.cs b/external/referencesource/System.Core/System/Security/Cryptography/CapiNative.cs index eaf838ec1e..b9f7080aff 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/CapiNative.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/CapiNative.cs @@ -5,14 +5,19 @@ // ==--== using System; +#if FEATURE_CORESYSTEM +using System.Core; +#endif using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Contracts; using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Security; -using System.Diagnostics.Contracts; +using System.Text; using Microsoft.Win32.SafeHandles; namespace System.Security.Cryptography { @@ -171,15 +176,62 @@ namespace System.Security.Cryptography { public fixed byte szName[20]; } + internal const uint ALG_CLASS_SIGNATURE = (1 << 13); + internal const uint ALG_TYPE_RSA = (2 << 9); + internal const uint ALG_SID_RSA_ANY = 0; + internal const uint ALG_SID_DSS_ANY = 0; + internal const uint ALG_TYPE_DSS = (1 << 9); + internal const uint ALG_CLASS_KEY_EXCHANGE = (5 << 13); + + internal const uint CALG_RSA_SIGN = (ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY); + internal const uint CALG_DSS_SIGN = (ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY); + internal const uint CALG_RSA_KEYX = (ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY); + internal const uint CNG_RSA_PUBLIC_KEY_BLOB = 72; + + internal const uint X509_ASN_ENCODING = 0x00000001; + internal const uint PKCS_7_ASN_ENCODING = 0x00010000; + + internal const uint CRYPT_OID_INFO_OID_KEY = 1; + + internal const uint LMEM_FIXED = 0x0000; + internal const uint LMEM_ZEROINIT = 0x0040; + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CRYPT_OID_INFO { + internal CRYPT_OID_INFO(int size) { + cbSize = (uint)size; + pszOID = null; + pwszName = null; + dwGroupId = 0; + Algid = 0; + ExtraInfo = new CRYPTOAPI_BLOB(); + } + internal uint cbSize; + [MarshalAs(UnmanagedType.LPStr)] + internal string pszOID; + internal string pwszName; + internal uint dwGroupId; + internal uint Algid; + internal CRYPTOAPI_BLOB ExtraInfo; + } + + +#if FEATURE_CORESYSTEM + [SecurityCritical] +#else #pragma warning disable 618 // Have not migrated to v4 transparency yet [SecurityCritical(SecurityCriticalScope.Everything)] #pragma warning restore 618 +#endif [SuppressUnmanagedCodeSecurity] internal static class UnsafeNativeMethods { /// /// Calculate the public key token for a given public key /// [DllImport("clr")] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern int _AxlPublicKeyBlobToPublicKeyToken(ref CRYPTOAPI_BLOB pCspPublicKeyBlob, [Out] out SafeAxlBufferHandle ppwszPublicKeyToken); @@ -189,6 +241,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true, CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptAcquireContext([Out] out SafeCspHandle phProv, string pszContainer, string pszProvider, @@ -200,6 +255,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptCreateHash(SafeCspHandle hProv, AlgorithmId Algid, SafeCapiKeyHandle hKey, @@ -211,6 +269,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptDecrypt(SafeCapiKeyHandle hKey, SafeCapiHashHandle hHash, [MarshalAs(UnmanagedType.Bool)] bool Final, @@ -222,9 +283,14 @@ namespace System.Security.Cryptography { /// Duplicate a key handle /// [DllImport("advapi32")] +#if !FEATURE_CORESYSTEM [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] +#endif [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptDuplicateKey(SafeCapiKeyHandle hKey, IntPtr pdwReserved, int dwFlags, @@ -235,6 +301,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptEncrypt(SafeCapiKeyHandle hKey, SafeCapiHashHandle hHash, [MarshalAs(UnmanagedType.Bool)] bool Final, @@ -248,6 +317,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptExportKey(SafeCapiKeyHandle hKey, SafeCapiKeyHandle hExpKey, int dwBlobType, // (int)KeyBlobType @@ -259,6 +331,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptGenKey(SafeCspHandle hProv, AlgorithmId Algid, KeyFlags dwFlags, @@ -269,6 +344,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptGenRandom(SafeCspHandle hProv, int dwLen, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbBuffer); @@ -278,6 +356,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptGetHashParam(SafeCapiHashHandle hHash, HashParameter dwParam, [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbData, @@ -289,6 +370,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptGetProvParam(SafeCspHandle hProv, ProviderParameter dwParam, IntPtr pbData, @@ -300,6 +384,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptHashData(SafeCapiHashHandle hHash, [MarshalAs(UnmanagedType.LPArray)] byte[] pbData, int dwDataLen, @@ -310,6 +397,9 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptImportKey(SafeCspHandle hProv, [MarshalAs(UnmanagedType.LPArray)] byte[] pbData, int dwDataLen, @@ -322,10 +412,76 @@ namespace System.Security.Cryptography { /// [DllImport("advapi32", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif public static extern bool CryptSetKeyParam(SafeCapiKeyHandle hKey, KeyParameter dwParam, [MarshalAs(UnmanagedType.LPArray)] byte[] pbData, int dwFlags); + + //Added for X509Certificate extension support +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [DllImport("CRYPT32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal extern static + IntPtr CryptFindOIDInfo( + [In] uint dwKeyType, + [In] IntPtr pvKey, + [In] OidGroup dwGroupId); + +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [DllImport("CRYPT32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal extern static + IntPtr CryptFindOIDInfo( + [In] uint dwKeyType, + [In] SafeLocalAllocHandle pvKey, + [In] OidGroup dwGroupId); + + +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [DllImport("Crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal static extern + bool CryptDecodeObject( + [In] uint dwCertEncodingType, + [In] IntPtr lpszStructType, + [In] IntPtr pbEncoded, + [In] uint cbEncoded, + [In] uint dwFlags, + [In, Out] SafeLocalAllocHandle pvStructInfo, + [In, Out] IntPtr pcbStructInfo); + +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [DllImport("Crypt32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal static extern + bool CryptDecodeObject( + [In] uint dwCertEncodingType, + [In] IntPtr lpszStructType, + [In] byte[] pbEncoded, + [In] uint cbEncoded, + [In] uint dwFlags, + [In, Out] SafeLocalAllocHandle pvStructInfo, + [In, Out] IntPtr pcbStructInfo); +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [DllImport("KERNEL32.dll", CharSet = CharSet.Auto, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal static extern + SafeLocalAllocHandle LocalAlloc( + [In] uint uFlags, + [In] IntPtr sizetdwBytes); } // @@ -627,5 +783,239 @@ namespace System.Security.Cryptography { throw new CryptographicException(Marshal.GetLastWin32Error()); } } + + //Wrapper methods for certificate extensions + + /// + /// Local alloc wrapper. + /// + /// + /// + /// + [SecuritySafeCritical] + internal static SafeLocalAllocHandle LocalAlloc(uint uFlags, IntPtr sizetdwBytes) { + SafeLocalAllocHandle safeLocalAllocHandle = UnsafeNativeMethods.LocalAlloc(uFlags, sizetdwBytes); + if (safeLocalAllocHandle == null || safeLocalAllocHandle.IsInvalid) { + throw new OutOfMemoryException(); + } + return safeLocalAllocHandle; + } + + /// + /// + /// + /// + /// + /// + /// + /// + /// + [SecuritySafeCritical] + internal static unsafe bool DecodeObject(IntPtr pszStructType, + IntPtr pbEncoded, + uint cbEncoded, + out SafeLocalAllocHandle decodedValue, + out uint cbDecodedValue) + { + // Initialize out parameters + decodedValue = SafeLocalAllocHandle.InvalidHandle; + cbDecodedValue = 0; + + // Decode + uint cbDecoded = 0; + SafeLocalAllocHandle ptr = SafeLocalAllocHandle.InvalidHandle; + if (!UnsafeNativeMethods.CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + pszStructType, + pbEncoded, + cbEncoded, + 0, + ptr, + new IntPtr(&cbDecoded))) { + return false; + } + ptr = LocalAlloc(LMEM_FIXED, new IntPtr(cbDecoded)); + + if (!UnsafeNativeMethods.CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + pszStructType, + pbEncoded, + cbEncoded, + 0, + ptr, + new IntPtr(&cbDecoded))) { + return false; + } + // Return decoded values + decodedValue = ptr; + cbDecodedValue = cbDecoded; + + return true; + } + + /// + /// + /// + /// + /// + /// + /// + /// + [SecuritySafeCritical] + internal static unsafe bool DecodeObject(IntPtr pszStructType, + byte[] pbEncoded, + out SafeLocalAllocHandle decodedValue, + out uint cbDecodedValue) + { + // Initialize out parameters + decodedValue = SafeLocalAllocHandle.InvalidHandle; + cbDecodedValue = 0; + + // Decode + uint cbDecoded = 0; + SafeLocalAllocHandle pbDecoded = SafeLocalAllocHandle.InvalidHandle; + + if (!UnsafeNativeMethods.CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + pszStructType, + pbEncoded, + (uint)pbEncoded.Length, + 0, + pbDecoded, + new IntPtr(&cbDecoded))) { + return false; + } + pbDecoded = LocalAlloc(LMEM_FIXED, new IntPtr(cbDecoded)); + if (!UnsafeNativeMethods.CryptDecodeObject(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, + pszStructType, + pbEncoded, + (uint)pbEncoded.Length, + 0, + pbDecoded, + new IntPtr(&cbDecoded))) { + return false; + } + // Return decoded values + decodedValue = pbDecoded; + cbDecodedValue = cbDecoded; + + return true; + } + + /// + /// + /// + /// + /// + /// + /// + [SecuritySafeCritical] + internal static CRYPT_OID_INFO CryptFindOIDInfo( + [In] uint dwKeyType, + [In] IntPtr pvKey, + [In] OidGroup dwGroupId) { + + if (pvKey == IntPtr.Zero) { + throw new ArgumentNullException("pvKey"); + } + CRYPT_OID_INFO pOIDInfo = new CRYPT_OID_INFO(Marshal.SizeOf(typeof(CRYPT_OID_INFO))); + IntPtr pv = UnsafeNativeMethods.CryptFindOIDInfo(dwKeyType, + pvKey, + dwGroupId); + + if (pv != IntPtr.Zero) { + pOIDInfo = (CRYPT_OID_INFO)Marshal.PtrToStructure(pv, typeof(CRYPT_OID_INFO)); + } + return pOIDInfo; + } + + /// + /// + /// + /// + /// + /// + /// + [SecuritySafeCritical] + internal static CRYPT_OID_INFO CryptFindOIDInfo( + [In] uint dwKeyType, + [In] SafeLocalAllocHandle pvKey, + [In] OidGroup dwGroupId) { + + if (pvKey == null) { + throw new ArgumentNullException("pvKey"); + } + if (pvKey.IsInvalid) { + throw new CryptographicException("SR.GetString(SR.Cryptography_InvalidHandle)", "pvKey"); + } + CRYPT_OID_INFO pOIDInfo = new CRYPT_OID_INFO(Marshal.SizeOf(typeof(CRYPT_OID_INFO))); + IntPtr pv = UnsafeNativeMethods.CryptFindOIDInfo(dwKeyType, + pvKey, + dwGroupId); + + if (pv != IntPtr.Zero) { + pOIDInfo = (CRYPT_OID_INFO)Marshal.PtrToStructure(pv, typeof(CRYPT_OID_INFO)); + } + return pOIDInfo; + } + } + + /// + /// Safe local handle class + /// + internal sealed class SafeLocalAllocHandle : SafeHandleZeroOrMinusOneIsInvalid { + [SecuritySafeCritical] + private SafeLocalAllocHandle() + : base(true) { + } + + [DllImport("kernel32.dll")] + private static extern IntPtr LocalFree(IntPtr hMem); + + [SecuritySafeCritical] + internal T Read(int offset) where T : struct { + bool addedRef = false; + RuntimeHelpers.PrepareConstrainedRegions(); + try { + DangerousAddRef(ref addedRef); + unsafe { + IntPtr pBase = new IntPtr((byte*)handle.ToPointer() + offset); + return (T)Marshal.PtrToStructure(pBase, typeof(T)); + } + } + finally { + if (addedRef) { + DangerousRelease(); + } + } + } + + [SecuritySafeCritical] + protected override bool ReleaseHandle() { + return LocalFree(handle) == IntPtr.Zero; + } + + [SecuritySafeCritical] + internal SafeLocalAllocHandle(IntPtr handle) + : base(true) { + SetHandle(handle); + } + + internal static SafeLocalAllocHandle InvalidHandle { + [SecuritySafeCritical] + get { return new SafeLocalAllocHandle(IntPtr.Zero); } + } + } + + /// + /// + /// + internal class X509Utils { + + [SecuritySafeCritical] + internal static SafeLocalAllocHandle StringToAnsiPtr(string s) { + byte[] arr = new byte[s.Length + 1]; + Encoding.ASCII.GetBytes(s, 0, s.Length, arr, 0); + SafeLocalAllocHandle pb = CapiNative.LocalAlloc(CapiNative.LMEM_FIXED, new IntPtr(arr.Length)); + Marshal.Copy(arr, 0, pb.DangerousGetHandle(), arr.Length); + return pb; + } } } diff --git a/external/referencesource/System.Core/System/Security/Cryptography/CapiSymmetricAlgorithm.cs b/external/referencesource/System.Core/System/Security/Cryptography/CapiSymmetricAlgorithm.cs index 7f15316701..490e61651f 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/CapiSymmetricAlgorithm.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/CapiSymmetricAlgorithm.cs @@ -5,6 +5,9 @@ // ==--== using System; +#if FEATURE_CORESYSTEM +using System.Core; +#endif using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; diff --git a/external/referencesource/System.Core/System/Security/Cryptography/CngAlgorithm.cs b/external/referencesource/System.Core/System/Security/Cryptography/CngAlgorithm.cs index 45c8bcd349..bb161cb53f 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/CngAlgorithm.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/CngAlgorithm.cs @@ -28,7 +28,8 @@ namespace System.Security.Cryptography { private static volatile CngAlgorithm s_sha256; private static volatile CngAlgorithm s_sha384; private static volatile CngAlgorithm s_sha512; - + private static volatile CngAlgorithm s_rsa; + private string m_algorithm; public CngAlgorithm(string algorithm) { @@ -99,6 +100,16 @@ namespace System.Security.Cryptography { // Well known algorithms // + public static CngAlgorithm Rsa { + get { + Contract.Ensures(Contract.Result() != null); + if (s_rsa == null) { + s_rsa = new CngAlgorithm(BCryptNative.AlgorithmName.Rsa); + } + return s_rsa; + } + } + public static CngAlgorithm ECDiffieHellmanP256 { get { Contract.Ensures(Contract.Result() != null); diff --git a/external/referencesource/System.Core/System/Security/Cryptography/CngKey.cs b/external/referencesource/System.Core/System/Security/Cryptography/CngKey.cs index 5c850ed0b8..13ea41c2fb 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/CngKey.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/CngKey.cs @@ -126,10 +126,19 @@ namespace System.Security.Cryptography { Contract.Assert(m_keyHandle != null); bool foundProperty; - byte[] ephemeralProperty = NCryptNative.GetProperty(m_keyHandle, - NCryptNative.KeyPropertyName.ClrIsEphemeral, - CngPropertyOptions.CustomProperty, - out foundProperty); + byte[] ephemeralProperty = null; + try { + ephemeralProperty = NCryptNative.GetProperty(m_keyHandle, + NCryptNative.KeyPropertyName.ClrIsEphemeral, + CngPropertyOptions.CustomProperty, + out foundProperty); + } + catch (CryptographicException) { + // Third party Key providers, and Windows PCP KSP won't recognize this property; + // and Win32 layer does not enforce error return contract. + // Therefore, they can return whatever error code they think appropriate. + return false; + } return foundProperty && ephemeralProperty != null && diff --git a/external/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs b/external/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs index 8108af7458..efb002c581 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/ECDiffieHellman.cs @@ -26,7 +26,11 @@ namespace System.Security.Cryptography { // public static new ECDiffieHellman Create() { +#if MONO + throw new NotImplementedException (); +#else return Create(typeof(ECDiffieHellmanCng).FullName); +#endif } public static new ECDiffieHellman Create(string algorithm) { diff --git a/external/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs b/external/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs index 6bd7201ced..22fb8b5052 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/ECDsa.cs @@ -5,6 +5,7 @@ // ==--== using System; +using System.IO; namespace System.Security.Cryptography { /// @@ -25,7 +26,11 @@ namespace System.Security.Cryptography { // public static new ECDsa Create() { +#if MONO + throw new NotImplementedException (); +#else return Create(typeof(ECDsaCng).FullName); +#endif } public static new ECDsa Create(string algorithm) { @@ -40,7 +45,97 @@ namespace System.Security.Cryptography { // Signature operations // + // ECDsa does not encode the algorithm identifier into the signature blob, therefore SignHash and VerifyHash + // do not need the HashAlgorithmName value, only SignData and VerifyData do. public abstract byte[] SignHash(byte[] hash); public abstract bool VerifyHash(byte[] hash, byte[] signature); + + protected virtual byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm) { + throw DerivedClassMustOverride(); + } + + protected virtual byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm) { + throw DerivedClassMustOverride(); + } + + public virtual byte[] SignData(byte[] data, HashAlgorithmName hashAlgorithm) { + if (data == null) { + throw new ArgumentNullException("data"); + } + return SignData(data, 0, data.Length, hashAlgorithm); + } + + public virtual byte[] SignData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm) { + if (data == null) { throw new ArgumentNullException("data"); } + if (offset < 0 || offset > data.Length) { throw new ArgumentOutOfRangeException("offset"); } + if (count < 0 || count > data.Length - offset) { throw new ArgumentOutOfRangeException("count"); } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) { throw HashAlgorithmNameNullOrEmpty(); } + + byte[] hash = HashData(data, offset, count, hashAlgorithm); + return SignHash(hash); + } + + public virtual byte[] SignData(Stream data, HashAlgorithmName hashAlgorithm) { + if (data == null) { + throw new ArgumentNullException("data"); + } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) { + throw HashAlgorithmNameNullOrEmpty(); + } + + byte[] hash = HashData(data, hashAlgorithm); + return SignHash(hash); + } + + public bool VerifyData(byte[] data, byte[] signature, HashAlgorithmName hashAlgorithm) { + if (data == null) { + throw new ArgumentNullException("data"); + } + return VerifyData(data, 0, data.Length, signature, hashAlgorithm); + } + + public virtual bool VerifyData(byte[] data, int offset, int count, byte[] signature, HashAlgorithmName hashAlgorithm) { + if (data == null) { + throw new ArgumentNullException("data"); + } + if (offset < 0 || offset > data.Length) { + throw new ArgumentOutOfRangeException("offset"); + } + if (count < 0 || count > data.Length - offset) { + throw new ArgumentOutOfRangeException("count"); + } + if (signature == null) { + throw new ArgumentNullException("signature"); + } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) { + throw HashAlgorithmNameNullOrEmpty(); + } + + byte[] hash = HashData(data, offset, count, hashAlgorithm); + return VerifyHash(hash, signature); + } + + public bool VerifyData(Stream data, byte[] signature, HashAlgorithmName hashAlgorithm) { + if (data == null) { + throw new ArgumentNullException("data"); + } + if (signature == null) { + throw new ArgumentNullException("signature"); + } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) { + throw HashAlgorithmNameNullOrEmpty(); + } + + byte[] hash = HashData(data, hashAlgorithm); + return VerifyHash(hash, signature); + } + + private static Exception DerivedClassMustOverride() { + return new NotImplementedException(SR.GetString(SR.NotSupported_SubclassOverride)); + } + + internal static Exception HashAlgorithmNameNullOrEmpty() { + return new ArgumentException(SR.GetString(SR.Cryptography_HashAlgorithmNameNullOrEmpty), "hashAlgorithm"); + } } } diff --git a/external/referencesource/System.Core/System/Security/Cryptography/ECDsaCng.cs b/external/referencesource/System.Core/System/Security/Cryptography/ECDsaCng.cs index e152be8dba..40505e30dd 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/ECDsaCng.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/ECDsaCng.cs @@ -375,5 +375,37 @@ namespace System.Security.Cryptography { return NCryptNative.VerifySignature(keyHandle, hash, signature); } } + + /// + /// Helper property to get the NCrypt key handle + /// + private SafeNCryptKeyHandle KeyHandle { + [SecuritySafeCritical] + get { return Key.Handle; } + } + + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm) { + // we're sealed and the base should have checked this before calling us + Debug.Assert(data != null); + Debug.Assert(offset >= 0 && offset <= data.Length); + Debug.Assert(count >= 0 && count <= data.Length - offset); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm.Name)); + + using (BCryptHashAlgorithm hasher = new BCryptHashAlgorithm(new CngAlgorithm(hashAlgorithm.Name), BCryptNative.ProviderName.MicrosoftPrimitiveProvider)) { + hasher.HashCore(data, offset, count); + return hasher.HashFinal(); + } + } + + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm) { + // we're sealed and the base should have checked this before calling us + Debug.Assert(data != null); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm.Name)); + + using (BCryptHashAlgorithm hasher = new BCryptHashAlgorithm(new CngAlgorithm(hashAlgorithm.Name), BCryptNative.ProviderName.MicrosoftPrimitiveProvider)) { + hasher.HashStream(data); + return hasher.HashFinal(); + } + } } } diff --git a/external/referencesource/System.Core/System/Security/Cryptography/ECKeyXmlFormat.cs b/external/referencesource/System.Core/System/Security/Cryptography/ECKeyXmlFormat.cs index ce1c174059..d8cfcb4b52 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/ECKeyXmlFormat.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/ECKeyXmlFormat.cs @@ -16,4 +16,4 @@ namespace System.Security.Cryptography { /// Rfc4050 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Security/Cryptography/NCryptNative.cs b/external/referencesource/System.Core/System/Security/Cryptography/NCryptNative.cs index 47586cf5ec..cf56209111 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/NCryptNative.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/NCryptNative.cs @@ -129,7 +129,8 @@ namespace System.Security.Cryptography { BadSignature = unchecked((int)0x80090006), // NTE_BAD_SIGNATURE NotFound = unchecked((int)0x80090011), // NTE_NOT_FOUND KeyDoesNotExist = unchecked((int)0x80090016), // NTE_BAD_KEYSET - BufferTooSmall = unchecked((int)0x80090028) // NTE_BUFFER_TOO_SMALL + BufferTooSmall = unchecked((int)0x80090028), // NTE_BUFFER_TOO_SMALL + NoMoreItems = unchecked((int)0x8009002a) // NTE_NO_MORE_ITEMS } /// @@ -380,8 +381,137 @@ namespace System.Security.Cryptography { [MarshalAs(UnmanagedType.LPArray)] byte[] pbSignature, int cbSignature, int dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptSignHash(SafeNCryptKeyHandle hKey, + [In] ref BCryptNative.BCRYPT_PKCS1_PADDING_INFO pPaddingInfo, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbHashValue, + int cbHashValue, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbSignature, + int cbSignature, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptSignHash(SafeNCryptKeyHandle hKey, + [In] ref BCryptNative.BCRYPT_PSS_PADDING_INFO pPaddingInfo, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbHashValue, + int cbHashValue, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbSignature, + int cbSignature, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptVerifySignature(SafeNCryptKeyHandle hKey, + [In] ref BCryptNative.BCRYPT_PKCS1_PADDING_INFO pPaddingInfo, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbHashValue, + int cbHashValue, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbSignature, + int cbSignature, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptVerifySignature(SafeNCryptKeyHandle hKey, + [In] ref BCryptNative.BCRYPT_PSS_PADDING_INFO pPaddingInfo, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbHashValue, + int cbHashValue, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbSignature, + int cbSignature, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptDecrypt(SafeNCryptKeyHandle hKey, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbInput, + int cbInput, + [In] ref BCryptNative.BCRYPT_OAEP_PADDING_INFO pvPadding, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, + int cbOutput, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptDecrypt(SafeNCryptKeyHandle hKey, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbInput, + int cbInput, + [In] ref BCryptNative.BCRYPT_PKCS1_PADDING_INFO pvPadding, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, + int cbOutput, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptEncrypt(SafeNCryptKeyHandle hKey, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbInput, + int cbInput, + [In] ref BCryptNative.BCRYPT_OAEP_PADDING_INFO pvPadding, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, + int cbOutput, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); + + [DllImport("ncrypt.dll")] + internal static extern ErrorCode NCryptEncrypt(SafeNCryptKeyHandle hKey, + [In, MarshalAs(UnmanagedType.LPArray)] byte[] pbInput, + int cbInput, + [In] ref BCryptNative.BCRYPT_PKCS1_PADDING_INFO pvPadding, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pbOutput, + int cbOutput, + [Out] out int pcbResult, + AsymmetricPaddingMode dwFlags); } + + /// + /// Adapter to wrap specific NCryptDecrypt P/Invokes with specific padding info + /// + [SecuritySafeCritical] + private delegate ErrorCode NCryptDecryptor(SafeNCryptKeyHandle hKey, + byte[] pbInput, + int cbInput, + ref T pvPadding, + byte[] pbOutput, + int cbOutput, + out int pcbResult, + AsymmetricPaddingMode dwFlags); + + /// + /// Adapter to wrap specific NCryptEncrypt P/Invokes with specific padding info + /// + [SecuritySafeCritical] + private delegate ErrorCode NCryptEncryptor(SafeNCryptKeyHandle hKey, + byte[] pbInput, + int cbInput, + ref T pvPadding, + byte[] pbOutput, + int cbOutput, + out int pcbResult, + AsymmetricPaddingMode dwFlags); + + /// + /// Adapter to wrap specific NCryptSignHash P/Invokes with a specific padding info + /// + [SecuritySafeCritical] + private delegate ErrorCode NCryptHashSigner(SafeNCryptKeyHandle hKey, + ref T pvPaddingInfo, + byte[] pbHashValue, + int cbHashValue, + byte[] pbSignature, + int cbSignature, + out int pcbResult, + AsymmetricPaddingMode dwFlags); + + /// + /// Adapter to wrap specific NCryptVerifySignature P/Invokes with a specific padding info + /// + [SecuritySafeCritical] + private delegate ErrorCode NCryptSignatureVerifier(SafeNCryptKeyHandle hKey, + ref T pvPaddingInfo, + byte[] pbHashValue, + int cbHashValue, + byte[] pbSignature, + int cbSignature, + AsymmetricPaddingMode dwFlags) where T : struct; + // // Utility and wrapper functions // @@ -389,6 +519,340 @@ namespace System.Security.Cryptography { private static volatile bool s_haveNcryptSupported; private static volatile bool s_ncryptSupported; + + /// + /// Generic decryption method, wrapped by decryption calls for specific padding modes + /// + [SecuritySafeCritical] + private static byte[] DecryptData(SafeNCryptKeyHandle key, + byte[] data, + ref T paddingInfo, + AsymmetricPaddingMode paddingMode, + NCryptDecryptor decryptor) where T : struct { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(data != null, "data != null"); + Debug.Assert(decryptor != null, "decryptor != null"); + + // Figure out how big of a buffer is needed to store the decrypted data + int decryptedSize = 0; + ErrorCode error = decryptor(key, + data, + data.Length, + ref paddingInfo, + null, + 0, + out decryptedSize, + paddingMode); + if (error != ErrorCode.Success && error != ErrorCode.BufferTooSmall) { + throw new CryptographicException((int)error); + } + + // Do the decryption + byte[] decrypted = new byte[decryptedSize]; + error = decryptor(key, + data, + data.Length, + ref paddingInfo, + decrypted, + decrypted.Length, + out decryptedSize, + paddingMode); + if (error != ErrorCode.Success) { + throw new CryptographicException((int)error); + } + + // Sometimes decryptedSize can be less than the allocated buffer size + // So resize the array to the actual returned plaintext + Array.Resize(ref decrypted, decryptedSize); + + return decrypted; + } + + /// + /// Decrypt data using PKCS1 padding + /// + [SecuritySafeCritical] + internal static byte[] DecryptDataPkcs1(SafeNCryptKeyHandle key, byte[] data) { + BCryptNative.BCRYPT_PKCS1_PADDING_INFO pkcs1Info = new BCryptNative.BCRYPT_PKCS1_PADDING_INFO(); + + return DecryptData(key, + data, + ref pkcs1Info, + AsymmetricPaddingMode.Pkcs1, + UnsafeNativeMethods.NCryptDecrypt); + } + + /// + /// Decrypt data using OAEP padding + /// + [SecuritySafeCritical] + internal static byte[] DecryptDataOaep(SafeNCryptKeyHandle key, + byte[] data, + string hashAlgorithm) { + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + + BCryptNative.BCRYPT_OAEP_PADDING_INFO oaepInfo = new BCryptNative.BCRYPT_OAEP_PADDING_INFO(); + oaepInfo.pszAlgId = hashAlgorithm; + + return DecryptData(key, + data, + ref oaepInfo, + AsymmetricPaddingMode.Oaep, + UnsafeNativeMethods.NCryptDecrypt); + } + + /// + /// Generic encryption method, wrapped by decryption calls for specific padding modes + /// + [SecuritySafeCritical] + private static byte[] EncryptData(SafeNCryptKeyHandle key, + byte[] data, + ref T paddingInfo, + AsymmetricPaddingMode paddingMode, + NCryptEncryptor encryptor) where T : struct { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(data != null, "data != null"); + Debug.Assert(encryptor != null, "encryptor != null"); + + // Figure out how big of a buffer is to encrypt the data + int encryptedSize = 0; + ErrorCode error = encryptor(key, + data, + data.Length, + ref paddingInfo, + null, + 0, + out encryptedSize, + paddingMode); + if (error != ErrorCode.Success && error != ErrorCode.BufferTooSmall) { + throw new CryptographicException((int)error); + } + + // Do the encryption + byte[] encrypted = new byte[encryptedSize]; + error = encryptor(key, + data, + data.Length, + ref paddingInfo, + encrypted, + encrypted.Length, + out encryptedSize, + paddingMode); + if (error != ErrorCode.Success) { + throw new CryptographicException((int)error); + } + + return encrypted; + } + + /// + /// Encrypt data using OAEP padding + /// + [SecuritySafeCritical] + internal static byte[] EncryptDataOaep(SafeNCryptKeyHandle key, + byte[] data, + string hashAlgorithm) { + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + + BCryptNative.BCRYPT_OAEP_PADDING_INFO oaepInfo = new BCryptNative.BCRYPT_OAEP_PADDING_INFO(); + oaepInfo.pszAlgId = hashAlgorithm; + + return EncryptData(key, + data, + ref oaepInfo, + AsymmetricPaddingMode.Oaep, + UnsafeNativeMethods.NCryptEncrypt); + } + + /// + /// Encrypt data using PKCS1 padding + /// + [SecuritySafeCritical] + internal static byte[] EncryptDataPkcs1(SafeNCryptKeyHandle key, byte[] data) { + BCryptNative.BCRYPT_PKCS1_PADDING_INFO pkcs1Info = new BCryptNative.BCRYPT_PKCS1_PADDING_INFO(); + + return EncryptData(key, + data, + ref pkcs1Info, + AsymmetricPaddingMode.Pkcs1, + UnsafeNativeMethods.NCryptEncrypt); + } + + /// + /// Generic signature method, wrapped by signature calls for specific padding modes + /// + [SecuritySafeCritical] + private static byte[] SignHash(SafeNCryptKeyHandle key, + byte[] hash, + ref T paddingInfo, + AsymmetricPaddingMode paddingMode, + NCryptHashSigner signer) where T : struct { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsInvalid && !key.IsClosed, "!key.IsInvalid && !key.IsClosed"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(signer != null, "signer != null"); + + // Figure out how big the signature is + int signatureSize = 0; + ErrorCode error = signer(key, + ref paddingInfo, + hash, + hash.Length, + null, + 0, + out signatureSize, + paddingMode); + if (error != ErrorCode.Success && error != ErrorCode.BufferTooSmall) { + throw new CryptographicException((int)error); + } + + // Sign the hash + byte[] signature = new byte[signatureSize]; + error = signer(key, + ref paddingInfo, + hash, + hash.Length, + signature, + signature.Length, + out signatureSize, + paddingMode); + if (error != ErrorCode.Success) { + throw new CryptographicException((int)error); + } + return signature; + } + + /// + /// Sign a hash, using PKCS1 padding + /// + [SecuritySafeCritical] + internal static byte[] SignHashPkcs1(SafeNCryptKeyHandle key, + byte[] hash, + string hashAlgorithm) { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + + BCryptNative.BCRYPT_PKCS1_PADDING_INFO pkcs1Info = new BCryptNative.BCRYPT_PKCS1_PADDING_INFO(); + pkcs1Info.pszAlgId = hashAlgorithm; + + return SignHash(key, + hash, + ref pkcs1Info, + AsymmetricPaddingMode.Pkcs1, + UnsafeNativeMethods.NCryptSignHash); + } + + /// + /// Sign a hash, using PSS padding + /// + [SecuritySafeCritical] + internal static byte[] SignHashPss(SafeNCryptKeyHandle key, + byte[] hash, + string hashAlgorithm, + int saltBytes) { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + Debug.Assert(saltBytes >= 0, "saltBytes >= 0"); + + BCryptNative.BCRYPT_PSS_PADDING_INFO pssInfo = new BCryptNative.BCRYPT_PSS_PADDING_INFO(); + pssInfo.pszAlgId = hashAlgorithm; + pssInfo.cbSalt = saltBytes; + + return SignHash(key, + hash, + ref pssInfo, + AsymmetricPaddingMode.Pss, + UnsafeNativeMethods.NCryptSignHash); + } + + /// + /// Generic signature verification method, wrapped by verification calls for specific padding modes + /// + [SecuritySafeCritical] + private static bool VerifySignature(SafeNCryptKeyHandle key, + byte[] hash, + byte[] signature, + ref T paddingInfo, + AsymmetricPaddingMode paddingMode, + NCryptSignatureVerifier verifier) where T : struct { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(signature != null, "signature != null"); + Debug.Assert(verifier != null, "verifier != null"); + + ErrorCode error = verifier(key, + ref paddingInfo, + hash, + hash.Length, + signature, + signature.Length, + paddingMode); + if (error != ErrorCode.Success && error != ErrorCode.BadSignature) { + throw new CryptographicException((int)error); + } + + return error == ErrorCode.Success; + } + + /// + /// Verify the signature of a hash using PKCS #1 padding + /// + [SecuritySafeCritical] + internal static bool VerifySignaturePkcs1(SafeNCryptKeyHandle key, + byte[] hash, + string hashAlgorithm, + byte[] signature) { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + Debug.Assert(signature != null, "signature != null"); + + BCryptNative.BCRYPT_PKCS1_PADDING_INFO pkcs1Info = new BCryptNative.BCRYPT_PKCS1_PADDING_INFO(); + pkcs1Info.pszAlgId = hashAlgorithm; + + return VerifySignature(key, + hash, + signature, + ref pkcs1Info, + AsymmetricPaddingMode.Pkcs1, + UnsafeNativeMethods.NCryptVerifySignature); + } + + /// + /// Verify the signature of a hash using PSS padding + /// + [SecuritySafeCritical] + internal static bool VerifySignaturePss(SafeNCryptKeyHandle key, + byte[] hash, + string hashAlgorithm, + int saltBytes, + byte[] signature) { + Debug.Assert(key != null, "key != null"); + Debug.Assert(!key.IsClosed && !key.IsInvalid, "!key.IsClosed && !key.IsInvalid"); + Debug.Assert(hash != null, "hash != null"); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm), "!String.IsNullOrEmpty(hashAlgorithm)"); + Debug.Assert(signature != null, "signature != null"); + + BCryptNative.BCRYPT_PSS_PADDING_INFO pssInfo = new BCryptNative.BCRYPT_PSS_PADDING_INFO(); + pssInfo.pszAlgId = hashAlgorithm; + pssInfo.cbSalt = saltBytes; + + return VerifySignature(key, + hash, + signature, + ref pssInfo, + AsymmetricPaddingMode.Pss, + UnsafeNativeMethods.NCryptVerifySignature); + } + /// /// Determine if NCrypt is supported on the current machine /// @@ -484,9 +948,7 @@ namespace System.Security.Cryptography { if (error != ErrorCode.Success) { throw new CryptographicException((int)error); } - - // Key handles are no longer valid after deleting - key.Dispose(); + key.SetHandleAsInvalid(); } /// diff --git a/external/referencesource/System.Core/System/Security/Cryptography/RsaCng.cs b/external/referencesource/System.Core/System/Security/Cryptography/RsaCng.cs new file mode 100644 index 0000000000..3085b90e24 --- /dev/null +++ b/external/referencesource/System.Core/System/Security/Cryptography/RsaCng.cs @@ -0,0 +1,508 @@ +using System; +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using Microsoft.Win32.SafeHandles; + +namespace System.Security.Cryptography +{ + public sealed class RSACng : RSA + { + // See https://msdn.microsoft.com/en-us/library/windows/desktop/bb931354(v=vs.85).aspx + private static KeySizes[] s_legalKeySizes = new KeySizes[] { new KeySizes(512, 16384, 64) }; + + // CngKeyBlob formats for RSA key blobs + private static CngKeyBlobFormat s_rsaFullPrivateBlob = new CngKeyBlobFormat(BCryptNative.KeyBlobType.RsaFullPrivateBlob); + private static CngKeyBlobFormat s_rsaPrivateBlob = new CngKeyBlobFormat(BCryptNative.KeyBlobType.RsaPrivateBlob); + private static CngKeyBlobFormat s_rsaPublicBlob = new CngKeyBlobFormat(BCryptNative.KeyBlobType.RsaPublicBlob); + + // Key handle + private CngKey _key; + + /// + /// Create an RSACng algorithm with a random 2048 bit key pair. + /// + public RSACng() : this(2048) { } + + /// + /// Creates a new RSACng object that will use a randomly generated key of the specified size. + /// Valid key sizes range from 384 to 16384 bits, in increments of 8. It's suggested that a + /// minimum size of 2048 bits be used for all keys. + /// + /// Size of the key to generate, in bits. + /// if is not valid + public RSACng(int keySize) + { + LegalKeySizesValue = s_legalKeySizes; + KeySize = keySize; + } + + /// + /// Creates a new RSACng object that will use the specified key. The key's + /// must be Rsa. + /// CngKey.Open creates a copy of the key. Even if someone disposes the key passed + /// copy of this key object in RSA stays alive. + /// + /// Key to use for RSA operations + /// if is not an RSA key + /// if is null. + [SecuritySafeCritical] + public RSACng(CngKey key) + { + if (key == null) + { + throw new ArgumentNullException("key"); + } + if (key.AlgorithmGroup != CngAlgorithmGroup.Rsa) + { + throw new ArgumentException(SR.GetString(SR.Cryptography_ArgRSAaRequiresRSAKey), "key"); + } + LegalKeySizesValue = s_legalKeySizes; + Key = CngKey.Open(key.Handle, key.IsEphemeral ? CngKeyHandleOpenOptions.EphemeralKey : CngKeyHandleOpenOptions.None); + } + + /// + /// Gets the key that will be used by the RSA object for any cryptographic operation that it uses. + /// This key object will be disposed if the key is reset, for instance by changing the KeySize + /// property, using ImportParamers to create a new key, or by Disposing of the parent RSA object. + /// Therefore, you should make sure that the key object is no longer used in these scenarios. This + /// object will not be the same object as the CngKey passed to the RSACng constructor if that + /// constructor was used, however it will point at the same CNG key. + /// + /// + /// SecurityPermission/UnmanagedCode is required to read this property. + /// + public CngKey Key + { + [SecuritySafeCritical] + get + { + // If our key size was changed from the key we're using, we need to generate a new key + if (_key != null && _key.KeySize != KeySize) + { + _key.Dispose(); + _key = null; + } + + // If we don't have a key yet, we need to generate a random one now + if (_key == null) + { + CngKeyCreationParameters creationParameters = new CngKeyCreationParameters(); + CngProperty keySizeProperty = new CngProperty(NCryptNative.KeyPropertyName.Length, + BitConverter.GetBytes(KeySize), + CngPropertyOptions.None); + creationParameters.Parameters.Add(keySizeProperty); + _key = CngKey.Create(CngAlgorithm.Rsa, null, creationParameters); + } + + return _key; + } + + private set + { + Debug.Assert(value != null, "value != null"); + if (value.AlgorithmGroup != CngAlgorithmGroup.Rsa) + { + throw new ArgumentException(SR.GetString(SR.Cryptography_ArgRSAaRequiresRSAKey), "value"); + } + // If we already have a key, clear it out + if (_key != null) + { + _key.Dispose(); + } + + _key = value; + KeySize = _key.KeySize; + } + } + + /// + /// Helper property to get the NCrypt key handle + /// + private SafeNCryptKeyHandle KeyHandle + { + [SecuritySafeCritical] + get { return Key.Handle; } + } + + protected override void Dispose(bool disposing) + { + if (disposing && _key != null) + { + _key.Dispose(); + } + } + + protected override byte[] HashData(byte[] data, int offset, int count, HashAlgorithmName hashAlgorithm) + { + // we're sealed and the base should have checked this already + Debug.Assert(data != null); + Debug.Assert(offset >= 0 && offset <= data.Length); + Debug.Assert(count >= 0 && count <= data.Length); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm.Name)); + + using (BCryptHashAlgorithm hasher = new BCryptHashAlgorithm(new CngAlgorithm(hashAlgorithm.Name), BCryptNative.ProviderName.MicrosoftPrimitiveProvider)) + { + hasher.HashCore(data, offset, count); + return hasher.HashFinal(); + } + } + + protected override byte[] HashData(Stream data, HashAlgorithmName hashAlgorithm) + { + // We're sealed and the base should have checked these alread. + Debug.Assert(data != null); + Debug.Assert(!String.IsNullOrEmpty(hashAlgorithm.Name)); + + using (BCryptHashAlgorithm hasher = new BCryptHashAlgorithm(new CngAlgorithm(hashAlgorithm.Name), BCryptNative.ProviderName.MicrosoftPrimitiveProvider)) + { + hasher.HashStream(data); + return hasher.HashFinal(); + } + } + + + /// + /// This function checks the magic value in the key blob header + /// + /// Private blob if true else public key blob + private void CheckMagicValueOfKey(int magic, bool includePrivateParameters) + { + if (false == includePrivateParameters) + { + if (magic != (int)BCryptNative.KeyBlobMagicNumber.RsaPublic) + { + //Check for Private key magic as public key can be derived from private key blob + if (magic != (int)BCryptNative.KeyBlobMagicNumber.RsaPrivate && magic != (int)BCryptNative.KeyBlobMagicNumber.RsaFullPrivateMagic) + { + throw new CryptographicException(SR.GetString(SR.Cryptography_NotValidPublicOrPrivateKey)); + } + } + } + //If includePrivateParameters is true then certainly check for the private key magic + else + { + if (magic != (int)BCryptNative.KeyBlobMagicNumber.RsaPrivate && magic != (int)BCryptNative.KeyBlobMagicNumber.RsaFullPrivateMagic) + { + throw new CryptographicException(SR.GetString(SR.Cryptography_NotValidPrivateKey)); + } + } + } + + // + // Key import and export + // + + /// + /// Exports the key used by the RSA object into an RSAParameters object. + /// + [SecuritySafeCritical] + public override RSAParameters ExportParameters(bool includePrivateParameters) + { + byte[] rsaBlob = Key.Export(includePrivateParameters ? s_rsaFullPrivateBlob : s_rsaPublicBlob); + RSAParameters rsaParams = new RSAParameters(); + + // + // We now have a buffer laid out as follows: + // BCRYPT_RSAKEY_BLOB header + // byte[cbPublicExp] publicExponent - Exponent + // byte[cbModulus] modulus - Modulus + // -- Private only -- + // byte[cbPrime1] prime1 - P + // byte[cbPrime2] prime2 - Q + // byte[cbPrime1] exponent1 - DP + // byte[cbPrime2] exponent2 - DQ + // byte[cbPrime1] coefficient - InverseQ + // byte[cbModulus] privateExponent - D + // + byte[] tempMagic = new byte[4]; + tempMagic[0] = rsaBlob[0]; tempMagic[1] = rsaBlob[1]; tempMagic[2] = rsaBlob[2]; tempMagic[3] = rsaBlob[3]; + int magic = BitConverter.ToInt32(tempMagic, 0); + //Check the magic value in key blob header. If blob does not have required magic + // then it trhows Cryptographic exception + CheckMagicValueOfKey(magic, includePrivateParameters); + + unsafe + { + fixed (byte* pRsaBlob = rsaBlob) + { + BCryptNative.BCRYPT_RSAKEY_BLOB* pBcryptBlob = (BCryptNative.BCRYPT_RSAKEY_BLOB*)pRsaBlob; + + int offset = Marshal.SizeOf(typeof(BCryptNative.BCRYPT_RSAKEY_BLOB)); + + // Read out the exponent + rsaParams.Exponent = new byte[pBcryptBlob->cbPublicExp]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.Exponent, 0, rsaParams.Exponent.Length); + offset += pBcryptBlob->cbPublicExp; + + // Read out the modulus + rsaParams.Modulus = new byte[pBcryptBlob->cbModulus]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.Modulus, 0, rsaParams.Modulus.Length); + offset += pBcryptBlob->cbModulus; + + if (includePrivateParameters) + { + // Read out P + rsaParams.P = new byte[pBcryptBlob->cbPrime1]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.P, 0, rsaParams.P.Length); + offset += pBcryptBlob->cbPrime1; + + // Read out Q + rsaParams.Q = new byte[pBcryptBlob->cbPrime2]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.Q, 0, rsaParams.Q.Length); + offset += pBcryptBlob->cbPrime2; + + // Read out DP + rsaParams.DP = new byte[pBcryptBlob->cbPrime1]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.DP, 0, rsaParams.DP.Length); + offset += pBcryptBlob->cbPrime1; + + // Read out DQ + rsaParams.DQ = new byte[pBcryptBlob->cbPrime2]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.DQ, 0, rsaParams.DQ.Length); + offset += pBcryptBlob->cbPrime2; + + // Read out InverseQ + rsaParams.InverseQ = new byte[pBcryptBlob->cbPrime1]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.InverseQ, 0, rsaParams.InverseQ.Length); + offset += pBcryptBlob->cbPrime1; + + // Read out D + rsaParams.D = new byte[pBcryptBlob->cbModulus]; + Buffer.BlockCopy(rsaBlob, offset, rsaParams.D, 0, rsaParams.D.Length); + offset += pBcryptBlob->cbModulus; + } + } + } + + return rsaParams; + } + + /// + /// + /// ImportParameters will replace the existing key that RSACng is working with by creating a + /// new CngKey for the parameters structure. If the parameters structure contains only an + /// exponent and modulus, then only a public key will be imported. If the parameters also + /// contain P and Q values, then a full key pair will be imported. + /// + /// + /// + /// if contains neither an exponent nor a modulus. + /// + /// + /// if is not a valid RSA key or if is a full key pair and the default KSP is used. + /// + [SecuritySafeCritical] + public override void ImportParameters(RSAParameters parameters) + { + if (parameters.Exponent == null || parameters.Modulus == null) + { + throw new ArgumentException(SR.GetString(SR.Cryptography_InvalidRsaParameters)); + } + bool publicOnly = parameters.P == null || parameters.Q == null; + + // + // We need to build a key blob structured as follows: + // BCRYPT_RSAKEY_BLOB header + // byte[cbPublicExp] publicExponent - Exponent + // byte[cbModulus] modulus - Modulus + // -- Private only -- + // byte[cbPrime1] prime1 - P + // byte[cbPrime2] prime2 - Q + // + + int blobSize = Marshal.SizeOf(typeof(BCryptNative.BCRYPT_RSAKEY_BLOB)) + + parameters.Exponent.Length + + parameters.Modulus.Length; + if (!publicOnly) + { + blobSize += parameters.P.Length + + parameters.Q.Length; + } + + byte[] rsaBlob = new byte[blobSize]; + unsafe + { + fixed (byte* pRsaBlob = rsaBlob) + { + // Build the header + BCryptNative.BCRYPT_RSAKEY_BLOB* pBcryptBlob = (BCryptNative.BCRYPT_RSAKEY_BLOB*)pRsaBlob; + pBcryptBlob->Magic = publicOnly ? BCryptNative.KeyBlobMagicNumber.RsaPublic : + BCryptNative.KeyBlobMagicNumber.RsaPrivate; + + pBcryptBlob->BitLength = parameters.Modulus.Length * 8; + + pBcryptBlob->cbPublicExp = parameters.Exponent.Length; + pBcryptBlob->cbModulus = parameters.Modulus.Length; + + if (!publicOnly) + { + pBcryptBlob->cbPrime1 = parameters.P.Length; + pBcryptBlob->cbPrime2 = parameters.Q.Length; + } + + int offset = Marshal.SizeOf(typeof(BCryptNative.BCRYPT_RSAKEY_BLOB)); + + // Copy the exponent + Buffer.BlockCopy(parameters.Exponent, 0, rsaBlob, offset, parameters.Exponent.Length); + offset += parameters.Exponent.Length; + + // Copy the modulus + Buffer.BlockCopy(parameters.Modulus, 0, rsaBlob, offset, parameters.Modulus.Length); + offset += parameters.Modulus.Length; + + if (!publicOnly) + { + // Copy P + Buffer.BlockCopy(parameters.P, 0, rsaBlob, offset, parameters.P.Length); + offset += parameters.P.Length; + + // Copy Q + Buffer.BlockCopy(parameters.Q, 0, rsaBlob, offset, parameters.Q.Length); + offset += parameters.Q.Length; + } + } + } + Key = CngKey.Import(rsaBlob, publicOnly ? s_rsaPublicBlob : s_rsaPrivateBlob); + } + + // + // Encryption and decryption + // + [SecuritySafeCritical] + public override byte[] Decrypt(byte[] data, RSAEncryptionPadding padding) + { + if (data == null) + { + throw new ArgumentNullException("data"); + } + + if (padding == null) + { + throw new ArgumentNullException("padding"); + } + + SafeNCryptKeyHandle keyHandle = Key.Handle; + + if (padding == RSAEncryptionPadding.Pkcs1) + { + return NCryptNative.DecryptDataPkcs1(keyHandle, data); + } + else if (padding.Mode == RSAEncryptionPaddingMode.Oaep) + { + return NCryptNative.DecryptDataOaep(keyHandle, data, padding.OaepHashAlgorithm.Name); + } + else + { + // no other padding possibilities at present, but we might version independently from more being added. + throw new CryptographicException(SR.GetString(SR.Cryptography_UnsupportedPaddingMode)); + } + } + + [SecuritySafeCritical] + public override byte[] Encrypt(byte[] data, RSAEncryptionPadding padding) + { + if (data == null) + { + throw new ArgumentNullException("data"); + } + if (padding == null) + { + throw new ArgumentNullException("padding"); + } + + if (padding == RSAEncryptionPadding.Pkcs1) + { + return NCryptNative.EncryptDataPkcs1(KeyHandle, data); + } + else if (padding.Mode == RSAEncryptionPaddingMode.Oaep) + { + return NCryptNative.EncryptDataOaep(KeyHandle, data, padding.OaepHashAlgorithm.Name); + } + else + { + // no other padding possibilities at present, but we might version independently from more being added. + throw new CryptographicException(SR.GetString(SR.Cryptography_UnsupportedPaddingMode)); + }; + } + + + // + // Signature APIs + // + + [SecuritySafeCritical] + public override byte[] SignHash(byte[] hash, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) + { + if (hash == null) + { + throw new ArgumentNullException("hash"); + } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw new ArgumentException(SR.GetString(SR.Cryptography_HashAlgorithmNameNullOrEmpty), "hashAlgorithm"); + } + if (padding == null) + { + throw new ArgumentNullException("padding"); + } + + // Keep a local copy of the key. + CngKey key = Key; + SafeNCryptKeyHandle keyHandle = key.Handle; + + if (padding == RSASignaturePadding.Pkcs1) + { + return NCryptNative.SignHashPkcs1(keyHandle, hash, hashAlgorithm.Name); + } + else if (padding == RSASignaturePadding.Pss) + { + return NCryptNative.SignHashPss(keyHandle, hash, hashAlgorithm.Name, hash.Length); + } + else + { + // no other padding possibilities at present, but we might version independently from more being added. + throw new CryptographicException(SR.GetString(SR.Cryptography_UnsupportedPaddingMode)); + + } + } + + [SecuritySafeCritical] + public override bool VerifyHash(byte[] hash, byte[] signature, HashAlgorithmName hashAlgorithm, RSASignaturePadding padding) + { + if (hash == null) + { + throw new ArgumentNullException("hash"); + } + if (signature == null) + { + throw new ArgumentNullException("signature"); + } + if (String.IsNullOrEmpty(hashAlgorithm.Name)) + { + throw new ArgumentException(SR.GetString(SR.Cryptography_HashAlgorithmNameNullOrEmpty), "hashAlgorithm"); + } + if (padding == null) + { + throw new ArgumentNullException("padding"); + } + + if (padding == RSASignaturePadding.Pkcs1) + { + return NCryptNative.VerifySignaturePkcs1(KeyHandle, hash, hashAlgorithm.Name, signature); + } + else if (padding == RSASignaturePadding.Pss) + { + return NCryptNative.VerifySignaturePss(KeyHandle, hash, hashAlgorithm.Name, hash.Length, signature); + } + else + { + // no other padding possibilities at present, but we might version independently from more being added. + throw new CryptographicException(SR.GetString(SR.Cryptography_UnsupportedPaddingMode)); + } + } + } +} diff --git a/external/referencesource/System.Core/System/Security/Cryptography/SignatureVerificationResult.cs b/external/referencesource/System.Core/System/Security/Cryptography/SignatureVerificationResult.cs index e9314e9086..82482e9237 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/SignatureVerificationResult.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/SignatureVerificationResult.cs @@ -31,7 +31,7 @@ namespace System.Security.Cryptography { InvalidTimePeriodNesting = unchecked((int)0x800b0102), // CERT_E_VALIDITYPERIODNESTING InvalidCertificateRole = unchecked((int)0x800b0103), // CERT_E_ROLE PathLengthConstraintViolated = unchecked((int)0x800b0104), // CERT_E_PATHLENCONST - UnknownCriticalExtension = unchecked((int)0x800b0105), // CERT_E_ + UnknownCriticalExtension = unchecked((int)0x800b0105), // CERT_E_CRITICAL CertificateUsageNotAllowed = unchecked((int)0x800b0106), // CERT_E_PURPOSE IssuerChainingError = unchecked((int)0x800b0107), // CERT_E_ISSUERCHAINING CertificateMalformed = unchecked((int)0x800b0108), // CERT_E_MALFORMED @@ -47,4 +47,4 @@ namespace System.Security.Cryptography { InvalidCertificatePolicy = unchecked((int)0x800b0113), // CERT_E_INVALID_POLICY InvalidCertificateName = unchecked((int)0x800b0114) // CERT_E_INVALID_NAME } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/ECDsaCertificateExtensions.cs b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/ECDsaCertificateExtensions.cs new file mode 100644 index 0000000000..7ef63647f6 --- /dev/null +++ b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/ECDsaCertificateExtensions.cs @@ -0,0 +1,129 @@ +using System.Runtime.InteropServices; +using Microsoft.Win32.SafeHandles; + +namespace System.Security.Cryptography.X509Certificates +{ + /// + /// Provides extension methods for retrieving implementations for the + /// public and private keys of a . + /// + public static class ECDsaCertificateExtensions + { + + /// + /// Gets the private key from the certificate or null if + /// the certificate does not have an ECDsa private key. + /// + [SecuritySafeCritical] + public static ECDsa GetECDsaPrivateKey(this X509Certificate2 certificate) + { + if (certificate == null) { throw new ArgumentNullException("certificate"); } + //Check cert for private key and confirm it is ECDSA cert + if (!certificate.HasPrivateKey || !IsECDsa(certificate)) { return null; } + + using (SafeCertContextHandle certificateContext = X509Native.GetCertificateContext(certificate)) + using (SafeNCryptKeyHandle privateKeyHandle = X509Native.TryAcquireCngPrivateKey(certificateContext)) + { + CngKey key = CngKey.Open(privateKeyHandle, CngKeyHandleOpenOptions.None); + return new ECDsaCng(key); + } + } + + /// + /// Gets the public key from the certificate or null if the certificate does not have an ECDsa public key. + /// + [SecuritySafeCritical] + public static ECDsa GetECDsaPublicKey(this X509Certificate2 certificate) + { + if (certificate == null) { throw new ArgumentNullException("certificate"); } + if (!IsECDsa(certificate)) { return null; } + + SafeCertContextHandle safeCertContext = X509Native.GetCertificateContext(certificate); + IntPtr certHandle = safeCertContext.DangerousGetHandle(); + //Read the public key blob from the certificate + X509Native.CERT_CONTEXT pCertContext = (X509Native.CERT_CONTEXT)Marshal.PtrToStructure(certHandle, typeof(X509Native.CERT_CONTEXT)); + + IntPtr pSubjectPublicKeyInfo = new IntPtr((long)pCertContext.pCertInfo + + (long)Marshal.OffsetOf(typeof(X509Native.CERT_INFO), "SubjectPublicKeyInfo")); + + X509Native.CERT_PUBLIC_KEY_INFO certPublicKeyInfo = (X509Native.CERT_PUBLIC_KEY_INFO)Marshal.PtrToStructure(pSubjectPublicKeyInfo, + typeof(X509Native.CERT_PUBLIC_KEY_INFO)); + CngKey key; + //Import the public key blob to BCRYPT_KEY_HANDLE + using (SafeBCryptKeyHandle bcryptKeyHandle = BCryptNative.ImportAsymmetricPublicKey(certPublicKeyInfo, 0)) + { + if (bcryptKeyHandle.IsInvalid) + { + throw new CryptographicException("SR.GetString(SR.Cryptography_OpenInvalidHandle)"); + } + key = BCryptHandleToNCryptHandle(bcryptKeyHandle); + } + GC.KeepAlive(safeCertContext); + return new ECDsaCng(key); + } + + /// + /// Method take BCrypt handle as input and returns the CNGKey + /// + /// Accepts BCrypt Handle + /// Returns CNG key with NCrypt Handle + private static CngKey BCryptHandleToNCryptHandle(SafeBCryptKeyHandle bcryptKeyHandle) + { + byte[] keyBlob = BCryptNative.ExportBCryptKey(bcryptKeyHandle, BCryptNative.BCRYPT_ECCPUBLIC_BLOB); + //Now Import the key blob as NCRYPT_KEY_HANDLE + CngKey Key = CngKey.Import(keyBlob, CngKeyBlobFormat.EccPublicBlob); + return Key; + } + + /// + /// Check if the certificate contains ECDsa key or ECDH / ECMQV key. + /// + /// Certificate object + /// true if ECDsa key. False otherwise + private static bool IsECDsa(X509Certificate2 certificate) + { + string algName = certificate.PublicKey.Oid.FriendlyName; + string value = certificate.PublicKey.Oid.Value; + //At this point check OID. If it matches for ECC certs + //then go to extensions and find out difference between ECDSA and ECDH certs + if (value != X509Native.szOID_ECC_PUBLIC_KEY) { return false; } + else + { + //Following section is built based on RFC + //http://www.ietf.org/rfc/rfc5280.txt and + //http://www.rfc-archive.org/getrfc.php?rfc=5480. This RFC, section 3 describes when + // key can be ECDSA or ECDH or ECMQV. + foreach (X509Extension extension in certificate.Extensions) + { + //Check Key Usage OID value + if (extension.Oid.Value == "2.5.29.15") + { + X509KeyUsageExtension ext = (X509KeyUsageExtension)extension; + + if (!(ext.KeyUsages.HasFlag(X509KeyUsageFlags.KeyAgreement))) + { + //If this does not have KeyAgreement flag present, it cannot be ECDH or ECMQV key as KeyAgreement + // is mandatory flag for ECDH or ECMQV. In that case, at this point, it is safe to assume it is ECDSA + return true; + } + //If key has any of the following flag then it cannot be ECDH or ECMQV. Assume + //it is ECDSA. + if (ext.KeyUsages.HasFlag(X509KeyUsageFlags.DigitalSignature) || + ext.KeyUsages.HasFlag(X509KeyUsageFlags.NonRepudiation) || + ext.KeyUsages.HasFlag(X509KeyUsageFlags.KeyCertSign) || + ext.KeyUsages.HasFlag(X509KeyUsageFlags.CrlSign)) + { + return true; + } + else + { + return false; + } + } + } + } + //If key usage extension is not present in the certificate assume ECDSA + return true; + } + } +} diff --git a/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/RSACertificateExtensions.cs b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/RSACertificateExtensions.cs new file mode 100644 index 0000000000..e4ef01d3e6 --- /dev/null +++ b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/RSACertificateExtensions.cs @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Runtime.InteropServices; +using Microsoft.Win32.SafeHandles; + +namespace System.Security.Cryptography.X509Certificates +{ + /// + /// Provides extension methods for retrieving implementations for the + /// public and private keys of a . + /// + public static class RSACertificateExtensions + { + /// + /// Gets the public key from the certificate or null if the certificate does not have an RSA public key. + /// + [SecuritySafeCritical] + public static RSA GetRSAPublicKey(this X509Certificate2 certificate) + { + if (certificate == null) + { + throw new ArgumentNullException("certificate"); + } + + if (!IsRSA(certificate)) + { + return null; + } + + PublicKey publicKey = certificate.PublicKey; + AsnEncodedData asn = publicKey.EncodedKeyValue; + IntPtr structType = new IntPtr(CapiNative.CNG_RSA_PUBLIC_KEY_BLOB); + + SafeLocalAllocHandle cngBlobHandle; + uint cngBlobLength; + bool result = CapiNative.DecodeObject(structType, asn.RawData, out cngBlobHandle, out cngBlobLength); + + if (!result) + { + throw new CryptographicException(Marshal.GetLastWin32Error()); + } + + byte[] cngBlob = new byte[cngBlobLength]; + using (cngBlobHandle) + { + Marshal.Copy(cngBlobHandle.DangerousGetHandle(), cngBlob, 0, cngBlob.Length); + } + + CngKey key = CngKey.Import(cngBlob, CngKeyBlobFormat.GenericPublicBlob); + return new RSACng(key); + } + + /// + /// Gets the private key from the certificate or null if the certificate does not have an RSA private key. + /// + [SecuritySafeCritical] + public static RSA GetRSAPrivateKey(this X509Certificate2 certificate) + { + if (certificate == null) + { + throw new ArgumentNullException("certificate"); + } + + if (!certificate.HasPrivateKey || !IsRSA(certificate)) + { + return null; + } + + using (SafeCertContextHandle certificateContext = X509Native.GetCertificateContext(certificate)) + using (SafeNCryptKeyHandle privateKeyHandle = X509Native.TryAcquireCngPrivateKey(certificateContext)) + { + if (privateKeyHandle == null) + { + // fall back to CAPI if we cannot acquire the key using CNG. + return (RSA)certificate.PrivateKey; + } + + CngKey key = CngKey.Open(privateKeyHandle, CngKeyHandleOpenOptions.None); + return new RSACng(key); + } + } + + private static bool IsRSA(X509Certificate2 certificate) + { + uint algorithmId = OidToAlgorithmId(certificate.PublicKey.Oid); + + switch (algorithmId) + { + case CapiNative.CALG_RSA_SIGN: + case CapiNative.CALG_RSA_KEYX: + return true; + default: + return false; + } + } + + private static uint OidToAlgorithmId(Oid oid) + { + using (SafeLocalAllocHandle oidHandle = X509Utils.StringToAnsiPtr(oid.Value)) + { + CapiNative.CRYPT_OID_INFO oidInfo = CapiNative.CryptFindOIDInfo(CapiNative.CRYPT_OID_INFO_OID_KEY, oidHandle, 0); + return oidInfo.Algid; + } + } + } +} diff --git a/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/X509Native.cs b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/X509Native.cs index 3ff5fb4662..94aacfd6ea 100644 --- a/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/X509Native.cs +++ b/external/referencesource/System.Core/System/Security/Cryptography/X509Certificates/X509Native.cs @@ -5,18 +5,161 @@ // ==--== using System; +using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using Microsoft.Win32.SafeHandles; +using System.Diagnostics; using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; namespace System.Security.Cryptography.X509Certificates { + + internal static partial class X509Native { + + /// + /// Determine if a certificate has a specific property + /// + [SecuritySafeCritical] + internal static bool HasCertificateProperty(SafeCertContextHandle certificateContext, + CertificateProperty property) { + Debug.Assert(certificateContext != null, "certificateContext != null"); + Debug.Assert(!certificateContext.IsClosed && !certificateContext.IsInvalid, + "!certificateContext.IsClosed && !certificateContext.IsInvalid"); + + byte[] buffer = null; + int bufferSize = 0; + bool gotProperty = UnsafeNativeMethods.CertGetCertificateContextProperty(certificateContext, + property, + buffer, + ref bufferSize); + return gotProperty || + (ErrorCode)Marshal.GetLastWin32Error() == ErrorCode.MoreData; + } + + /// + /// Get the NCrypt handle to the private key of a certificate + /// or null if the private key cannot be acquired by NCrypt. + /// + [SecuritySafeCritical] + internal static SafeNCryptKeyHandle TryAcquireCngPrivateKey(SafeCertContextHandle certificateContext) { + Debug.Assert(certificateContext != null, "certificateContext != null"); + Debug.Assert(!certificateContext.IsClosed && !certificateContext.IsInvalid, + "!certificateContext.IsClosed && !certificateContext.IsInvalid"); + + bool freeKey = true; + SafeNCryptKeyHandle privateKey = null; + RuntimeHelpers.PrepareConstrainedRegions(); + try { + int keySpec = 0; + if (!UnsafeNativeMethods.CryptAcquireCertificatePrivateKey(certificateContext, + AcquireCertificateKeyOptions.AcquireOnlyNCryptKeys, + IntPtr.Zero, + out privateKey, + out keySpec, + out freeKey)) { + return null; + } + + return privateKey; + } + finally { + // If we're not supposed to release they key handle, then we need to bump the reference count + // on the safe handle to correspond to the reference that Windows is holding on to. This will + // prevent the CLR from freeing the object handle. + // + // This is certainly not the ideal way to solve this problem - it would be better for + // SafeNCryptKeyHandle to maintain an internal bool field that we could toggle here and + // have that suppress the release when the CLR calls the ReleaseHandle override. However, that + // field does not currently exist, so we'll use this hack instead. + if (privateKey != null && !freeKey) { + bool addedRef = false; + privateKey.DangerousAddRef(ref addedRef); + } + } + } + + /// + /// Get an arbitrary property of a certificate + /// + [SecuritySafeCritical] + internal static byte[] GetCertificateProperty(SafeCertContextHandle certificateContext, + CertificateProperty property) { + Debug.Assert(certificateContext != null, "certificateContext != null"); + Debug.Assert(!certificateContext.IsClosed && !certificateContext.IsInvalid, + "!certificateContext.IsClosed && !certificateContext.IsInvalid"); + + byte[] buffer = null; + int bufferSize = 0; + if (!UnsafeNativeMethods.CertGetCertificateContextProperty(certificateContext, + property, + buffer, + ref bufferSize)) { + ErrorCode errorCode = (ErrorCode)Marshal.GetLastWin32Error(); + if (errorCode != ErrorCode.MoreData) { + throw new CryptographicException((int)errorCode); + } + } + + buffer = new byte[bufferSize]; + if (!UnsafeNativeMethods.CertGetCertificateContextProperty(certificateContext, + property, + buffer, + ref bufferSize)) { + throw new CryptographicException(Marshal.GetLastWin32Error()); + } + + return buffer; + } + + /// + /// Get a property of a certificate formatted as a structure + /// + [SecurityCritical] + internal static T GetCertificateProperty(SafeCertContextHandle certificateContext, + CertificateProperty property) where T : struct { + Debug.Assert(certificateContext != null, "certificateContext != null"); + Debug.Assert(!certificateContext.IsClosed && !certificateContext.IsInvalid, + "!certificateContext.IsClosed && !certificateContext.IsInvalid"); + + byte[] rawProperty = GetCertificateProperty(certificateContext, property); + Debug.Assert(rawProperty.Length >= Marshal.SizeOf(typeof(T)), "Property did not return expected structure"); + + unsafe { + fixed (byte* pRawProperty = &rawProperty[0]) { + return (T)Marshal.PtrToStructure(new IntPtr(pRawProperty), typeof(T)); + } + } + } + + /// + /// Duplicate the certificate context into a safe handle + /// + [SecuritySafeCritical] + internal static SafeCertContextHandle DuplicateCertContext(IntPtr context) { + Debug.Assert(context != IntPtr.Zero); + + return UnsafeNativeMethods.CertDuplicateCertificateContext(context); + } + + // Gets a SafeHandle for the X509 certificate. The caller owns the returned handle and should dispose of it. It + // can be used independently of the lifetime of the original X509Certificate. + [SecuritySafeCritical] + internal static SafeCertContextHandle GetCertificateContext(X509Certificate certificate) { + SafeCertContextHandle certificateContext = DuplicateCertContext(certificate.Handle); + // Make sure to keep the X509Certificate object alive until after its certificate context is + // duplicated, otherwise it could end up being closed out from underneath us before we get a + // chance to duplicate the handle. + GC.KeepAlive(certificate); + return certificateContext; + } + } /// /// Native interop layer for X509 certificate and Authenticode functions. Native definitions can be /// found in wincrypt.h or msaxlapi.h /// - internal static class X509Native { + internal static partial class X509Native { /// /// Flags for CertVerifyAuthenticodeLicense /// @@ -31,6 +174,103 @@ namespace System.Security.Cryptography.X509Certificates { TrustMicrosoftRootOnly = 0x00000020 // AXL_TRUST_MICROSOFT_ROOT_ONLY } + internal const uint X509_ASN_ENCODING = 0x00000001; + internal const string szOID_ECC_PUBLIC_KEY = "1.2.840.10045.2.1"; //Copied from Windows header file + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CERT_CONTEXT { + internal uint dwCertEncodingType; + internal IntPtr pbCertEncoded; + internal uint cbCertEncoded; + internal IntPtr pCertInfo; + internal IntPtr hCertStore; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CERT_PUBLIC_KEY_INFO { + internal CRYPT_ALGORITHM_IDENTIFIER Algorithm; + internal CRYPT_BIT_BLOB PublicKey; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CERT_INFO { + internal uint dwVersion; + internal CRYPTOAPI_BLOB SerialNumber; + internal CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + internal CRYPTOAPI_BLOB Issuer; + internal FILETIME NotBefore; + internal FILETIME NotAfter; + internal CRYPTOAPI_BLOB Subject; + internal CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; + internal CRYPT_BIT_BLOB IssuerUniqueId; + internal CRYPT_BIT_BLOB SubjectUniqueId; + internal uint cExtension; + internal IntPtr rgExtension; // PCERT_EXTENSION + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CRYPT_ALGORITHM_IDENTIFIER { + [MarshalAs(UnmanagedType.LPStr)] + internal string pszObjId; + internal CRYPTOAPI_BLOB Parameters; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CRYPT_BIT_BLOB { + internal uint cbData; + internal IntPtr pbData; + internal uint cUnusedBits; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal struct CRYPTOAPI_BLOB { + internal uint cbData; + internal IntPtr pbData; + } + + /// + /// Flags for the CryptAcquireCertificatePrivateKey API + /// + internal enum AcquireCertificateKeyOptions { + None = 0x00000000, + AcquireOnlyNCryptKeys = 0x00040000, // CRYPT_ACQUIRE_ONLY_NCRYPT_KEY_FLAG + } + + /// + /// Well known certificate property IDs + /// + internal enum CertificateProperty { + KeyProviderInfo = 2, // CERT_KEY_PROV_INFO_PROP_ID + KeyContext = 5, // CERT_KEY_CONTEXT_PROP_ID + } + + /// + /// Error codes returned from X509 APIs + /// + internal enum ErrorCode { + Success = 0x00000000, // ERROR_SUCCESS + MoreData = 0x000000ea, // ERROR_MORE_DATA + } + + [StructLayout(LayoutKind.Sequential)] + internal struct CRYPT_KEY_PROV_INFO { + [MarshalAs(UnmanagedType.LPWStr)] + internal string pwszContainerName; + + [MarshalAs(UnmanagedType.LPWStr)] + internal string pwszProvName; + + internal int dwProvType; + + internal int dwFlags; + + internal int cProvParam; + + internal IntPtr rgProvParam; // PCRYPT_KEY_PROV_PARAM + + internal int dwKeySpec; + } + [StructLayout(LayoutKind.Sequential)] [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)] public struct AXL_AUTHENTICODE_SIGNER_INFO { @@ -96,6 +336,60 @@ namespace System.Security.Cryptography.X509Certificates { AxlVerificationFlags dwFlags, [In, Out] ref AXL_AUTHENTICODE_SIGNER_INFO pSignerInfo, [In, Out] ref AXL_AUTHENTICODE_TIMESTAMPER_INFO pTimestamperInfo); + + [DllImport("crypt32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CertGetCertificateContextProperty(SafeCertContextHandle pCertContext, + CertificateProperty dwPropId, + [Out, MarshalAs(UnmanagedType.LPArray)] byte[] pvData, + [In, Out] ref int pcbData); + [DllImport("crypt32.dll")] + internal static extern SafeCertContextHandle CertDuplicateCertificateContext(IntPtr certContext); // CERT_CONTEXT * + + [DllImport("crypt32.dll", SetLastError = true)] + [return: MarshalAs(UnmanagedType.Bool)] + internal static extern bool CryptAcquireCertificatePrivateKey(SafeCertContextHandle pCert, + AcquireCertificateKeyOptions dwFlags, + IntPtr pvReserved, // void * + [Out] out SafeNCryptKeyHandle phCryptProvOrNCryptKey, + [Out] out int dwKeySpec, + [Out, MarshalAs(UnmanagedType.Bool)] out bool pfCallerFreeProvOrNCryptKey); + } + } + + internal sealed class SafeCertContextHandle : SafeHandleZeroOrMinusOneIsInvalid + { + [SecuritySafeCritical] + private SafeCertContextHandle() : base(true) { } + + // 0 is an Invalid Handle + [SecuritySafeCritical] + internal SafeCertContextHandle(IntPtr handle) + : base(true) + { + SetHandle(handle); + } + + internal static SafeCertContextHandle InvalidHandle + { + [SecuritySafeCritical] + get { return new SafeCertContextHandle(IntPtr.Zero); } + } + + [DllImport("Crypt32.dll", SetLastError = true), + ResourceExposure(ResourceScope.None)] + //#if !FEATURE_CORESYSTEM + // [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + //#endif + private static extern bool CertFreeCertificateContext(IntPtr pCertContext); + +#if FEATURE_CORESYSTEM + [SecurityCritical] +#endif + [SecuritySafeCritical] + override protected bool ReleaseHandle() + { + return CertFreeCertificateContext(handle); } } } diff --git a/external/referencesource/System.Core/System/Security/ManifestKinds.cs b/external/referencesource/System.Core/System/Security/ManifestKinds.cs index 704367afa4..6dbd4ef65e 100644 --- a/external/referencesource/System.Core/System/Security/ManifestKinds.cs +++ b/external/referencesource/System.Core/System/Security/ManifestKinds.cs @@ -14,4 +14,4 @@ namespace System.Security { Application = 0x00000002, ApplicationAndDeployment = Deployment | Application } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Core/System/threading/ReaderWriterLockSlim/LockRecursionException.cs b/external/referencesource/System.Core/System/threading/ReaderWriterLockSlim/LockRecursionException.cs index fdca26ddea..2e84506961 100644 --- a/external/referencesource/System.Core/System/threading/ReaderWriterLockSlim/LockRecursionException.cs +++ b/external/referencesource/System.Core/System/threading/ReaderWriterLockSlim/LockRecursionException.cs @@ -13,7 +13,7 @@ // acquire a lock, because the particular lock kind doesn't // support it in its current state. // -// [....] +// emadali // ============================================================*/ diff --git a/external/referencesource/System.Data.DataSetExtensions/System/Data/ShippingAssemblyAttribute.cs b/external/referencesource/System.Data.DataSetExtensions/System/Data/ShippingAssemblyAttribute.cs index ec4cc147e0..1fd9bbc73b 100644 --- a/external/referencesource/System.Data.DataSetExtensions/System/Data/ShippingAssemblyAttribute.cs +++ b/external/referencesource/System.Data.DataSetExtensions/System/Data/ShippingAssemblyAttribute.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// stevesta //------------------------------------------------------------------------------ -[assembly: System.Security.SecurityCritical] +[assembly: System.Security.SecurityCritical] \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/DesignXmlConstants.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/DesignXmlConstants.cs index 764c6c7ae3..a1c5af0dd9 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/DesignXmlConstants.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/DesignXmlConstants.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.Entity.Design { diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterEffect.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterEffect.cs index 6924a3bd13..aafbb7b7de 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterEffect.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterEffect.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterObjectTypes.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterObjectTypes.cs index 8996c2f66a..23b5a3e275 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterObjectTypes.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaFilterObjectTypes.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaGenerator/EntityStoreSchemaGenerator.EntityCreationStatus.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaGenerator/EntityStoreSchemaGenerator.EntityCreationStatus.cs index 241da8db9b..3a6e78ae7c 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaGenerator/EntityStoreSchemaGenerator.EntityCreationStatus.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/EntityStoreSchemaGenerator/EntityStoreSchemaGenerator.EntityCreationStatus.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.Entity.Design { diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/PluralizationService/ICustomPluralizationMapping.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/PluralizationService/ICustomPluralizationMapping.cs index 86dfd0b760..9ec306433a 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/PluralizationService/ICustomPluralizationMapping.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/PluralizationService/ICustomPluralizationMapping.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner jeffreed //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/SSDLGenerator/ModelBuilderErrorCodes.cs b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/SSDLGenerator/ModelBuilderErrorCodes.cs index c7b87a7ad5..6ab9511a70 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/SSDLGenerator/ModelBuilderErrorCodes.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/Entity/Design/SSDLGenerator/ModelBuilderErrorCodes.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.Entity.Design.SsdlGenerator { diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/FixUpType.cs b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/FixUpType.cs index fa0c50efba..a4168c9a12 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/FixUpType.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/FixUpType.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.EntityModel.Emitters diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/PrivateMemberPrefixId.cs b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/PrivateMemberPrefixId.cs index 35573d1ae2..fdbaab8de4 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/PrivateMemberPrefixId.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/Emitters/PrivateMemberPrefixId.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/LanguageOption.cs b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/LanguageOption.cs index 94714f3da2..914b7f86f1 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/LanguageOption.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/LanguageOption.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.Entity.Design diff --git a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/TerminalErrorException.cs b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/TerminalErrorException.cs index a01ee3c262..e6070187bc 100644 --- a/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/TerminalErrorException.cs +++ b/external/referencesource/System.Data.Entity.Design/System/Data/EntityModel/TerminalErrorException.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner srimand //--------------------------------------------------------------------- using System; using System.Data; diff --git a/external/referencesource/System.Data.Entity/System/Data/Common/ShippingAssemblyAttributes.cs b/external/referencesource/System.Data.Entity/System/Data/Common/ShippingAssemblyAttributes.cs index ea84eb1372..b48c254be6 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Common/ShippingAssemblyAttributes.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Common/ShippingAssemblyAttributes.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupowner [....] +// @owner srimand +// @backupowner adoshi //--------------------------------------------------------------------- // comment this line out to see dead code: diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Action.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Action.cs index 230ece9575..5c7f8f4215 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Action.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Action.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/CollectionKind.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/CollectionKind.cs index 3030d0ee31..6270d90374 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/CollectionKind.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/CollectionKind.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; @@ -32,4 +32,4 @@ namespace System.Data.Metadata.Edm /// List, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ConcurrencyMode.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ConcurrencyMode.cs index 7b105d980f..86037f1595 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ConcurrencyMode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ConcurrencyMode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; @@ -28,4 +28,4 @@ namespace System.Data.Metadata.Edm /// Fixed, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ErrorCode.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ErrorCode.cs index 55ae02646c..fce0845337 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ErrorCode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ErrorCode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.EntityModel.SchemaObjectModel diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationship.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationship.cs index db2095deb0..e14bc8e22d 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationship.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationship.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationshipEnd.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationshipEnd.cs index bc056a1976..0180760cc8 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationshipEnd.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/IRelationshipEnd.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ISchemaElementLookUpTable.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ISchemaElementLookUpTable.cs index e389d862e3..e1e5158373 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ISchemaElementLookUpTable.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/ISchemaElementLookUpTable.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; @@ -50,4 +50,4 @@ namespace System.Data.EntityModel.SchemaObjectModel T LookUpEquivalentKey(string key); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Operation.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Operation.cs index b9ad73bb63..9e557b97d3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Operation.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/Operation.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/SchemaDataModelOption.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/SchemaDataModelOption.cs index c11dab17e8..16065ee9e3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/SchemaDataModelOption.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/SchemaDataModelOption.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/StoreGeneratedPattern.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/StoreGeneratedPattern.cs index 9638cf4f8a..76b9584ec6 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/StoreGeneratedPattern.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/StoreGeneratedPattern.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- using System; @@ -31,4 +31,4 @@ namespace System.Data.Metadata.Edm /// Computed = 2, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/TypeModifier.cs b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/TypeModifier.cs index 65ff5b4b6c..451cef49c8 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/TypeModifier.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityModel/SchemaObjectModel/TypeModifier.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.EntityModel.SchemaObjectModel diff --git a/external/referencesource/System.Data.Entity/System/Data/EntityState.cs b/external/referencesource/System.Data.Entity/System/Data/EntityState.cs index efd8e08705..19de7695e9 100644 --- a/external/referencesource/System.Data.Entity/System/Data/EntityState.cs +++ b/external/referencesource/System.Data.Entity/System/Data/EntityState.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner fzamore +// @backupOwner dsimmons //--------------------------------------------------------------------- namespace System.Data { diff --git a/external/referencesource/System.Data.Entity/System/Data/IEntityAdapter.cs b/external/referencesource/System.Data.Entity/System/Data/IEntityAdapter.cs index a70a65c82d..5986e7f3c3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/IEntityAdapter.cs +++ b/external/referencesource/System.Data.Entity/System/Data/IEntityAdapter.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// bfung // spather //------------------------------------------------------------------------------ diff --git a/external/referencesource/System.Data.Entity/System/Data/IEntityStateEntry.cs b/external/referencesource/System.Data.Entity/System/Data/IEntityStateEntry.cs index eb8fc00c23..3c5f65b98d 100644 --- a/external/referencesource/System.Data.Entity/System/Data/IEntityStateEntry.cs +++ b/external/referencesource/System.Data.Entity/System/Data/IEntityStateEntry.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner dsimmons +// @backupOwner amirhmy //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/IEntityStateManager.cs b/external/referencesource/System.Data.Entity/System/Data/IEntityStateManager.cs index 84a827fc4b..b042a5e9a7 100644 --- a/external/referencesource/System.Data.Entity/System/Data/IEntityStateManager.cs +++ b/external/referencesource/System.Data.Entity/System/Data/IEntityStateManager.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner dsimmons +// @backupOwner amirhmy //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/IExtendedDataRecord.cs b/external/referencesource/System.Data.Entity/System/Data/IExtendedDataRecord.cs index 4740870683..448c8e1a6d 100644 --- a/external/referencesource/System.Data.Entity/System/Data/IExtendedDataRecord.cs +++ b/external/referencesource/System.Data.Entity/System/Data/IExtendedDataRecord.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// sheetgu +// simoncav //------------------------------------------------------------------------------ namespace System.Data { @@ -32,4 +32,4 @@ namespace System.Data { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "i")] DbDataReader GetDataReader(int i); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/ObjectMslConstructs.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/ObjectMslConstructs.cs index a7452f5c72..683d97f94b 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/ObjectMslConstructs.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/ObjectMslConstructs.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMappingErrorCode.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMappingErrorCode.cs index e4cdc26392..2dead04e0a 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMappingErrorCode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMappingErrorCode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMslConstructs.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMslConstructs.cs index 0c0b16806d..3ada1ef7f1 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMslConstructs.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/StorageMslConstructs.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/Update/Internal/PropagatorFlags.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/Update/Internal/PropagatorFlags.cs index 1716ee42bd..733b116044 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/Update/Internal/PropagatorFlags.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/Update/Internal/PropagatorFlags.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner cmeek +// @backupOwner pratikp //--------------------------------------------------------------------- namespace System.Data.Mapping.Update.Internal @@ -44,4 +44,4 @@ namespace System.Data.Mapping.Update.Internal /// ForeignKey = 32, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Structures/CellTreeOpType.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Structures/CellTreeOpType.cs index a59be2ad95..d30ab4d6b3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Structures/CellTreeOpType.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Structures/CellTreeOpType.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner srimand +// @backupOwner cmeek //--------------------------------------------------------------------- diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Utils/ViewGenErrorCode.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Utils/ViewGenErrorCode.cs index 894108d4c7..556a1f40ce 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Utils/ViewGenErrorCode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Utils/ViewGenErrorCode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner srimand +// @backupOwner cmeek //--------------------------------------------------------------------- diff --git a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Validation/ConstraintBase.cs b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Validation/ConstraintBase.cs index df7e0e97e4..b4b27eb677 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Validation/ConstraintBase.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Mapping/ViewGeneration/Validation/ConstraintBase.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner srimand +// @backupOwner cmeek //--------------------------------------------------------------------- using System.Data.Common.Utils; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/DataSpace.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/DataSpace.cs index a409eb1b11..3ecbcd20a1 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/DataSpace.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/DataSpace.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/AttributeKind.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/AttributeKind.cs index 984882086e..bae1992de7 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/AttributeKind.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/AttributeKind.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/BuiltInKind.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/BuiltInKind.cs index 0292051243..baeb9a544f 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/BuiltInKind.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/BuiltInKind.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/OperationAction.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/OperationAction.cs index daa7993814..5e30d38202 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/OperationAction.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/OperationAction.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/ParameterMode.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/ParameterMode.cs index 22be0531bd..17801dea5a 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/ParameterMode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/ParameterMode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- namespace System.Data.Metadata.Edm @@ -31,4 +31,4 @@ namespace System.Data.Metadata.Edm /// ReturnValue } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/PrimitiveTypeKind.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/PrimitiveTypeKind.cs index 0b264d9c92..2767594333 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/PrimitiveTypeKind.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/PrimitiveTypeKind.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/RelationshipMultiplicity.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/RelationshipMultiplicity.cs index 271f02bc46..88e5ec18c8 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/RelationshipMultiplicity.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/Edm/RelationshipMultiplicity.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner leil //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/EdmSchemaErrorSeverity.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/EdmSchemaErrorSeverity.cs index 207a99fb91..a3e97ffcec 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/EdmSchemaErrorSeverity.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/EdmSchemaErrorSeverity.cs @@ -3,14 +3,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.Metadata.Edm { // if you edit this file be sure you change GeneratorErrorSeverity - // also, they must stay in [....] + // also, they must stay in sync /// /// diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/MetadataArtifactAssemblyResolver.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/MetadataArtifactAssemblyResolver.cs index 98a3c386f5..6ef2b2a1fa 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/MetadataArtifactAssemblyResolver.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/MetadataArtifactAssemblyResolver.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.Metadata.Edm diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/ParameterTypeSemantics.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/ParameterTypeSemantics.cs index f76b7d2408..4c66d34744 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/ParameterTypeSemantics.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/ParameterTypeSemantics.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.Metadata.Edm @@ -30,4 +30,4 @@ namespace System.Data.Metadata.Edm /// ExactMatchOnly = 2 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Metadata/XmlConstants.cs b/external/referencesource/System.Data.Entity/System/Data/Metadata/XmlConstants.cs index 7276c7c07a..e9399896f3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Metadata/XmlConstants.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Metadata/XmlConstants.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner leil +// @backupOwner anpete //--------------------------------------------------------------------- namespace System.Data.Metadata.Edm @@ -191,4 +191,4 @@ namespace System.Data.Metadata.Edm #endregion // CDM Schema Xml NodeNames } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityChangeTracker.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityChangeTracker.cs index dd6854bfe9..08cf53debb 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityChangeTracker.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityChangeTracker.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner sparra +// @backupOwner barryfr //--------------------------------------------------------------------- using System.Data.Objects; using System.Reflection; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithChangeTracker.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithChangeTracker.cs index b46038ab7c..daee10b57b 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithChangeTracker.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithChangeTracker.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner barryfr +// @backupOwner sparra //--------------------------------------------------------------------- using System.Data.Objects; using System.Reflection; @@ -22,4 +22,4 @@ namespace System.Data.Objects.DataClasses /// Reference to the change tracker that is managing this entity void SetChangeTracker(IEntityChangeTracker changeTracker); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithKey.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithKey.cs index ff6c95bc3a..a0851617cb 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithKey.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithKey.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner barryfr +// @backupOwner sparra //--------------------------------------------------------------------- using System.Data.Objects; using System.Reflection; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithRelationships.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithRelationships.cs index 58ec9e3a3a..7ff9f7d0ad 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithRelationships.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IEntityWithRelationships.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner sparra +// @backupOwner barryfr //--------------------------------------------------------------------- using System.Data.Objects; using System.Reflection; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelatedEnd.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelatedEnd.cs index 04570e2da2..46d8a1e7d3 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelatedEnd.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelatedEnd.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner mirszy +// @backupOwner sparra //--------------------------------------------------------------------- using System.Data; using System.Data.Common; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelationshipFixer.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelationshipFixer.cs index c6a84094ca..3c0d1e11d0 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelationshipFixer.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/IRelationshipFixer.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner mirszy +// @backupOwner sparra //--------------------------------------------------------------------- namespace System.Data.Objects.DataClasses diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/RelationshipKind.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/RelationshipKind.cs index 82ec31d7a8..a9425d817d 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/RelationshipKind.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/DataClasses/RelationshipKind.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffreed +// @backupOwner pratikp //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectSet.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectSet.cs index 381c66c882..999c0eb866 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectSet.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectSet.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jeffders +// @backupOwner avickers //--------------------------------------------------------------------- using System.Collections; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectView.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectView.cs index 3930b7725b..daba556e0f 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectView.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectView.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner amirhmy +// @backupOwner dsimmons //--------------------------------------------------------------------- using System; using System.ComponentModel; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectViewData.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectViewData.cs index 9cc99a2613..055e0f92a9 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectViewData.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/IObjectViewData.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner jhutson +// @backupOwner jeffders //--------------------------------------------------------------------- using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/Internal/IEntityWrapper.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/Internal/IEntityWrapper.cs index 40eee8529b..4ebf495429 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/Internal/IEntityWrapper.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/Internal/IEntityWrapper.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner avickers +// @backupOwner jeffders //--------------------------------------------------------------------- using System.Collections; using System.Data.Objects.DataClasses; @@ -67,7 +67,7 @@ namespace System.Data.Objects.Internal ObjectContext Context { get; set; } /// - /// The merge option ----oicated with the wrapped entity. + /// The merge option assoicated with the wrapped entity. /// MergeOption MergeOption { get; } diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/MergeOption.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/MergeOption.cs index d522f2a756..9b709e3313 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/MergeOption.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/MergeOption.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner markash +// @backupOwner dsimmons //------------------------------------------------------------------------------ namespace System.Data.Objects { diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/RefreshMode.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/RefreshMode.cs index 4adc082600..a677e0dffd 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/RefreshMode.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/RefreshMode.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner markash +// @backupOwner dsimmons //------------------------------------------------------------------------------ namespace System.Data.Objects diff --git a/external/referencesource/System.Data.Entity/System/Data/Objects/SaveOptions.cs b/external/referencesource/System.Data.Entity/System/Data/Objects/SaveOptions.cs index b79e86b6c2..b53fe1dfbf 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Objects/SaveOptions.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Objects/SaveOptions.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner mirszy +// @backupOwner jeffders //------------------------------------------------------------------------------ namespace System.Data.Objects diff --git a/external/referencesource/System.Data.Entity/System/Data/Query/InternalTrees/BasicValidator.cs b/external/referencesource/System.Data.Entity/System/Data/Query/InternalTrees/BasicValidator.cs index 5d55c8dcee..dad56e9dde 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Query/InternalTrees/BasicValidator.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Query/InternalTrees/BasicValidator.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner simoncav +// @backupOwner katicad //--------------------------------------------------------------------- using System; @@ -283,7 +283,7 @@ namespace System.Data.Query.InternalTrees public override void Visit(SoftCastOp op, Node n) { VisitScalarOpDefault(op, n); - // [....] 9/21/06 - temporarily removing check here + // Aconrad 9/21/06 - temporarily removing check here // because the assert wrongly fails in some cases where the types are promotable, // but the facets are not. Put this back when that issue is solved. // Assert(TypeSemantics.IsEquivalentOrPromotableTo(n.Child0.Op.Type, op.Type), "Illegal SoftCastOp: Cannot promote input type {0} to target type {1}", n.Child0.Op.Type.Identity, op.Type.Identity); diff --git a/external/referencesource/System.Data.Entity/System/Data/Query/PlanCompiler/Validator.cs b/external/referencesource/System.Data.Entity/System/Data/Query/PlanCompiler/Validator.cs index 9318b05eb0..4df0d97fcb 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Query/PlanCompiler/Validator.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Query/PlanCompiler/Validator.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner katicad +// @backupOwner simoncav //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Entity/System/Data/Spatial/DbSpatialDataReader.cs b/external/referencesource/System.Data.Entity/System/Data/Spatial/DbSpatialDataReader.cs index ef541dfe97..5b41b42460 100644 --- a/external/referencesource/System.Data.Entity/System/Data/Spatial/DbSpatialDataReader.cs +++ b/external/referencesource/System.Data.Entity/System/Data/Spatial/DbSpatialDataReader.cs @@ -4,7 +4,7 @@ // // // @owner willa -// @backupOwner [....] +// @backupOwner srimand //--------------------------------------------------------------------- namespace System.Data.Spatial @@ -29,4 +29,4 @@ namespace System.Data.Spatial /// The instance of DbGeometry at the specified column value public abstract DbGeometry GetGeometry(int ordinal); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Entity/System/Data/SqlClient/SqlGen/ISqlFragment.cs b/external/referencesource/System.Data.Entity/System/Data/SqlClient/SqlGen/ISqlFragment.cs index 5d79af84cd..226d33c0c2 100644 --- a/external/referencesource/System.Data.Entity/System/Data/SqlClient/SqlGen/ISqlFragment.cs +++ b/external/referencesource/System.Data.Entity/System/Data/SqlClient/SqlGen/ISqlFragment.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner katicad +// @backupOwner sheetgu //--------------------------------------------------------------------- using System; diff --git a/external/referencesource/System.Data.Linq/FunctionResults.cs b/external/referencesource/System.Data.Linq/FunctionResults.cs index 2a8050fb29..3deee1bf5c 100644 --- a/external/referencesource/System.Data.Linq/FunctionResults.cs +++ b/external/referencesource/System.Data.Linq/FunctionResults.cs @@ -35,7 +35,7 @@ namespace System.Data.Linq { /// /// An interface for representing the result of a mapped function with a single return sequence. /// - [SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification="[....]: Meant to represent a database table which is delayed loaded and doesn't provide collection semantics.")] + [SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification="tadam: Meant to represent a database table which is delayed loaded and doesn't provide collection semantics.")] public interface ISingleResult : IEnumerable, IFunctionResult, IDisposable { } /// @@ -47,7 +47,7 @@ namespace System.Data.Linq { /// /// /// - [SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "[....]: Generic parameters are required for strong-typing of the return type.")] + [SuppressMessage("Microsoft.Design", "CA1004:GenericMethodsShouldProvideTypeParameter", Justification = "tadam: Generic parameters are required for strong-typing of the return type.")] IEnumerable GetResult(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Linq/SqlClient/Reader/ObjectReader.cs b/external/referencesource/System.Data.Linq/SqlClient/Reader/ObjectReader.cs index 2b2b6fd306..af65ca3c36 100644 --- a/external/referencesource/System.Data.Linq/SqlClient/Reader/ObjectReader.cs +++ b/external/referencesource/System.Data.Linq/SqlClient/Reader/ObjectReader.cs @@ -42,4 +42,4 @@ namespace System.Data.Linq.SqlClient { internal interface ICompiledSubQuery { IExecuteResult Execute(IProvider provider, object[] parentArgs, object[] userArgs); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.Linq/misc/SecurityUtils.cs b/external/referencesource/System.Data.Linq/misc/SecurityUtils.cs index 76e02fafba..66211b4ac0 100644 --- a/external/referencesource/System.Data.Linq/misc/SecurityUtils.cs +++ b/external/referencesource/System.Data.Linq/misc/SecurityUtils.cs @@ -37,6 +37,7 @@ namespace System.Windows.Forms /// internal static class SecurityUtils { +#if !DISABLE_CAS_USE private static volatile ReflectionPermission memberAccessPermission = null; private static volatile ReflectionPermission restrictedMemberAccessPermission = null; @@ -58,24 +59,30 @@ namespace System.Windows.Forms return restrictedMemberAccessPermission; } } +#endif private static void DemandReflectionAccess(Type type) { +#if !DISABLE_CAS_USE try { MemberAccessPermission.Demand(); } catch (SecurityException) { DemandGrantSet(type.Assembly); } +#endif } [SecuritySafeCritical] private static void DemandGrantSet(Assembly assembly) { +#if !DISABLE_CAS_USE PermissionSet targetGrantSet = assembly.PermissionSet; targetGrantSet.AddPermission(RestrictedMemberAccessPermission); targetGrantSet.Demand(); +#endif } private static bool HasReflectionPermission(Type type) { +#if !DISABLE_CAS_USE try { DemandReflectionAccess(type); return true; @@ -84,6 +91,9 @@ namespace System.Windows.Forms } return false; +#else + return true; +#endif } diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Assembly.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Assembly.cs index 86ae68722f..2cf2fa90c7 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Assembly.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Assembly.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ using System.Runtime.CompilerServices; diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/ISourceLineInfo.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/ISourceLineInfo.cs index c82cb37aa2..7a282ff5e4 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/ISourceLineInfo.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/ISourceLineInfo.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlILOptimization.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlILOptimization.cs index 2a3c839178..2acef83867 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlILOptimization.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlILOptimization.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// akimball //------------------------------------------------------------------------------ namespace System.Xml.Xsl.IlGen { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlIlTrace.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlIlTrace.cs index c728a2d955..9a3142f614 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlIlTrace.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/IlGen/XmlIlTrace.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// akimball //------------------------------------------------------------------------------ using System; using System.IO; diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/QilNodeType.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/QilNodeType.cs index 14e8855e64..6ba982665a 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/QilNodeType.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/QilNodeType.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// akimball //------------------------------------------------------------------------------ namespace System.Xml.Xsl.Qil { /// An enumeration of all the possible QilExpression node types. diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/SerializationHints.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/SerializationHints.cs index 1483494fda..2e5d1c23b7 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/SerializationHints.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/QIL/SerializationHints.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// akimball //------------------------------------------------------------------------------ using System; @@ -12,4 +12,4 @@ namespace System.Xml.Xsl.Qil { CData, DisableOutputEscaping, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXPathEnvironment.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXPathEnvironment.cs index e47f52b15a..4e16b35f7c 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXPathEnvironment.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXPathEnvironment.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ using System.Collections.Generic; using System.Xml.Xsl.Qil; diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXpathBuilder.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXpathBuilder.cs index 4aa3d4f7ed..2f7099bd22 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXpathBuilder.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/IXpathBuilder.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ using System; using System.Collections.Generic; diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathAxis.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathAxis.cs index 01d3587ab3..532bdaa136 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathAxis.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathAxis.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl.XPath { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathContext.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathContext.cs index 480658bb6e..1a9890c703 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathContext.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathContext.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ #if DontUse @@ -120,4 +120,4 @@ namespace System.Xml.Xsl.XPath { } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathOperator.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathOperator.cs index 58998960d4..dee4c6c7be 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathOperator.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XPath/XPathOperator.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl.XPath { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XmlNodeKindFlags.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XmlNodeKindFlags.cs index 57029b028b..a3877a1aac 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XmlNodeKindFlags.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XmlNodeKindFlags.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// akimball //------------------------------------------------------------------------------ using System; namespace System.Xml.Xsl { @@ -64,4 +64,4 @@ namespace System.Xml.Xsl { /// Any = 0x7F, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/IErrorHelper.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/IErrorHelper.cs index 8462a1abe6..49cfac06e3 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/IErrorHelper.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/IErrorHelper.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// antonl //------------------------------------------------------------------------------ namespace System.Xml.Xsl { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/XslFlags.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/XslFlags.cs index e50eca0826..a9ba535bbd 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/XslFlags.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/Xslt/XslFlags.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ActionFrame.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ActionFrame.cs index e802f4f5f0..21f5fb062e 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ActionFrame.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ActionFrame.cs @@ -76,7 +76,6 @@ namespace System.Xml.Xsl.XsltOld { return ++ this.counter; } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] internal void AllocateVariables(int count) { if (0 < count) { this.variables = new object [count]; diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/InputScopeManager.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/InputScopeManager.cs index e5e90afbe5..b1c1afae2b 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/InputScopeManager.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/InputScopeManager.cs @@ -107,7 +107,6 @@ namespace System.Xml.Xsl.XsltOld { return ResolveNonEmptyPrefix(prefix); } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] public string ResolveXPathNamespace(string prefix) { Debug.Assert(prefix != null); if (prefix.Length == 0) { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/OutputScopeManager.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/OutputScopeManager.cs index a173ae0557..dfefae8392 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/OutputScopeManager.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/OutputScopeManager.cs @@ -26,7 +26,6 @@ namespace System.Xml.Xsl.XsltOld { } internal OutputScope CurrentElementScope { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { Debug.Assert(this.elementScopesStack.Peek() != null); // We adding rootElementScope to garantee this return (OutputScope) this.elementScopesStack.Peek(); diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/Processor.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/Processor.cs index 2981dc9b74..740dc7db76 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/Processor.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/Processor.cs @@ -185,7 +185,6 @@ namespace System.Xml.Xsl.XsltOld { this.sortArray.Add(sortinfo); } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] internal void InitSortArray() { if (this.sortArray == null) { this.sortArray = new ArrayList(); @@ -343,7 +342,6 @@ namespace System.Xml.Xsl.XsltOld { this.PushActionFrame(this.rootAction, /*nodeSet:*/null); } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] public ReaderOutput StartReader() { ReaderOutput output = new ReaderOutput(this); this.builder = new RecordBuilder(output, this.nameTable); diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ReaderOutput.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ReaderOutput.cs index 61403d4360..b8f45d089f 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ReaderOutput.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/ReaderOutput.cs @@ -56,7 +56,6 @@ namespace System.Xml.Xsl.XsltOld { // XmlReader abstract methods implementation public override XmlNodeType NodeType { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.NodeType; @@ -84,7 +83,6 @@ namespace System.Xml.Xsl.XsltOld { } public override string LocalName { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.LocalName; @@ -92,7 +90,6 @@ namespace System.Xml.Xsl.XsltOld { } public override string NamespaceURI { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.NamespaceURI; @@ -100,7 +97,6 @@ namespace System.Xml.Xsl.XsltOld { } public override string Prefix { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.Prefix; @@ -114,7 +110,6 @@ namespace System.Xml.Xsl.XsltOld { } public override string Value { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.Value; @@ -122,7 +117,6 @@ namespace System.Xml.Xsl.XsltOld { } public override int Depth { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.Depth; @@ -136,7 +130,6 @@ namespace System.Xml.Xsl.XsltOld { } public override bool IsEmptyElement { - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] get { CheckCurrentInfo(); return this.currentInfo.IsEmptyTag; @@ -239,7 +232,6 @@ namespace System.Xml.Xsl.XsltOld { SetAttribute(i); } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] public override bool MoveToFirstAttribute() { if (this.attributeCount <= 0) { Debug.Assert(this.attributeCount == 0); @@ -503,7 +495,6 @@ namespace System.Xml.Xsl.XsltOld { return Processor.OutputResult.Interrupt; } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] public void TheEnd() { // nothing here, was taken care of by RecordBuilder } @@ -517,7 +508,6 @@ namespace System.Xml.Xsl.XsltOld { this.currentInfo = this.mainNode; } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] private void SetAttribute(int attrib) { Debug.Assert(0 <= attrib && attrib < this.attributeCount); Debug.Assert(0 <= attrib && attrib < this.attributeList.Count); diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/RecordOutput.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/RecordOutput.cs index a161afdd56..a17ede7d4a 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/RecordOutput.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/RecordOutput.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl.XsltOld { diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltCompileContext.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltCompileContext.cs index b64c0bca60..a6c74c175d 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltCompileContext.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltCompileContext.cs @@ -53,7 +53,6 @@ namespace System.Xml.Xsl.XsltOld { get { return string.Empty; } } - [System.Runtime.TargetedPatchingOptOutAttribute("Performance critical to inline across NGen image boundaries")] public override string LookupNamespace(string prefix) { return this.manager.ResolveXPathNamespace(prefix); } diff --git a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltDebugger.cs b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltDebugger.cs index 167880fe92..75237b5744 100644 --- a/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltDebugger.cs +++ b/external/referencesource/System.Data.SqlXml/System/Xml/Xsl/XsltOld/XsltDebugger.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// sdub //------------------------------------------------------------------------------ namespace System.Xml.Xsl.XsltOld.Debugger { diff --git a/external/referencesource/System.Data/FxCopSuppressions/Baseline.cs.REMOVED.git-id b/external/referencesource/System.Data/FxCopSuppressions/Baseline.cs.REMOVED.git-id index b3c3c6da69..f01da8f291 100644 --- a/external/referencesource/System.Data/FxCopSuppressions/Baseline.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/FxCopSuppressions/Baseline.cs.REMOVED.git-id @@ -1 +1 @@ -aa2e99bd4640de47ad226c3917f3fe907a4daae5 \ No newline at end of file +7abc21d2ab608a12bf6305911fbc83c6a380a9af \ No newline at end of file diff --git a/external/referencesource/System.Data/FxCopSuppressions/EverettBreaking.cs b/external/referencesource/System.Data/FxCopSuppressions/EverettBreaking.cs index 439cd5fd52..5d081565bf 100644 --- a/external/referencesource/System.Data/FxCopSuppressions/EverettBreaking.cs +++ b/external/referencesource/System.Data/FxCopSuppressions/EverettBreaking.cs @@ -3,9 +3,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// [....] -// [....] -// [....] +// nissimn +// alazela +// sukanyas //------------------------------------------------------------------------------ // // This file has a list of FXCOP messages to suppress, converted from ddsuites\src\FxCop\Excludes\EverettBreaking\System.Data.dll-breaking.xml using FXCOP GUI. diff --git a/external/referencesource/System.Data/FxCopSuppressions/FxCop40Suppressions.cs.REMOVED.git-id b/external/referencesource/System.Data/FxCopSuppressions/FxCop40Suppressions.cs.REMOVED.git-id index b123d64be2..a678fc8898 100644 --- a/external/referencesource/System.Data/FxCopSuppressions/FxCop40Suppressions.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/FxCopSuppressions/FxCop40Suppressions.cs.REMOVED.git-id @@ -1 +1 @@ -eba9ff765e5ea30b673d3369244b8886ed89410a \ No newline at end of file +47c2ab42a12af283349c0a6543f8743e276ffb8c \ No newline at end of file diff --git a/external/referencesource/System.Data/FxCopSuppressions/Triaged.cs.REMOVED.git-id b/external/referencesource/System.Data/FxCopSuppressions/Triaged.cs.REMOVED.git-id index 5e978fd655..32a23cadd3 100644 --- a/external/referencesource/System.Data/FxCopSuppressions/Triaged.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/FxCopSuppressions/Triaged.cs.REMOVED.git-id @@ -1 +1 @@ -34029050de9492ca42f0d64ab4e519374d3e6b78 \ No newline at end of file +755ece1b4aa19590b258ebae8e15c816f9c4e035 \ No newline at end of file diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ExtendedClrTypeCode.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ExtendedClrTypeCode.cs index 450023f5de..e17cb205f1 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ExtendedClrTypeCode.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ExtendedClrTypeCode.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGetters.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGetters.cs index 1530ccf91e..1e8eb3c636 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGetters.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGetters.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGettersV3.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGettersV3.cs index 9d4e0faac6..451b2874b2 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGettersV3.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedGettersV3.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSetters.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSetters.cs index e3e7ff8c6d..9386299042 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSetters.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSetters.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSettersV3.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSettersV3.cs index daf677bdf9..4c06696455 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSettersV3.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/ITypedSettersV3.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiExecuteType.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiExecuteType.cs index 685e354b13..979f737a17 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiExecuteType.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiExecuteType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiLink.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiLink.cs index cae8aa8fef..f6024415ba 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiLink.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiLink.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// billin //------------------------------------------------------------------------------ [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("SqlAccess, PublicKey=0024000004800000940000000602000000240000525341310004000001000100272736ad6e5f9586bac2d531eabc3acc666c2f8ec879fa94f8f7b0327d2ff2ed523448f83c3d5c5dd2dfc7bc99c5286b2c125117bf5cbe242b9d41750732b2bdffe649c6efb8e5526d526fdd130095ecdb7bf210809c6cdad8824faa9ac0310ac3cba2aa0523567b2dfa7fe250b30facbd62d4ec99b94ac47c7d3b28f1f6e4c8")] // SQLBU 437687 diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiMetaData.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiMetaData.cs index 380902e143..ed861e021c 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiMetaData.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiMetaData.cs @@ -983,6 +983,8 @@ namespace Microsoft.SqlServer.Server { // // MetaData class to send parameter definitions to server. // Sealed because we don't need to derive from it yet. + // IMPORTANT DEVNOTE: This class is being used for parameter encryption functionality, to get the type_info TDS object from SqlParameter. + // Please consider impact to that when changing this class. Refer to the callers of SqlParameter.GetMetadataForTypeInfo(). internal sealed class SmiParameterMetaData : SmiExtendedMetaData { private ParameterDirection _direction; diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiStream.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiStream.cs index f46c8ee737..e10d0ffb55 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiStream.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiStream.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// stevesta //------------------------------------------------------------------------------ // Stream-like object that uses SmiEventSink for server-side errors. diff --git a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiXetterTypeCode.cs b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiXetterTypeCode.cs index 86fb084223..6f7d40eb7d 100644 --- a/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiXetterTypeCode.cs +++ b/external/referencesource/System.Data/Microsoft/SqlServer/Server/SmiXetterTypeCode.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// billin //------------------------------------------------------------------------------ namespace Microsoft.SqlServer.Server { diff --git a/external/referencesource/System.Data/System/Data/AcceptRejectRule.cs b/external/referencesource/System.Data/System/Data/AcceptRejectRule.cs index 195337d1f7..f7eb28b211 100644 --- a/external/referencesource/System.Data/System/Data/AcceptRejectRule.cs +++ b/external/referencesource/System.Data/System/Data/AcceptRejectRule.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/AggregateType.cs b/external/referencesource/System.Data/System/Data/AggregateType.cs index a40cdfe635..c459f43092 100644 --- a/external/referencesource/System.Data/System/Data/AggregateType.cs +++ b/external/referencesource/System.Data/System/Data/AggregateType.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/CatalogLocation.cs b/external/referencesource/System.Data/System/Data/CatalogLocation.cs index de8e614254..9cbc4efde9 100644 --- a/external/referencesource/System.Data/System/Data/CatalogLocation.cs +++ b/external/referencesource/System.Data/System/Data/CatalogLocation.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.Common { diff --git a/external/referencesource/System.Data/System/Data/CommandBehavior.cs b/external/referencesource/System.Data/System/Data/CommandBehavior.cs index 5eb7accfa8..0546e32135 100644 --- a/external/referencesource/System.Data/System/Data/CommandBehavior.cs +++ b/external/referencesource/System.Data/System/Data/CommandBehavior.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { @@ -14,7 +14,7 @@ namespace System.Data { SingleResult = 1, // with data, force single result, may affect database SchemaOnly = 2, // column info, no data, no effect on database KeyInfo = 4, // column info + primary key information (if available) - // + // UNDONE: SingleRow = 8 | SingleResult, SingleRow = 8, // data, hint single row and single result, may affect database - doesn't apply to child(chapter) results SequentialAccess = 0x10, CloseConnection = 0x20, diff --git a/external/referencesource/System.Data/System/Data/CommandType.cs b/external/referencesource/System.Data/System/Data/CommandType.cs index 2368a321d6..dbb3097520 100644 --- a/external/referencesource/System.Data/System/Data/CommandType.cs +++ b/external/referencesource/System.Data/System/Data/CommandType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/Common/AdapterSwitches.cs b/external/referencesource/System.Data/System/Data/Common/AdapterSwitches.cs index 67842354ca..be5d8321b9 100644 --- a/external/referencesource/System.Data/System/Data/Common/AdapterSwitches.cs +++ b/external/referencesource/System.Data/System/Data/Common/AdapterSwitches.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ #if DEBUG diff --git a/external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs.REMOVED.git-id index 27eb11e019..a9e3b601fd 100644 --- a/external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/Common/AdapterUtil.cs.REMOVED.git-id @@ -1 +1 @@ -f8880b5d09ba0af05986f7f82be2593ae8caf155 \ No newline at end of file +8103f0fce6e26a6c2e6ce8987157ed229da0a861 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs b/external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs index 9f63711fbb..11257cc6de 100644 --- a/external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs +++ b/external/referencesource/System.Data/System/Data/Common/DbConnectionOptions.cs @@ -109,6 +109,7 @@ namespace System.Data.Common { private readonly Hashtable _parsetable; internal readonly NameValuePair KeyChain; internal readonly bool HasPasswordKeyword; + internal readonly bool HasUserIdKeyword; // differences between OleDb and Odbc // ODBC: @@ -144,12 +145,14 @@ namespace System.Data.Common { if (0 < _usersConnectionString.Length) { KeyChain = ParseInternal(_parsetable, _usersConnectionString, true, synonyms, UseOdbcRules); HasPasswordKeyword = (_parsetable.ContainsKey(KEY.Password) || _parsetable.ContainsKey(SYNONYM.Pwd)); + HasUserIdKeyword = (_parsetable.ContainsKey(KEY.User_ID) || _parsetable.ContainsKey(SYNONYM.UID)); } } protected DbConnectionOptions(DbConnectionOptions connectionOptions) { // Clone used by SqlConnectionString _usersConnectionString = connectionOptions._usersConnectionString; HasPasswordKeyword = connectionOptions.HasPasswordKeyword; + HasUserIdKeyword = connectionOptions.HasUserIdKeyword; UseOdbcRules = connectionOptions.UseOdbcRules; _parsetable = connectionOptions._parsetable; KeyChain = connectionOptions.KeyChain; diff --git a/external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs b/external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs index f716a2679c..780bd97c98 100644 --- a/external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs +++ b/external/referencesource/System.Data/System/Data/Common/DbConnectionStringBuilder.cs @@ -128,7 +128,7 @@ namespace System.Data.Common { foreach(string keyword in Keys) { object value; if (ShouldSerialize(keyword) && TryGetValue(keyword, out value)) { - string keyvalue = (null != value) ? Convert.ToString(value, CultureInfo.InvariantCulture) : (string)null; + string keyvalue = ConvertValueToString(value); AppendKeyValuePair(builder, keyword, keyvalue, UseOdbcRules); } } @@ -213,6 +213,10 @@ namespace System.Data.Common { } } + internal virtual string ConvertValueToString(object value) { + return (value == null) ? (string)null : Convert.ToString(value, CultureInfo.InvariantCulture); + } + void System.Collections.IDictionary.Add(object keyword, object value) { Add(ObjectToString(keyword), value); } diff --git a/external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs b/external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs index 307e3f9aa1..e1981b6b9d 100644 --- a/external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs +++ b/external/referencesource/System.Data/System/Data/Common/DbConnectionStringCommon.cs @@ -236,17 +236,21 @@ namespace System.Data.Common { } } - internal static class DbConnectionStringBuilderUtil { + internal static class DbConnectionStringBuilderUtil + { - internal static bool ConvertToBoolean(object value) { + internal static bool ConvertToBoolean(object value) + { Debug.Assert(null != value, "ConvertToBoolean(null)"); string svalue = (value as string); - if (null != svalue) { + if (null != svalue) + { if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "true") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "yes")) return true; else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "false") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "no")) return false; - else { + else + { string tmp = svalue.Trim(); // Remove leading & trailing white space. if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "true") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "yes")) return true; @@ -255,23 +259,28 @@ namespace System.Data.Common { } return Boolean.Parse(svalue); } - try { + try + { return ((IConvertible)value).ToBoolean(CultureInfo.InvariantCulture); } - catch(InvalidCastException e) { + catch (InvalidCastException e) + { throw ADP.ConvertFailed(value.GetType(), typeof(Boolean), e); } } - internal static bool ConvertToIntegratedSecurity(object value) { + internal static bool ConvertToIntegratedSecurity(object value) + { Debug.Assert(null != value, "ConvertToIntegratedSecurity(null)"); string svalue = (value as string); - if (null != svalue) { + if (null != svalue) + { if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "sspi") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "true") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "yes")) return true; else if (StringComparer.OrdinalIgnoreCase.Equals(svalue, "false") || StringComparer.OrdinalIgnoreCase.Equals(svalue, "no")) return false; - else { + else + { string tmp = svalue.Trim(); // Remove leading & trailing white space. if (StringComparer.OrdinalIgnoreCase.Equals(tmp, "sspi") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "true") || StringComparer.OrdinalIgnoreCase.Equals(tmp, "yes")) return true; @@ -280,28 +289,36 @@ namespace System.Data.Common { } return Boolean.Parse(svalue); } - try { + try + { return ((IConvertible)value).ToBoolean(CultureInfo.InvariantCulture); } - catch(InvalidCastException e) { + catch (InvalidCastException e) + { throw ADP.ConvertFailed(value.GetType(), typeof(Boolean), e); } } - internal static int ConvertToInt32(object value) { - try { + internal static int ConvertToInt32(object value) + { + try + { return ((IConvertible)value).ToInt32(CultureInfo.InvariantCulture); } - catch(InvalidCastException e) { + catch (InvalidCastException e) + { throw ADP.ConvertFailed(value.GetType(), typeof(Int32), e); } } - internal static string ConvertToString(object value) { - try { + internal static string ConvertToString(object value) + { + try + { return ((IConvertible)value).ToString(CultureInfo.InvariantCulture); } - catch(InvalidCastException e) { + catch (InvalidCastException e) + { throw ADP.ConvertFailed(value.GetType(), typeof(String), e); } } @@ -309,35 +326,43 @@ namespace System.Data.Common { const string ApplicationIntentReadWriteString = "ReadWrite"; const string ApplicationIntentReadOnlyString = "ReadOnly"; - internal static bool TryConvertToApplicationIntent(string value, out ApplicationIntent result) { + internal static bool TryConvertToApplicationIntent(string value, out ApplicationIntent result) + { Debug.Assert(Enum.GetNames(typeof(ApplicationIntent)).Length == 2, "ApplicationIntent enum has changed, update needed"); Debug.Assert(null != value, "TryConvertToApplicationIntent(null,...)"); - if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadOnlyString)) { + if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadOnlyString)) + { result = ApplicationIntent.ReadOnly; return true; } - else if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadWriteString)) { + else if (StringComparer.OrdinalIgnoreCase.Equals(value, ApplicationIntentReadWriteString)) + { result = ApplicationIntent.ReadWrite; return true; } - else { + else + { result = DbConnectionStringDefaults.ApplicationIntent; return false; } } - internal static bool IsValidApplicationIntentValue(ApplicationIntent value) { + internal static bool IsValidApplicationIntentValue(ApplicationIntent value) + { Debug.Assert(Enum.GetNames(typeof(ApplicationIntent)).Length == 2, "ApplicationIntent enum has changed, update needed"); return value == ApplicationIntent.ReadOnly || value == ApplicationIntent.ReadWrite; } - internal static string ApplicationIntentToString(ApplicationIntent value) { + internal static string ApplicationIntentToString(ApplicationIntent value) + { Debug.Assert(IsValidApplicationIntentValue(value)); - if (value == ApplicationIntent.ReadOnly) { + if (value == ApplicationIntent.ReadOnly) + { return ApplicationIntentReadOnlyString; } - else { + else + { return ApplicationIntentReadWriteString; } } @@ -352,22 +377,283 @@ namespace System.Data.Common { /// in any case above, if the conerted value is out of valid range, the method raises ArgumentOutOfRangeException. /// /// applicaiton intent value in the valid range - internal static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) { + internal static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) + { Debug.Assert(null != value, "ConvertToApplicationIntent(null)"); string sValue = (value as string); ApplicationIntent result; - if (null != sValue) { + if (null != sValue) + { // We could use Enum.TryParse here, but it accepts value combinations like // "ReadOnly, ReadWrite" which are unwelcome here // Also, Enum.TryParse is 100x slower than plain StringComparer.OrdinalIgnoreCase.Equals method. - if (TryConvertToApplicationIntent(sValue, out result)) { + if (TryConvertToApplicationIntent(sValue, out result)) + { return result; } // try again after remove leading & trailing whitespaces. sValue = sValue.Trim(); - if (TryConvertToApplicationIntent(sValue, out result)) { + if (TryConvertToApplicationIntent(sValue, out result)) + { + return result; + } + + // string values must be valid + throw ADP.InvalidConnectionOptionValue(keyword); + } + else + { + // the value is not string, try other options + ApplicationIntent eValue; + + if (value is ApplicationIntent) + { + // quick path for the most common case + eValue = (ApplicationIntent)value; + } + else if (value.GetType().IsEnum) + { + // explicitly block scenarios in which user tries to use wrong enum types, like: + // builder["ApplicationIntent"] = EnvironmentVariableTarget.Process; + // workaround: explicitly cast non-ApplicationIntent enums to int + throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), null); + } + else + { + try + { + // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest + eValue = (ApplicationIntent)Enum.ToObject(typeof(ApplicationIntent), value); + } + catch (ArgumentException e) + { + // to be consistent with the messages we send in case of wrong type usage, replace + // the error with our exception, and keep the original one as inner one for troubleshooting + throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), e); + } + } + + // ensure value is in valid range + if (IsValidApplicationIntentValue(eValue)) + { + return eValue; + } + else + { + throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)eValue); + } + } + } + + const string SqlPasswordString = "Sql Password"; + const string ActiveDirectoryPasswordString = "Active Directory Password"; + const string ActiveDirectoryIntegratedString = "Active Directory Integrated"; + + internal static bool TryConvertToAuthenticationType(string value, out SqlAuthenticationMethod result) + { + Debug.Assert(Enum.GetNames(typeof(SqlAuthenticationMethod)).Length == 4, "SqlAuthenticationMethod enum has changed, update needed"); + + bool isSuccess = false; + + if (StringComparer.InvariantCultureIgnoreCase.Equals(value, SqlPasswordString)) + { + result = SqlAuthenticationMethod.SqlPassword; + isSuccess = true; + } + else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ActiveDirectoryPasswordString)) + { + result = SqlAuthenticationMethod.ActiveDirectoryPassword; + isSuccess = true; + } + else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ActiveDirectoryIntegratedString)) + { + result = SqlAuthenticationMethod.ActiveDirectoryIntegrated; + isSuccess = true; + } + else + { + result = DbConnectionStringDefaults.Authentication; + } + return isSuccess; + } + + /// + /// Column Encryption Setting. + /// + const string ColumnEncryptionSettingEnabledString = "Enabled"; + const string ColumnEncryptionSettingDisabledString = "Disabled"; + + /// + /// Convert a string value to the corresponding SqlConnectionColumnEncryptionSetting. + /// + /// + /// + /// + internal static bool TryConvertToColumnEncryptionSetting(string value, out SqlConnectionColumnEncryptionSetting result) { + bool isSuccess = false; + + if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ColumnEncryptionSettingEnabledString)) { + result = SqlConnectionColumnEncryptionSetting.Enabled; + isSuccess = true; + } + else if (StringComparer.InvariantCultureIgnoreCase.Equals(value, ColumnEncryptionSettingDisabledString)) { + result = SqlConnectionColumnEncryptionSetting.Disabled; + isSuccess = true; + } + else { + result = DbConnectionStringDefaults.ColumnEncryptionSetting; + } + + return isSuccess; + } + + /// + /// Is it a valid connection level column encryption setting ? + /// + /// + /// + internal static bool IsValidColumnEncryptionSetting(SqlConnectionColumnEncryptionSetting value) { + Debug.Assert(Enum.GetNames(typeof(SqlConnectionColumnEncryptionSetting)).Length == 2, "SqlConnectionColumnEncryptionSetting enum has changed, update needed"); + return value == SqlConnectionColumnEncryptionSetting.Enabled || value == SqlConnectionColumnEncryptionSetting.Disabled; + } + + /// + /// Convert connection level column encryption setting value to string. + /// + /// + /// + internal static string ColumnEncryptionSettingToString(SqlConnectionColumnEncryptionSetting value) { + Debug.Assert(IsValidColumnEncryptionSetting(value), "value is not a valid connection level column encryption setting."); + + switch (value) { + case SqlConnectionColumnEncryptionSetting.Enabled: + return ColumnEncryptionSettingEnabledString; + case SqlConnectionColumnEncryptionSetting.Disabled: + return ColumnEncryptionSettingDisabledString; + + default: + return null; + } + } + + internal static bool IsValidAuthenticationTypeValue(SqlAuthenticationMethod value) { + Debug.Assert(Enum.GetNames(typeof(SqlAuthenticationMethod)).Length == 4, "SqlAuthenticationMethod enum has changed, update needed"); + return value == SqlAuthenticationMethod.SqlPassword + || value == SqlAuthenticationMethod.ActiveDirectoryPassword + || value == SqlAuthenticationMethod.ActiveDirectoryIntegrated + || value == SqlAuthenticationMethod.NotSpecified; + } + + internal static string AuthenticationTypeToString(SqlAuthenticationMethod value) + { + Debug.Assert(IsValidAuthenticationTypeValue(value)); + + switch (value) + { + case SqlAuthenticationMethod.SqlPassword: + return SqlPasswordString; + case SqlAuthenticationMethod.ActiveDirectoryPassword: + return ActiveDirectoryPasswordString; + case SqlAuthenticationMethod.ActiveDirectoryIntegrated: + return ActiveDirectoryIntegratedString; + default: + return null; + } + } + + internal static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) + { + if (null == value) + { + return DbConnectionStringDefaults.Authentication; + } + + string sValue = (value as string); + SqlAuthenticationMethod result; + if (null != sValue) + { + if (TryConvertToAuthenticationType(sValue, out result)) + { + return result; + } + + // try again after remove leading & trailing whitespaces. + sValue = sValue.Trim(); + if (TryConvertToAuthenticationType(sValue, out result)) + { + return result; + } + + // string values must be valid + throw ADP.InvalidConnectionOptionValue(keyword); + } + else + { + // the value is not string, try other options + SqlAuthenticationMethod eValue; + + if (value is SqlAuthenticationMethod) + { + // quick path for the most common case + eValue = (SqlAuthenticationMethod)value; + } + else if (value.GetType().IsEnum) + { + // explicitly block scenarios in which user tries to use wrong enum types, like: + // builder["ApplicationIntent"] = EnvironmentVariableTarget.Process; + // workaround: explicitly cast non-ApplicationIntent enums to int + throw ADP.ConvertFailed(value.GetType(), typeof(SqlAuthenticationMethod), null); + } + else + { + try + { + // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest + eValue = (SqlAuthenticationMethod)Enum.ToObject(typeof(SqlAuthenticationMethod), value); + } + catch (ArgumentException e) + { + // to be consistent with the messages we send in case of wrong type usage, replace + // the error with our exception, and keep the original one as inner one for troubleshooting + throw ADP.ConvertFailed(value.GetType(), typeof(SqlAuthenticationMethod), e); + } + } + + // ensure value is in valid range + if (IsValidAuthenticationTypeValue(eValue)) + { + return eValue; + } + else + { + throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)eValue); + } + } + } + + /// + /// Convert the provided value to a SqlConnectionColumnEncryptionSetting. + /// + /// + /// + /// + internal static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) { + if (null == value) { + return DbConnectionStringDefaults.ColumnEncryptionSetting; + } + + string sValue = (value as string); + SqlConnectionColumnEncryptionSetting result; + if (null != sValue) { + if (TryConvertToColumnEncryptionSetting(sValue, out result)) { + return result; + } + + // try again after remove leading & trailing whitespaces. + sValue = sValue.Trim(); + if (TryConvertToColumnEncryptionSetting(sValue, out result)) { return result; } @@ -376,36 +662,36 @@ namespace System.Data.Common { } else { // the value is not string, try other options - ApplicationIntent eValue; + SqlConnectionColumnEncryptionSetting eValue; - if (value is ApplicationIntent) { + if (value is SqlConnectionColumnEncryptionSetting) { // quick path for the most common case - eValue = (ApplicationIntent)value; + eValue = (SqlConnectionColumnEncryptionSetting)value; } else if (value.GetType().IsEnum) { // explicitly block scenarios in which user tries to use wrong enum types, like: - // builder["ApplicationIntent"] = EnvironmentVariableTarget.Process; - // workaround: explicitly cast non-ApplicationIntent enums to int - throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), null); + // builder["SqlConnectionColumnEncryptionSetting"] = EnvironmentVariableTarget.Process; + // workaround: explicitly cast non-SqlConnectionColumnEncryptionSetting enums to int + throw ADP.ConvertFailed(value.GetType(), typeof(SqlConnectionColumnEncryptionSetting), null); } else { try { // Enum.ToObject allows only integral and enum values (enums are blocked above), rasing ArgumentException for the rest - eValue = (ApplicationIntent)Enum.ToObject(typeof(ApplicationIntent), value); + eValue = (SqlConnectionColumnEncryptionSetting)Enum.ToObject(typeof(SqlConnectionColumnEncryptionSetting), value); } catch (ArgumentException e) { // to be consistent with the messages we send in case of wrong type usage, replace // the error with our exception, and keep the original one as inner one for troubleshooting - throw ADP.ConvertFailed(value.GetType(), typeof(ApplicationIntent), e); + throw ADP.ConvertFailed(value.GetType(), typeof(SqlConnectionColumnEncryptionSetting), e); } } // ensure value is in valid range - if (IsValidApplicationIntentValue(eValue)) { + if (IsValidColumnEncryptionSetting(eValue)) { return eValue; } else { - throw ADP.InvalidEnumerationValue(typeof(ApplicationIntent), (int)eValue); + throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)eValue); } } } @@ -430,39 +716,42 @@ namespace System.Data.Common { internal const bool OmitOracleConnectionName = false; // SqlClient - internal const ApplicationIntent ApplicationIntent = System.Data.SqlClient.ApplicationIntent.ReadWrite; - internal const string ApplicationName = ".Net SqlClient Data Provider"; - internal const bool AsynchronousProcessing = false; - internal const string AttachDBFilename = ""; - internal const int ConnectTimeout = 15; - internal const bool ConnectionReset = true; - internal const bool ContextConnection = false; - internal const string CurrentLanguage = ""; - internal const string DataSource = ""; - internal const bool Encrypt = false; - internal const bool Enlist = true; - internal const string FailoverPartner = ""; - internal const string InitialCatalog = ""; - internal const bool IntegratedSecurity = false; - internal const int LoadBalanceTimeout = 0; // default of 0 means don't use - internal const bool MultipleActiveResultSets = false; - internal const bool MultiSubnetFailover = false; - internal const int MaxPoolSize = 100; - internal const int MinPoolSize = 0; - internal const string NetworkLibrary = ""; - internal const int PacketSize = 8000; - internal const string Password = ""; - internal const bool PersistSecurityInfo = false; - internal const bool Pooling = true; - internal const bool TrustServerCertificate = false; - internal const string TypeSystemVersion = "Latest"; - internal const string UserID = ""; - internal const bool UserInstance = false; - internal const bool Replication = false; - internal const string WorkstationID = ""; - internal const string TransactionBinding = "Implicit Unbind"; - internal const int ConnectRetryCount = 1; - internal const int ConnectRetryInterval = 10; + internal const ApplicationIntent ApplicationIntent = System.Data.SqlClient.ApplicationIntent.ReadWrite; + internal const string ApplicationName = ".Net SqlClient Data Provider"; + internal const bool AsynchronousProcessing = false; + internal const string AttachDBFilename = ""; + internal const int ConnectTimeout = 15; + internal const bool ConnectionReset = true; + internal const bool ContextConnection = false; + internal const string CurrentLanguage = ""; + internal const string DataSource = ""; + internal const bool Encrypt = false; + internal const bool Enlist = true; + internal const string FailoverPartner = ""; + internal const string InitialCatalog = ""; + internal const bool IntegratedSecurity = false; + internal const int LoadBalanceTimeout = 0; // default of 0 means don't use + internal const bool MultipleActiveResultSets = false; + internal const bool MultiSubnetFailover = false; + internal const bool TransparentNetworkIPResolution = true; + internal const int MaxPoolSize = 100; + internal const int MinPoolSize = 0; + internal const string NetworkLibrary = ""; + internal const int PacketSize = 8000; + internal const string Password = ""; + internal const bool PersistSecurityInfo = false; + internal const bool Pooling = true; + internal const bool TrustServerCertificate = false; + internal const string TypeSystemVersion = "Latest"; + internal const string UserID = ""; + internal const bool UserInstance = false; + internal const bool Replication = false; + internal const string WorkstationID = ""; + internal const string TransactionBinding = "Implicit Unbind"; + internal const int ConnectRetryCount = 1; + internal const int ConnectRetryInterval = 10; + internal static readonly SqlAuthenticationMethod Authentication = SqlAuthenticationMethod.NotSpecified; + internal static readonly SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Disabled; } internal static class DbConnectionOptionKeywords { @@ -503,30 +792,34 @@ namespace System.Data.Common { internal const string OmitOracleConnectionName = "Omit Oracle Connection Name"; // SqlClient - internal const string ApplicationIntent = "ApplicationIntent"; - internal const string ApplicationName = "Application Name"; - internal const string AsynchronousProcessing = "Asynchronous Processing"; - internal const string AttachDBFilename = "AttachDbFilename"; - internal const string ConnectTimeout = "Connect Timeout"; - internal const string ConnectionReset = "Connection Reset"; - internal const string ContextConnection = "Context Connection"; - internal const string CurrentLanguage = "Current Language"; - internal const string Encrypt = "Encrypt"; - internal const string FailoverPartner = "Failover Partner"; - internal const string InitialCatalog = "Initial Catalog"; - internal const string MultipleActiveResultSets = "MultipleActiveResultSets"; - internal const string MultiSubnetFailover = "MultiSubnetFailover"; - internal const string NetworkLibrary = "Network Library"; - internal const string PacketSize = "Packet Size"; - internal const string Replication = "Replication"; - internal const string TransactionBinding = "Transaction Binding"; - internal const string TrustServerCertificate = "TrustServerCertificate"; - internal const string TypeSystemVersion = "Type System Version"; - internal const string UserInstance = "User Instance"; - internal const string WorkstationID = "Workstation ID"; - internal const string ConnectRetryCount = "ConnectRetryCount"; - internal const string ConnectRetryInterval = "ConnectRetryInterval"; - + internal const string ApplicationIntent = "ApplicationIntent"; + internal const string ApplicationName = "Application Name"; + internal const string AsynchronousProcessing = "Asynchronous Processing"; + internal const string AttachDBFilename = "AttachDbFilename"; + internal const string ConnectTimeout = "Connect Timeout"; + internal const string ConnectionReset = "Connection Reset"; + internal const string ContextConnection = "Context Connection"; + internal const string CurrentLanguage = "Current Language"; + internal const string Encrypt = "Encrypt"; + internal const string FailoverPartner = "Failover Partner"; + internal const string InitialCatalog = "Initial Catalog"; + internal const string MultipleActiveResultSets = "MultipleActiveResultSets"; + internal const string MultiSubnetFailover = "MultiSubnetFailover"; + internal const string TransparentNetworkIPResolution = "TransparentNetworkIPResolution"; + internal const string NetworkLibrary = "Network Library"; + internal const string PacketSize = "Packet Size"; + internal const string Replication = "Replication"; + internal const string TransactionBinding = "Transaction Binding"; + internal const string TrustServerCertificate = "TrustServerCertificate"; + internal const string TypeSystemVersion = "Type System Version"; + internal const string UserInstance = "User Instance"; + internal const string WorkstationID = "Workstation ID"; + internal const string ConnectRetryCount = "ConnectRetryCount"; + internal const string ConnectRetryInterval = "ConnectRetryInterval"; + internal const string Authentication = "Authentication"; + internal const string Certificate = "Certificate"; + internal const string ColumnEncryptionSetting = "Column Encryption Setting"; + // common keywords (OleDb, OracleClient, SqlClient) internal const string DataSource = "Data Source"; internal const string IntegratedSecurity = "Integrated Security"; diff --git a/external/referencesource/System.Data/System/Data/Common/Groupbybehavior.cs b/external/referencesource/System.Data/System/Data/Common/Groupbybehavior.cs index 2b324cfb9c..73e9a8145f 100644 --- a/external/referencesource/System.Data/System/Data/Common/Groupbybehavior.cs +++ b/external/referencesource/System.Data/System/Data/Common/Groupbybehavior.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// rickfe +// stevesta //------------------------------------------------------------------------------ namespace System.Data.Common { diff --git a/external/referencesource/System.Data/System/Data/Common/NativeMethods.cs b/external/referencesource/System.Data/System/Data/Common/NativeMethods.cs index ebcf3fc72e..b1321a4222 100644 --- a/external/referencesource/System.Data/System/Data/Common/NativeMethods.cs +++ b/external/referencesource/System.Data/System/Data/Common/NativeMethods.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// markash +// blained +// mithomas //------------------------------------------------------------------------------ using System; diff --git a/external/referencesource/System.Data/System/Data/Common/SqlEventSource.cs b/external/referencesource/System.Data/System/Data/Common/SqlEventSource.cs new file mode 100644 index 0000000000..b67fa15fed --- /dev/null +++ b/external/referencesource/System.Data/System/Data/Common/SqlEventSource.cs @@ -0,0 +1,76 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// mihailsm +//------------------------------------------------------------------------------ + +namespace System.Data +{ + using System; + using System.Diagnostics.Tracing; + + [EventSource(Name = SqlEventSource.EventSourceName)] + internal sealed class SqlEventSource : EventSource + { + internal const string EventSourceName = "Microsoft-AdoNet-SystemData"; + + /// + /// Defines EventId for BeginExecute (Reader, Scalar, NonQuery, XmlReader). + /// + private const int BeginExecuteEventId = 1; + + /// + /// Defines EventId for EndExecute (Reader, Scalar, NonQuery, XmlReader). + /// + private const int EndExecuteEventId = 2; + + // Defines the singleton instance for the Resources ETW provider + internal static readonly SqlEventSource Log = new SqlEventSource(); + + + /// + /// Keyword definitions. These represent logical groups of events that can be turned on and off independently + /// Often each task has a keyword, but where tasks are determined by subsystem, keywords are determined by + /// usefulness to end users to filter. Generally users don't mind extra events if they are not high volume + /// so grouping low volume events together in a single keywords is OK (users can post-filter by task if desired) + /// The visibility of the enum has to be public, otherwise there will be an ArgumentException on calling related WriteEvent method. + /// + public static class Keywords + { + public const EventKeywords SqlClient = (EventKeywords)0x0001; // This is bit 0 + } + + public static class Tasks // this name is important for EventSource + { + /// Task that tracks sql command execute. + public const EventTask ExecuteCommand = (EventTask)1; + } + + private SqlEventSource() + { + } + + // unfortunately these are not marked as Start/Stop opcodes. The reason is that we dont want them to participate in + // the EventSource activity IDs (because they currently don't use tasks and this simply confuses the logic) and + // because of versioning requirements we don't have ActivityOptions capability (because mscorlib and System.Data version + // at different rates) Sigh... + [Event(SqlEventSource.BeginExecuteEventId, Keywords = Keywords.SqlClient)] + public void BeginExecute(int objectId, string dataSource, string database, string commandText) + { + // we do not use unsafe code for better performance optization here because optimized helpers make the code unsafe where that would not be the case otherwise. + // This introduces the question of partial trust, which is complex in the SQL case (there are a lot of scenarios and SQL has special security support). + WriteEvent(SqlEventSource.BeginExecuteEventId, objectId, dataSource, database, commandText); + } + + // unfortunately these are not marked as Start/Stop opcodes. The reason is that we dont want them to participate in + // the EventSource activity IDs (because they currently don't use tasks and this simply confuses the logic) and + // because of versioning requirements we don't have ActivityOptions capability (because mscorlib and System.Data version + // at different rates) Sigh... + [Event(SqlEventSource.EndExecuteEventId, Keywords = Keywords.SqlClient)] + public void EndExecute(int objectId, int compositeState, int sqlExceptionNumber) + { + WriteEvent(SqlEventSource.EndExecuteEventId, objectId, compositeState, sqlExceptionNumber); + } + } +} diff --git a/external/referencesource/System.Data/System/Data/Common/SupportedJoinOperators.cs b/external/referencesource/System.Data/System/Data/Common/SupportedJoinOperators.cs index abb658da1a..b6db9fdce1 100644 --- a/external/referencesource/System.Data/System/Data/Common/SupportedJoinOperators.cs +++ b/external/referencesource/System.Data/System/Data/Common/SupportedJoinOperators.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// rickfe +// stevesta //------------------------------------------------------------------------------ namespace System.Data.Common { diff --git a/external/referencesource/System.Data/System/Data/Common/dbenumerator.cs b/external/referencesource/System.Data/System/Data/Common/dbenumerator.cs index 22f6884b61..758d606295 100644 --- a/external/referencesource/System.Data/System/Data/Common/dbenumerator.cs +++ b/external/referencesource/System.Data/System/Data/Common/dbenumerator.cs @@ -18,7 +18,7 @@ namespace System.Data.Common { public class DbEnumerator : IEnumerator { internal IDataReader _reader; - internal IDataRecord _current; + internal DbDataRecord _current; internal SchemaInfo[] _schemaInfo; // shared schema info among all the data records internal PropertyDescriptorCollection _descriptors; // cached property descriptors private FieldNameLookup _fieldNameLookup; // MDAC 69015 @@ -39,30 +39,21 @@ namespace System.Data.Common { _reader = reader; this.closeReader = closeReader; } + + public DbEnumerator(DbDataReader reader) + : this((IDataReader)reader) { + } + public DbEnumerator(DbDataReader reader, bool closeReader) + : this((IDataReader)reader, closeReader) { + } public object Current { get { return _current; } } - - /*public IDataRecord Current { - get { - return _current; - } - }*/ - -/* - virtual internal IDataRecord NewRecord(SchemaInfo[] si, object[] values, PropertyDescriptorCollection descriptors) { - return new DbDataRecord(si, values, descriptors); - } - - virtual internal void GetValues(object[] values) { - _reader.GetValues(values); - } -*/ - + public bool MoveNext() { if (null == _schemaInfo) { diff --git a/external/referencesource/System.Data/System/Data/Common/identifiercase.cs b/external/referencesource/System.Data/System/Data/Common/identifiercase.cs index bd314fff49..73c8fc1e47 100644 --- a/external/referencesource/System.Data/System/Data/Common/identifiercase.cs +++ b/external/referencesource/System.Data/System/Data/Common/identifiercase.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// rickfe +// stevesta //------------------------------------------------------------------------------ namespace System.Data.Common { diff --git a/external/referencesource/System.Data/System/Data/ConflictOptions.cs b/external/referencesource/System.Data/System/Data/ConflictOptions.cs index 271c3835b2..bba1d2cab1 100644 --- a/external/referencesource/System.Data/System/Data/ConflictOptions.cs +++ b/external/referencesource/System.Data/System/Data/ConflictOptions.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/ConnectionState.cs b/external/referencesource/System.Data/System/Data/ConnectionState.cs index e09d35f974..735a6edfea 100644 --- a/external/referencesource/System.Data/System/Data/ConnectionState.cs +++ b/external/referencesource/System.Data/System/Data/ConnectionState.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataColumnChangeEventHandler.cs b/external/referencesource/System.Data/System/Data/DataColumnChangeEventHandler.cs index b3f2ebe5bb..49eac5f6a9 100644 --- a/external/referencesource/System.Data/System/Data/DataColumnChangeEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/DataColumnChangeEventHandler.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataRowAction.cs b/external/referencesource/System.Data/System/Data/DataRowAction.cs index 5988cdf354..516ce4fcb1 100644 --- a/external/referencesource/System.Data/System/Data/DataRowAction.cs +++ b/external/referencesource/System.Data/System/Data/DataRowAction.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataRowChangeEventHandler.cs b/external/referencesource/System.Data/System/Data/DataRowChangeEventHandler.cs index d08f479418..2d416b1eb1 100644 --- a/external/referencesource/System.Data/System/Data/DataRowChangeEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/DataRowChangeEventHandler.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataRowCreatedEventHandler.cs b/external/referencesource/System.Data/System/Data/DataRowCreatedEventHandler.cs index 9e478d7b8c..41f14d0bec 100644 --- a/external/referencesource/System.Data/System/Data/DataRowCreatedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/DataRowCreatedEventHandler.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataRowState.cs b/external/referencesource/System.Data/System/Data/DataRowState.cs index 8f08c20ee7..f52843825a 100644 --- a/external/referencesource/System.Data/System/Data/DataRowState.cs +++ b/external/referencesource/System.Data/System/Data/DataRowState.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataRowVersion.cs b/external/referencesource/System.Data/System/Data/DataRowVersion.cs index cba19a4328..39f742372b 100644 --- a/external/referencesource/System.Data/System/Data/DataRowVersion.cs +++ b/external/referencesource/System.Data/System/Data/DataRowVersion.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataSerializationFormat.cs b/external/referencesource/System.Data/System/Data/DataSerializationFormat.cs index 1f5331f748..28ae6fa52f 100644 --- a/external/referencesource/System.Data/System/Data/DataSerializationFormat.cs +++ b/external/referencesource/System.Data/System/Data/DataSerializationFormat.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// amirhmy +// markash //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataSetDateTime.cs b/external/referencesource/System.Data/System/Data/DataSetDateTime.cs index a33ea9821e..ad4b0c2043 100644 --- a/external/referencesource/System.Data/System/Data/DataSetDateTime.cs +++ b/external/referencesource/System.Data/System/Data/DataSetDateTime.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// amirhmy +// markash //------------------------------------------------------------------------------ namespace System.Data { using System; diff --git a/external/referencesource/System.Data/System/Data/DataTableClearEventHandler.cs b/external/referencesource/System.Data/System/Data/DataTableClearEventHandler.cs index b8d81dfc1a..73a5cc6b6c 100644 --- a/external/referencesource/System.Data/System/Data/DataTableClearEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/DataTableClearEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// amirhmy +// markash //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataTableNewRowEventHandler.cs b/external/referencesource/System.Data/System/Data/DataTableNewRowEventHandler.cs index 7b4c1aa2c3..0b9a396b5f 100644 --- a/external/referencesource/System.Data/System/Data/DataTableNewRowEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/DataTableNewRowEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// amirhmy +// markash //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/DataViewRowState.cs b/external/referencesource/System.Data/System/Data/DataViewRowState.cs index b8734a14e9..41415d3c99 100644 --- a/external/referencesource/System.Data/System/Data/DataViewRowState.cs +++ b/external/referencesource/System.Data/System/Data/DataViewRowState.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/FillErrorEventHandler.cs b/external/referencesource/System.Data/System/Data/FillErrorEventHandler.cs index 2765697f5b..5a7e23d714 100644 --- a/external/referencesource/System.Data/System/Data/FillErrorEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/FillErrorEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { // MDAC 59437 diff --git a/external/referencesource/System.Data/System/Data/Filter/IFilter.cs b/external/referencesource/System.Data/System/Data/Filter/IFilter.cs index c950470650..11c52d2dd9 100644 --- a/external/referencesource/System.Data/System/Data/Filter/IFilter.cs +++ b/external/referencesource/System.Data/System/Data/Filter/IFilter.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IColumnMapping.cs b/external/referencesource/System.Data/System/Data/IColumnMapping.cs index a9e2ca996b..af0a6acbe9 100644 --- a/external/referencesource/System.Data/System/Data/IColumnMapping.cs +++ b/external/referencesource/System.Data/System/Data/IColumnMapping.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IColumnMappingCollection.cs b/external/referencesource/System.Data/System/Data/IColumnMappingCollection.cs index faf7b5b9b4..cb15d8b22e 100644 --- a/external/referencesource/System.Data/System/Data/IColumnMappingCollection.cs +++ b/external/referencesource/System.Data/System/Data/IColumnMappingCollection.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDataAdapter.cs b/external/referencesource/System.Data/System/Data/IDataAdapter.cs index 68066295a5..6007f39e01 100644 --- a/external/referencesource/System.Data/System/Data/IDataAdapter.cs +++ b/external/referencesource/System.Data/System/Data/IDataAdapter.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDataParameter.cs b/external/referencesource/System.Data/System/Data/IDataParameter.cs index 1e5e04d8b6..66d21c4e50 100644 --- a/external/referencesource/System.Data/System/Data/IDataParameter.cs +++ b/external/referencesource/System.Data/System/Data/IDataParameter.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDataParameterCollection.cs b/external/referencesource/System.Data/System/Data/IDataParameterCollection.cs index ecb3bf5b74..4afcbb0094 100644 --- a/external/referencesource/System.Data/System/Data/IDataParameterCollection.cs +++ b/external/referencesource/System.Data/System/Data/IDataParameterCollection.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDataReader.cs b/external/referencesource/System.Data/System/Data/IDataReader.cs index c34df297f5..bd6f054724 100644 --- a/external/referencesource/System.Data/System/Data/IDataReader.cs +++ b/external/referencesource/System.Data/System/Data/IDataReader.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDataRecord.cs b/external/referencesource/System.Data/System/Data/IDataRecord.cs index abdbe9797c..b3ba7d4a48 100644 --- a/external/referencesource/System.Data/System/Data/IDataRecord.cs +++ b/external/referencesource/System.Data/System/Data/IDataRecord.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDbCommand.cs b/external/referencesource/System.Data/System/Data/IDbCommand.cs index 2a9ed41deb..43c2dc38fd 100644 --- a/external/referencesource/System.Data/System/Data/IDbCommand.cs +++ b/external/referencesource/System.Data/System/Data/IDbCommand.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data{ diff --git a/external/referencesource/System.Data/System/Data/IDbConnection.cs b/external/referencesource/System.Data/System/Data/IDbConnection.cs index bf630c7426..ad6da26e66 100644 --- a/external/referencesource/System.Data/System/Data/IDbConnection.cs +++ b/external/referencesource/System.Data/System/Data/IDbConnection.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDbDataAdapter.cs b/external/referencesource/System.Data/System/Data/IDbDataAdapter.cs index b78fdd4dfb..642232121a 100644 --- a/external/referencesource/System.Data/System/Data/IDbDataAdapter.cs +++ b/external/referencesource/System.Data/System/Data/IDbDataAdapter.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDbDataParameter.cs b/external/referencesource/System.Data/System/Data/IDbDataParameter.cs index d69db17ffa..09eeae7ca7 100644 --- a/external/referencesource/System.Data/System/Data/IDbDataParameter.cs +++ b/external/referencesource/System.Data/System/Data/IDbDataParameter.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IDbTransaction.cs b/external/referencesource/System.Data/System/Data/IDbTransaction.cs index e31633da85..d67b6f7e3f 100644 --- a/external/referencesource/System.Data/System/Data/IDbTransaction.cs +++ b/external/referencesource/System.Data/System/Data/IDbTransaction.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data{ diff --git a/external/referencesource/System.Data/System/Data/ITableMapping.cs b/external/referencesource/System.Data/System/Data/ITableMapping.cs index b8c42cf3d5..b6063015e6 100644 --- a/external/referencesource/System.Data/System/Data/ITableMapping.cs +++ b/external/referencesource/System.Data/System/Data/ITableMapping.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/ITableMappingCollection.cs b/external/referencesource/System.Data/System/Data/ITableMappingCollection.cs index 9455464ec5..42304689ec 100644 --- a/external/referencesource/System.Data/System/Data/ITableMappingCollection.cs +++ b/external/referencesource/System.Data/System/Data/ITableMappingCollection.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/IsolationLevel.cs b/external/referencesource/System.Data/System/Data/IsolationLevel.cs index bea89d5c56..51f9a59e11 100644 --- a/external/referencesource/System.Data/System/Data/IsolationLevel.cs +++ b/external/referencesource/System.Data/System/Data/IsolationLevel.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/LoadOption.cs b/external/referencesource/System.Data/System/Data/LoadOption.cs index 2b1b20ad02..870b26ebbf 100644 --- a/external/referencesource/System.Data/System/Data/LoadOption.cs +++ b/external/referencesource/System.Data/System/Data/LoadOption.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/MappingType.cs b/external/referencesource/System.Data/System/Data/MappingType.cs index 489da4b273..7a17a5cab9 100644 --- a/external/referencesource/System.Data/System/Data/MappingType.cs +++ b/external/referencesource/System.Data/System/Data/MappingType.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/MergeFailedEventHandler.cs b/external/referencesource/System.Data/System/Data/MergeFailedEventHandler.cs index 8c4407a4a6..3e080d7339 100644 --- a/external/referencesource/System.Data/System/Data/MergeFailedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/MergeFailedEventHandler.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/MissingMappingAction.cs b/external/referencesource/System.Data/System/Data/MissingMappingAction.cs index b0c1a5c365..e31ab649d2 100644 --- a/external/referencesource/System.Data/System/Data/MissingMappingAction.cs +++ b/external/referencesource/System.Data/System/Data/MissingMappingAction.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/MissingSchemaAction.cs b/external/referencesource/System.Data/System/Data/MissingSchemaAction.cs index 2576568b17..99deb05a24 100644 --- a/external/referencesource/System.Data/System/Data/MissingSchemaAction.cs +++ b/external/referencesource/System.Data/System/Data/MissingSchemaAction.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/Odbc/OdbcType.cs b/external/referencesource/System.Data/System/Data/Odbc/OdbcType.cs index 0a4e2b2368..a50795025c 100644 --- a/external/referencesource/System.Data/System/Data/Odbc/OdbcType.cs +++ b/external/referencesource/System.Data/System/Data/Odbc/OdbcType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// mithomas +// markash //------------------------------------------------------------------------------ using System; diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbHResult.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbHResult.cs index 96f9a0de63..5b4afb959d 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbHResult.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbHResult.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { @@ -452,7 +452,7 @@ namespace System.Data.OleDb { // Method is not supported by this provider. DB_E_NOTSUPPORTED = unchecked((int)0x80040E53), - // MessageId: DB_E_MAXPENDCHANGE----CEEDED + // MessageId: DB_E_MAXPENDCHANGESEXCEEDED // MessageText: // Number of rows with pending changes exceeded the limit. DB_E_MAXPENDCHANGESEXCEEDED = unchecked((int)0x80040E54), diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbInfoMessageEventHandler.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbInfoMessageEventHandler.cs index cb5db36a0d..d43968b4c0 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbInfoMessageEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbInfoMessageEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbLiteral.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbLiteral.cs index 8e38ea7171..1030300cca 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbLiteral.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbLiteral.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbPropertyStatus.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbPropertyStatus.cs index fd808fa516..e81df76a2e 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbPropertyStatus.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbPropertyStatus.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatedEventHandler.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatedEventHandler.cs index 1c4f66c82a..d5986eaacc 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatedEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatingEventHandler.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatingEventHandler.cs index bf166df653..5e93e9ab00 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatingEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbRowUpdatingEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/OleDbType.cs b/external/referencesource/System.Data/System/Data/OleDb/OleDbType.cs index a63f5618bf..3af7009345 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/OleDbType.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/OleDbType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data.OleDb { diff --git a/external/referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs b/external/referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs index c2f5cf7702..5eccdd6185 100644 --- a/external/referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs +++ b/external/referencesource/System.Data/System/Data/OleDb/PropertyAttributes.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/ParameterDirection.cs b/external/referencesource/System.Data/System/Data/ParameterDirection.cs index 9928c84556..447fc59a01 100644 --- a/external/referencesource/System.Data/System/Data/ParameterDirection.cs +++ b/external/referencesource/System.Data/System/Data/ParameterDirection.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPool.cs b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPool.cs index a12b68eab3..5b5743725f 100644 --- a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPool.cs +++ b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPool.cs @@ -428,6 +428,11 @@ namespace System.Data.ProviderBase { private readonly DbConnectionPoolGroupOptions _connectionPoolGroupOptions; private DbConnectionPoolProviderInfo _connectionPoolProviderInfo; + /// + /// The private member which carries the set of authenticationcontexts for this pool (based on the user's identity). + /// + private readonly ConcurrentDictionary _pooledDbAuthenticationContexts; + private State _state; private readonly ConcurrentStack _stackOld = new ConcurrentStack(); @@ -489,6 +494,9 @@ namespace System.Data.ProviderBase { _objectList = new List(MaxPoolSize); + _pooledDbAuthenticationContexts = new ConcurrentDictionary(concurrencyLevel: 4 * Environment.ProcessorCount /* default value in ConcurrentDictionary*/, + capacity: 2); + if(ADP.IsPlatformNT5) { _transactedConnectionPool = new TransactedConnectionPool(this); } @@ -585,6 +593,17 @@ namespace System.Data.ProviderBase { get { return _connectionPoolProviderInfo; } } + /// + /// Return the pooled authentication contexts. + /// + internal ConcurrentDictionary AuthenticationContexts + { + get + { + return _pooledDbAuthenticationContexts; + } + } + internal bool UseLoadBalancing { get { return PoolGroupOptions.UseLoadBalancing; } } diff --git a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs new file mode 100644 index 0000000000..8c45467147 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContext.cs @@ -0,0 +1,108 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// harsudan +// yuronhe +//------------------------------------------------------------------------------ + +using System; +using System.Diagnostics; +using System.Runtime.ConstrainedExecution; +using System.Threading; + +namespace System.Data.ProviderBase +{ + /// + /// Represents the context of an authentication attempt when using the new active directory based authentication mechanisms. + /// All data members, except_isUpdateInProgressCounter, should be immutable. + /// + sealed internal class DbConnectionPoolAuthenticationContext + { + /// + /// The value expected in _isUpdateInProgress if a thread has taken a lock on this context, + /// to perform the update on the context. + /// + private const int STATUS_LOCKED = 1; + + /// + /// The value expected in _isUpdateInProgress if no thread has taken a lock on this context. + /// + private const int STATUS_UNLOCKED = 0; + + /// + /// Access Token, which is obtained from Active Directory Authentication Library for SQL Server, and needs to be sent to SQL Server + /// as part of TDS Token type Federated Authentication Token. + /// + private readonly byte[] _accessToken; + + /// + /// Expiration time of the above access token. + /// + private readonly DateTime _expirationTime; + + /// + /// A member which is used to achieve a lock to control refresh attempt on this context. + /// + private int _isUpdateInProgress; + + /// + /// Constructor. + /// + /// Access Token that will be used to connect to SQL Server. Carries identity information about a user. + /// The expiration time in UTC for the above accessToken. + internal DbConnectionPoolAuthenticationContext(byte[] accessToken, DateTime expirationTime) { + + Debug.Assert(accessToken != null && accessToken.Length > 0); + Debug.Assert(expirationTime > DateTime.MinValue && expirationTime < DateTime.MaxValue); + + _accessToken = accessToken; + _expirationTime = expirationTime; + _isUpdateInProgress = STATUS_UNLOCKED; + } + + /// + /// Static Method. + /// Given two contexts, choose one to update in the cache. Chooses based on expiration time. + /// + /// Context1 + /// Context2 + internal static DbConnectionPoolAuthenticationContext ChooseAuthenticationContextToUpdate(DbConnectionPoolAuthenticationContext context1, DbConnectionPoolAuthenticationContext context2) { + + Debug.Assert(context1 != null, "context1 should not be null."); + Debug.Assert(context2 != null, "context2 should not be null."); + + return context1.ExpirationTime > context2.ExpirationTime ? context1 : context2; + } + + internal byte[] AccessToken { + get { + return _accessToken; + } + } + + internal DateTime ExpirationTime { + get { + return _expirationTime; + } + } + + /// + /// Try locking the variable _isUpdateInProgressCounter and return if this thread got the lock to update. + /// Whichever thread got the chance to update this variable to 1 wins the lock. + /// + internal bool LockToUpdate() { + int oldValue = Interlocked.CompareExchange(ref _isUpdateInProgress, STATUS_LOCKED, STATUS_UNLOCKED); + return (oldValue == STATUS_UNLOCKED); + } + + /// + /// Release the lock which was obtained through LockToUpdate. + /// + [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] + internal void ReleaseLockToUpdate() { + int oldValue = Interlocked.CompareExchange(ref _isUpdateInProgress, STATUS_UNLOCKED, STATUS_LOCKED); + Debug.Assert(oldValue == STATUS_LOCKED); + } + } +} diff --git a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs new file mode 100644 index 0000000000..df54873105 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolAuthenticationContextKey.cs @@ -0,0 +1,106 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// harsudan +// yuronhe +//------------------------------------------------------------------------------ + +using System; +using System.Diagnostics; + +namespace System.Data.ProviderBase +{ + /// + /// Represents the key of dbConnectionPoolAuthenticationContext. + /// All data members should be immutable and so, hashCode is pre-computed. + /// + sealed internal class DbConnectionPoolAuthenticationContextKey + { + /// + /// Security Token Service Authority. + /// + private readonly string _stsAuthority; + + /// + /// Service Principal Name. + /// + private readonly string _servicePrincipalName; + + /// + /// Pre-Computed Hash Code. + /// + private readonly int _hashCode; + + internal string StsAuthority { + get { + return _stsAuthority; + } + } + + internal string ServicePrincipalName { + get { + return _servicePrincipalName; + } + } + + /// + /// Constructor for the type. + /// + /// Token Endpoint URL + /// SPN representing the SQL service in an active directory. + internal DbConnectionPoolAuthenticationContextKey(string stsAuthority, string servicePrincipalName) { + Debug.Assert(!string.IsNullOrWhiteSpace(stsAuthority)); + Debug.Assert(!string.IsNullOrWhiteSpace(servicePrincipalName)); + + _stsAuthority = stsAuthority; + _servicePrincipalName = servicePrincipalName; + + // Pre-compute hash since data members are not going to change. + _hashCode = ComputeHashCode(); + } + + /// + /// Override the default Equals implementation. + /// + /// + /// + public override bool Equals(object obj) { + if (obj == null) { + return false; + } + + DbConnectionPoolAuthenticationContextKey otherKey = obj as DbConnectionPoolAuthenticationContextKey; + if (otherKey == null) { + return false; + } + + return (String.Equals(StsAuthority, otherKey.StsAuthority, StringComparison.InvariantCultureIgnoreCase) + && String.Equals(ServicePrincipalName, otherKey.ServicePrincipalName, StringComparison.InvariantCultureIgnoreCase)); + } + + /// + /// Override the default GetHashCode implementation. + /// + /// + public override int GetHashCode() { + return _hashCode; + } + + /// + /// Compute the hash code for this object. + /// + /// + private int ComputeHashCode() { + int hashCode = 33; + + unchecked + { + hashCode = (hashCode * 17) + StsAuthority.GetHashCode(); + hashCode = (hashCode * 17) + ServicePrincipalName.GetHashCode(); + } + + return hashCode; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs index 4442daefb1..401f442e76 100644 --- a/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs +++ b/external/referencesource/System.Data/System/Data/ProviderBase/DbConnectionPoolProviderInfo.cs @@ -2,7 +2,7 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] +// stevesta //------------------------------------------------------------------------------ namespace System.Data.ProviderBase { diff --git a/external/referencesource/System.Data/System/Data/RecordsAffectedEventHandler.cs b/external/referencesource/System.Data/System/Data/RecordsAffectedEventHandler.cs index 9b85c51f5e..1c4dbd88ac 100644 --- a/external/referencesource/System.Data/System/Data/RecordsAffectedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/RecordsAffectedEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/Rule.cs b/external/referencesource/System.Data/System/Data/Rule.cs index 80354735c9..c864ccbd4f 100644 --- a/external/referencesource/System.Data/System/Data/Rule.cs +++ b/external/referencesource/System.Data/System/Data/Rule.cs @@ -3,9 +3,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs b/external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs index 2dd6ed4103..52e1d1f8e5 100644 --- a/external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs +++ b/external/referencesource/System.Data/System/Data/SQLTypes/INullable.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// blained +// laled //------------------------------------------------------------------------------ namespace System.Data.SqlTypes { diff --git a/external/referencesource/System.Data/System/Data/SchemaSerializationMode.cs b/external/referencesource/System.Data/System/Data/SchemaSerializationMode.cs index 75fe72fec3..21721b7882 100644 --- a/external/referencesource/System.Data/System/Data/SchemaSerializationMode.cs +++ b/external/referencesource/System.Data/System/Data/SchemaSerializationMode.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// amirhmy +// markash //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/SchemaType.cs b/external/referencesource/System.Data/System/Data/SchemaType.cs index 9626eb8910..c8885df644 100644 --- a/external/referencesource/System.Data/System/Data/SchemaType.cs +++ b/external/referencesource/System.Data/System/Data/SchemaType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/Sql/IBinarySerialize.cs b/external/referencesource/System.Data/System/Data/Sql/IBinarySerialize.cs index 5947203b4c..61884484a8 100644 --- a/external/referencesource/System.Data/System/Data/Sql/IBinarySerialize.cs +++ b/external/referencesource/System.Data/System/Data/Sql/IBinarySerialize.cs @@ -3,12 +3,12 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. // Information Contained Herein is Proprietary and Confidential. // -// [....] -// [....] +// alazela +// blained // daltudov -// [....] +// stevesta // beysims -// [....] +// laled // vadimt //------------------------------------------------------------------------------ diff --git a/external/referencesource/System.Data/System/Data/Sql/TriggerAction.cs b/external/referencesource/System.Data/System/Data/Sql/TriggerAction.cs index 0c72b6ea79..7b0ff803b4 100644 --- a/external/referencesource/System.Data/System/Data/Sql/TriggerAction.cs +++ b/external/referencesource/System.Data/System/Data/Sql/TriggerAction.cs @@ -2,12 +2,12 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// blained // daltudov -// [....] +// stevesta // beysims -// [....] +// laled // vadimt //------------------------------------------------------------------------------ @@ -111,7 +111,7 @@ namespace Microsoft.SqlServer.Server { // 1000 - 1999 is reserved for SQLTrace. x_eet_Trace_Start = 1000, x_eet_Trace_End = 1999, - // WHEN ADDING, PLEASE + // WHEN ADDING, PLEASE CHECK WITH FILE-OWNER FOR WHICH NUMBERS TO USE. THANKS! }; public enum TriggerAction { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/OnChangedEventHandler.cs b/external/referencesource/System.Data/System/Data/SqlClient/OnChangedEventHandler.cs index f79cecdf90..ffd6bf3395 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/OnChangedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/OnChangedEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// ramp +// blained //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/ParameterPeekAheadValue.cs b/external/referencesource/System.Data/System/Data/SqlClient/ParameterPeekAheadValue.cs index 79b4b96778..ea460cf908 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/ParameterPeekAheadValue.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/ParameterPeekAheadValue.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// alazela +// billin //------------------------------------------------------------------------------ diff --git a/external/referencesource/System.Data/System/Data/SqlClient/RowsCopiedEventHandler.cs b/external/referencesource/System.Data/System/Data/SqlClient/RowsCopiedEventHandler.cs index c239d77e61..b6d5adc503 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/RowsCopiedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/RowsCopiedEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// mithomas +// blained //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SortOrder.cs b/external/referencesource/System.Data/System/Data/SqlClient/SortOrder.cs index 2eeef11744..6c19e1cac5 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SortOrder.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SortOrder.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// alazela +// laled +// billin //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Algorithm.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Algorithm.cs new file mode 100644 index 0000000000..6c6a016c1d --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Algorithm.cs @@ -0,0 +1,406 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Collections.Concurrent; + using System.Collections.Generic; + using System.Data.SqlClient; + using System.Diagnostics; + using System.IO; + using System.Runtime.CompilerServices; + using System.Security.Cryptography; + + /// + /// This class implements authenticated encryption algorithm with associated data as described in + /// http://tools.ietf.org/html/draft-mcgrew-aead-aes-cbc-hmac-sha2-05. More specifically this implements + /// AEAD_AES_256_CBC_HMAC_SHA256 algorithm. + /// + internal class SqlAeadAes256CbcHmac256Algorithm : SqlClientEncryptionAlgorithm + { + /// + /// Algorithm Name + /// + internal const string AlgorithmName = @"AEAD_AES_256_CBC_HMAC_SHA256"; + + /// + /// Key size in bytes + /// + private const int _KeySizeInBytes = SqlAeadAes256CbcHmac256EncryptionKey.KeySize / 8; + + /// + /// Block size in bytes. AES uses 16 byte blocks. + /// + private const int _BlockSizeInBytes = 16; + + /// + /// Minimum Length of cipherText without authentication tag. This value is 1 (version byte) + 16 (IV) + 16 (minimum of 1 block of cipher Text) + /// + private const int _MinimumCipherTextLengthInBytesNoAuthenticationTag = sizeof(byte) + _BlockSizeInBytes + _BlockSizeInBytes; + + /// + /// Minimum Length of cipherText. This value is 1 (version byte) + 32 (authentication tag) + 16 (IV) + 16 (minimum of 1 block of cipher Text) + /// + private const int _MinimumCipherTextLengthInBytesWithAuthenticationTag = _MinimumCipherTextLengthInBytesNoAuthenticationTag + _KeySizeInBytes; + + /// + /// Cipher Mode. For this algorithm, we only use CBC mode. + /// + private const CipherMode _cipherMode = CipherMode.CBC; + + /// + /// Padding mode. This algorithm uses PKCS7. + /// + private const PaddingMode _paddingMode = PaddingMode.PKCS7; + + /// + /// Variable indicating whether this algorithm should work in Deterministic mode or Randomized mode. + /// For deterministic encryption, we derive an IV from the plaintext data. + /// For randomized encryption, we generate a cryptographically random IV. + /// + private readonly bool _isDeterministic; + + /// + /// Algorithm Version. + /// + private readonly byte _algorithmVersion; + + /// + /// Column Encryption Key. This has a root key and three derived keys. + /// + private readonly SqlAeadAes256CbcHmac256EncryptionKey _columnEncryptionKey; + + /// + /// The pool of crypto providers to use for encrypt/decrypt operations. + /// + private readonly ConcurrentQueue _cryptoProviderPool; + + /// + /// Byte array with algorithm version used for authentication tag computation. + /// + private static readonly byte[] _version = new byte[] {0x01}; + + /// + /// Byte array with algorithm version size used for authentication tag computation. + /// + private static readonly byte[] _versionSize = new byte[] {sizeof(byte)}; + + /// + /// Initializes a new instance of SqlAeadAes256CbcHmac256Algorithm algorithm with a given key and encryption type + /// + /// + /// Root encryption key from which three other keys will be derived + /// + /// Encryption Type, accepted values are Deterministic and Randomized. + /// For Deterministic encryption, a synthetic IV will be genenrated during encryption + /// For Randomized encryption, a random IV will be generated during encryption. + /// + /// + /// Algorithm version + /// + internal SqlAeadAes256CbcHmac256Algorithm(SqlAeadAes256CbcHmac256EncryptionKey encryptionKey, SqlClientEncryptionType encryptionType, byte algorithmVersion) { + _columnEncryptionKey = encryptionKey; + _algorithmVersion = algorithmVersion; + _version[0] = algorithmVersion; + + Debug.Assert (null != encryptionKey, "Null encryption key detected in AeadAes256CbcHmac256 algorithm"); + Debug.Assert (0x01 == algorithmVersion, "Unknown algorithm version passed to AeadAes256CbcHmac256"); + + // Validate encryption type for this algorithm + // This algorithm can only provide randomized or deterministic encryption types. + if (encryptionType == SqlClientEncryptionType.Deterministic) { + _isDeterministic = true; + } + else { + Debug.Assert (SqlClientEncryptionType.Randomized == encryptionType, "Invalid Encryption Type detected in SqlAeadAes256CbcHmac256Algorithm, this should've been caught in factory class"); + } + + _cryptoProviderPool = new ConcurrentQueue(); + } + + /// + /// Encryption Algorithm + /// cell_iv = HMAC_SHA-2-256(iv_key, cell_data) truncated to 128 bits + /// cell_ciphertext = AES-CBC-256(enc_key, cell_iv, cell_data) with PKCS7 padding. + /// cell_tag = HMAC_SHA-2-256(mac_key, versionbyte + cell_iv + cell_ciphertext + versionbyte_length) + /// cell_blob = versionbyte + cell_tag + cell_iv + cell_ciphertext + /// + /// Plaintext data to be encrypted + /// Returns the ciphertext corresponding to the plaintext. + internal override byte[] EncryptData(byte[] plainText) { + return EncryptData(plainText, hasAuthenticationTag: true); + } + + /// + /// Encryption Algorithm + /// cell_iv = HMAC_SHA-2-256(iv_key, cell_data) truncated to 128 bits + /// cell_ciphertext = AES-CBC-256(enc_key, cell_iv, cell_data) with PKCS7 padding. + /// (optional) cell_tag = HMAC_SHA-2-256(mac_key, versionbyte + cell_iv + cell_ciphertext + versionbyte_length) + /// cell_blob = versionbyte + [cell_tag] + cell_iv + cell_ciphertext + /// + /// Plaintext data to be encrypted + /// Does the algorithm require authentication tag. + /// Returns the ciphertext corresponding to the plaintext. + protected byte[] EncryptData(byte[] plainText, bool hasAuthenticationTag) { + // Empty values get encrypted and decrypted properly for both Deterministic and Randomized encryptions. + Debug.Assert(plainText != null); + + byte[] iv = new byte[_BlockSizeInBytes]; + + // Prepare IV + // Should be 1 single block (16 bytes) + if (_isDeterministic) { + SqlSecurityUtility.GetHMACWithSHA256(plainText, _columnEncryptionKey.IVKey, iv); + } + else { + SqlSecurityUtility.GenerateRandomBytes(iv); + } + + int numBlocks = plainText.Length / _BlockSizeInBytes + 1; + + // Final blob we return = version + HMAC + iv + cipherText + const int hmacStartIndex = 1; + int authenticationTagLen = hasAuthenticationTag ? _KeySizeInBytes : 0; + int ivStartIndex = hmacStartIndex + authenticationTagLen; + int cipherStartIndex = ivStartIndex + _BlockSizeInBytes; // this is where hmac starts. + + // Output buffer size = size of VersionByte + Authentication Tag + IV + cipher Text blocks. + int outputBufSize = sizeof(byte) + authenticationTagLen + iv.Length + (numBlocks*_BlockSizeInBytes); + byte[] outBuffer = new byte[outputBufSize]; + + // Store the version and IV rightaway + outBuffer[0] = _algorithmVersion; + Buffer.BlockCopy(iv, 0, outBuffer, ivStartIndex, iv.Length); + + AesCryptoServiceProvider aesAlg; + + // Try to get a provider from the pool. + // If no provider is available, create a new one. + if (!_cryptoProviderPool.TryDequeue(out aesAlg)) { + aesAlg = new AesCryptoServiceProvider(); + + try { + // Set various algorithm properties + aesAlg.Key = _columnEncryptionKey.EncryptionKey; + aesAlg.Mode = _cipherMode; + aesAlg.Padding = _paddingMode; + } + catch (Exception) { + if (aesAlg != null) { + aesAlg.Dispose(); + } + + throw; + } + } + + try { + // Always set the IV since it changes from cell to cell. + aesAlg.IV = iv; + + // Compute CipherText and authentication tag in a single pass + using (ICryptoTransform encryptor = aesAlg.CreateEncryptor()) { + Debug.Assert(encryptor.CanTransformMultipleBlocks, "AES Encryptor can transform multiple blocks"); + int count = 0; + int cipherIndex = cipherStartIndex; // this is where cipherText starts + if (numBlocks > 1) { + count = (numBlocks - 1) * _BlockSizeInBytes; + cipherIndex += encryptor.TransformBlock(plainText, 0, count, outBuffer, cipherIndex); + } + + byte[] buffTmp = encryptor.TransformFinalBlock(plainText, count, plainText.Length - count); // done encrypting + Buffer.BlockCopy(buffTmp, 0, outBuffer, cipherIndex, buffTmp.Length); + cipherIndex += buffTmp.Length; + } + + if (hasAuthenticationTag) { + using (HMACSHA256 hmac = new HMACSHA256(_columnEncryptionKey.MACKey)) { + Debug.Assert(hmac.CanTransformMultipleBlocks, "HMAC can't transform multiple blocks"); + hmac.TransformBlock(_version, 0, _version.Length, _version, 0); + hmac.TransformBlock(iv, 0, iv.Length, iv, 0); + + // Compute HMAC on final block + hmac.TransformBlock(outBuffer, cipherStartIndex, numBlocks * _BlockSizeInBytes, outBuffer, cipherStartIndex); + hmac.TransformFinalBlock(_versionSize, 0, _versionSize.Length); + byte[] hash = hmac.Hash; + Debug.Assert(hash.Length >= authenticationTagLen, "Unexpected hash size"); + Buffer.BlockCopy(hash, 0, outBuffer, hmacStartIndex, authenticationTagLen); + } + } + } + finally { + // Return the provider to the pool. + _cryptoProviderPool.Enqueue(aesAlg); + } + + return outBuffer; + } + + /// + /// Decryption steps + /// 1. Validate version byte + /// 2. Validate Authentication tag + /// 3. Decrypt the message + /// + /// + /// + internal override byte[] DecryptData(byte[] cipherText) { + return DecryptData(cipherText, hasAuthenticationTag: true); + } + + /// + /// Decryption steps + /// 1. Validate version byte + /// 2. (optional) Validate Authentication tag + /// 3. Decrypt the message + /// + /// + /// + /// + protected byte[] DecryptData(byte[] cipherText, bool hasAuthenticationTag) { + Debug.Assert(cipherText != null); + + byte[] iv = new byte[_BlockSizeInBytes]; + + int minimumCipherTextLength = hasAuthenticationTag ? _MinimumCipherTextLengthInBytesWithAuthenticationTag : _MinimumCipherTextLengthInBytesNoAuthenticationTag; + if (cipherText.Length < minimumCipherTextLength) { + throw SQL.InvalidCipherTextSize(cipherText.Length, minimumCipherTextLength); + } + + // Validate the version byte + int startIndex = 0; + if (cipherText[startIndex] != _algorithmVersion) { + // Cipher text was computed with a different algorithm version than this. + throw SQL.InvalidAlgorithmVersion(cipherText[startIndex], _algorithmVersion); + } + + startIndex += 1; + int authenticationTagOffset = 0; + + // Read authentication tag + if (hasAuthenticationTag) { + authenticationTagOffset = startIndex; + startIndex += _KeySizeInBytes; // authentication tag size is _KeySizeInBytes + } + + // Read cell IV + Buffer.BlockCopy(cipherText, startIndex, iv, 0, iv.Length); + startIndex += iv.Length; + + // Read encrypted text + int cipherTextOffset = startIndex; + int cipherTextCount = cipherText.Length - startIndex; + + if (hasAuthenticationTag) { + // Compute authentication tag + byte[] authenticationTag = PrepareAuthenticationTag(iv, cipherText, cipherTextOffset, cipherTextCount); + if (!SqlSecurityUtility.CompareBytes(authenticationTag, cipherText, authenticationTagOffset, authenticationTag.Length)) { + // Potentially tampered data, throw an exception + throw SQL.InvalidAuthenticationTag(); + } + } + + // Decrypt the text and return + return DecryptData(iv, cipherText, cipherTextOffset, cipherTextCount); + } + + /// + /// Decrypts plain text data using AES in CBC mode + /// + /// cipher text data to be decrypted + /// IV to be used for decryption + /// Returns decrypted plain text data + private byte[] DecryptData(byte[] iv, byte[] cipherText, int offset, int count) { + Debug.Assert((iv != null) && (cipherText != null)); + Debug.Assert (offset > -1 && count > -1); + Debug.Assert ((count+offset) <= cipherText.Length); + + byte[] plainText; + AesCryptoServiceProvider aesAlg; + + // Try to get a provider from the pool. + // If no provider is available, create a new one. + if (!_cryptoProviderPool.TryDequeue(out aesAlg)) { + aesAlg = new AesCryptoServiceProvider(); + + try { + // Set various algorithm properties + aesAlg.Key = _columnEncryptionKey.EncryptionKey; + aesAlg.Mode = _cipherMode; + aesAlg.Padding = _paddingMode; + } + catch (Exception) { + if (aesAlg != null) { + aesAlg.Dispose(); + } + + throw; + } + } + + try { + // Always set the IV since it changes from cell to cell. + aesAlg.IV = iv; + + // Create the streams used for decryption. + using (MemoryStream msDecrypt = new MemoryStream()) { + // Create an encryptor to perform the stream transform. + using (ICryptoTransform decryptor = aesAlg.CreateDecryptor()) { + using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write)) { + // Decrypt the secret message and get the plain text data + csDecrypt.Write(cipherText, offset, count); + csDecrypt.FlushFinalBlock(); + plainText = msDecrypt.ToArray(); + } + } + } + } + finally { + // Return the provider to the pool. + _cryptoProviderPool.Enqueue(aesAlg); + } + + return plainText; + } + + /// + /// Prepares an authentication tag. + /// Authentication Tag = HMAC_SHA-2-256(mac_key, versionbyte + cell_iv + cell_ciphertext + versionbyte_length) + /// + /// + /// + private byte[] PrepareAuthenticationTag(byte[] iv, byte[] cipherText, int offset, int length) { + Debug.Assert(cipherText != null); + + byte[] computedHash; + byte[] authenticationTag = new byte[_KeySizeInBytes]; + + // Raw Tag Length: + // 1 for the version byte + // 1 block for IV (16 bytes) + // cipherText.Length + // 1 byte for version byte length + + using (HMACSHA256 hmac = new HMACSHA256(_columnEncryptionKey.MACKey)) { + int retVal = 0; + retVal = hmac.TransformBlock(_version, 0, _version.Length, _version, 0); + Debug.Assert(retVal == _version.Length); + retVal = hmac.TransformBlock(iv, 0, iv.Length, iv, 0); + Debug.Assert(retVal == iv.Length); + retVal = hmac.TransformBlock(cipherText, offset, length, cipherText, offset); + Debug.Assert(retVal == length); + hmac.TransformFinalBlock(_versionSize, 0, _versionSize.Length); + computedHash = hmac.Hash; + } + + Debug.Assert (computedHash.Length >= authenticationTag.Length); + Buffer.BlockCopy (computedHash, 0, authenticationTag, 0, authenticationTag.Length); + return authenticationTag; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256EncryptionKey.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256EncryptionKey.cs new file mode 100644 index 0000000000..acb2734e9b --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256EncryptionKey.cs @@ -0,0 +1,128 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Data.SqlClient; + using System.Text; + + /// + /// Encryption key class containing 4 keys. This class is used by SqlAeadAes256CbcHmac256Algorithm and SqlAes256CbcAlgorithm + /// 1) root key - Main key that is used to derive the keys used in the encryption algorithm + /// 2) encryption key - A derived key that is used to encrypt the plain text and generate cipher text + /// 3) mac_key - A derived key that is used to compute HMAC of the cipher text + /// 4) iv_key - A derived key that is used to generate a synthetic IV from plain text data. + /// + internal class SqlAeadAes256CbcHmac256EncryptionKey : SqlClientSymmetricKey + { + /// + /// Key size in bits + /// + internal const int KeySize = 256; + + /// + /// Encryption Key Salt format. This is used to derive the encryption key from the root key. + /// + private const string _encryptionKeySaltFormat = @"Microsoft SQL Server cell encryption key with encryption algorithm:{0} and key length:{1}"; + + /// + /// MAC Key Salt format. This is used to derive the MAC key from the root key. + /// + private const string _macKeySaltFormat = @"Microsoft SQL Server cell MAC key with encryption algorithm:{0} and key length:{1}"; + + /// + /// IV Key Salt format. This is used to derive the IV key from the root key. This is only used for Deterministic encryption. + /// + private const string _ivKeySaltFormat = @"Microsoft SQL Server cell IV key with encryption algorithm:{0} and key length:{1}"; + + /// + /// Encryption Key + /// + private readonly SqlClientSymmetricKey _encryptionKey; + + /// + /// MAC key + /// + private readonly SqlClientSymmetricKey _macKey; + + /// + /// IV Key + /// + private readonly SqlClientSymmetricKey _ivKey; + + /// + /// The name of the algorithm this key will be used with. + /// + private readonly string _algorithmName; + + /// + /// Derives all the required keys from the given root key + /// + /// Root key used to derive all the required derived keys + internal SqlAeadAes256CbcHmac256EncryptionKey(byte[] rootKey, string algorithmName): base(rootKey) + { + _algorithmName = algorithmName; + + int keySizeInBytes = KeySize / 8; + + // Key validation + if (rootKey.Length != keySizeInBytes) + { + throw SQL.InvalidKeySize(_algorithmName, + rootKey.Length, + keySizeInBytes); + } + + // Derive keys from the root key + // + // Derive encryption key + string encryptionKeySalt = string.Format(_encryptionKeySaltFormat, + _algorithmName, + KeySize); + byte[] buff1 = new byte[keySizeInBytes]; + SqlSecurityUtility.GetHMACWithSHA256(Encoding.Unicode.GetBytes(encryptionKeySalt), RootKey, buff1); + _encryptionKey = new SqlClientSymmetricKey(buff1); + + // Derive mac key + string macKeySalt = string.Format(_macKeySaltFormat, _algorithmName, KeySize); + byte[] buff2 = new byte[keySizeInBytes]; + SqlSecurityUtility.GetHMACWithSHA256(Encoding.Unicode.GetBytes(macKeySalt),RootKey,buff2); + _macKey = new SqlClientSymmetricKey(buff2); + + // Derive iv key + string ivKeySalt = string.Format(_ivKeySaltFormat, _algorithmName, KeySize); + byte[] buff3 = new byte[keySizeInBytes]; + SqlSecurityUtility.GetHMACWithSHA256(Encoding.Unicode.GetBytes(ivKeySalt),RootKey,buff3); + _ivKey = new SqlClientSymmetricKey(buff3); + } + + /// + /// Encryption key should be used for encryption and decryption + /// + internal byte[] EncryptionKey + { + get { return _encryptionKey.RootKey; } + } + + /// + /// MAC key should be used to compute and validate HMAC + /// + internal byte[] MACKey + { + get { return _macKey.RootKey; } + } + + /// + /// IV key should be used to compute synthetic IV from a given plain text + /// + internal byte[] IVKey + { + get { return _ivKey.RootKey; } + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Factory.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Factory.cs new file mode 100644 index 0000000000..dcbaa8ae34 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlAeadAes256CbcHmac256Factory.cs @@ -0,0 +1,80 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient { + using System; + using System.Collections.Concurrent; + using System.Data.SqlClient; + using System.Diagnostics; + using System.Text; + + /// + /// This is a factory class for AEAD_AES_256_CBC_HMAC_SHA256 + /// + internal class SqlAeadAes256CbcHmac256Factory : SqlClientEncryptionAlgorithmFactory { + /// + /// Factory classes caches the SqlAeadAes256CbcHmac256EncryptionKey objects to avoid computation of the derived keys + /// + private readonly ConcurrentDictionary _encryptionAlgorithms = + new ConcurrentDictionary(concurrencyLevel: 4 * Environment.ProcessorCount /* default value in ConcurrentDictionary*/, capacity: 2); + + /// + /// Creates an instance of AeadAes256CbcHmac256Algorithm class with a given key + /// + /// Root key + /// Encryption Type. Expected values are either Determinitic or Randomized. + /// Encryption Algorithm. + /// + internal override SqlClientEncryptionAlgorithm Create(SqlClientSymmetricKey encryptionKey, SqlClientEncryptionType encryptionType, string encryptionAlgorithm) { + // Callers should have validated the encryption algorithm and the encryption key + Debug.Assert(encryptionKey != null); + Debug.Assert(string.Equals(encryptionAlgorithm, SqlAeadAes256CbcHmac256Algorithm.AlgorithmName, StringComparison.OrdinalIgnoreCase) == true); + + // Validate encryption type + if (!((encryptionType == SqlClientEncryptionType.Deterministic) || (encryptionType == SqlClientEncryptionType.Randomized))) { + throw SQL.InvalidEncryptionType(SqlAeadAes256CbcHmac256Algorithm.AlgorithmName, + encryptionType, + SqlClientEncryptionType.Deterministic, + SqlClientEncryptionType.Randomized); + } + + // Get the cached encryption algorithm if one exists or create a new one, add it to cache and use it + // + // For now, we only have one version. In future, we may need to parse the algorithm names to derive the version byte. + const byte algorithmVersion = 0x1; + + StringBuilder algorithmKeyBuilder = new StringBuilder(Convert.ToBase64String(encryptionKey.RootKey), SqlSecurityUtility.GetBase64LengthFromByteLength(encryptionKey.RootKey.Length) + 4/*separators, type and version*/); + +#if DEBUG + int capacity = algorithmKeyBuilder.Capacity; +#endif //DEBUG + + algorithmKeyBuilder.Append(":"); + algorithmKeyBuilder.Append((int)encryptionType); + algorithmKeyBuilder.Append(":"); + algorithmKeyBuilder.Append(algorithmVersion); + + string algorithmKey = algorithmKeyBuilder.ToString(); + +#if DEBUG + Debug.Assert(algorithmKey.Length <= capacity, "We needed to allocate a larger array"); +#endif //DEBUG + + SqlAeadAes256CbcHmac256Algorithm aesAlgorithm; + if (!_encryptionAlgorithms.TryGetValue(algorithmKey, out aesAlgorithm)) { + SqlAeadAes256CbcHmac256EncryptionKey encryptedKey = new SqlAeadAes256CbcHmac256EncryptionKey(encryptionKey.RootKey, SqlAeadAes256CbcHmac256Algorithm.AlgorithmName); + aesAlgorithm = new SqlAeadAes256CbcHmac256Algorithm(encryptedKey, encryptionType, algorithmVersion); + + // In case multiple threads reach here at the same time, the first one adds the value + // the second one will be a no-op, the allocated memory will be claimed by Garbage Collector. + _encryptionAlgorithms.TryAdd(algorithmKey, aesAlgorithm); + } + + return aesAlgorithm; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcAlgorithm.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcAlgorithm.cs new file mode 100644 index 0000000000..cd21c4df54 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcAlgorithm.cs @@ -0,0 +1,65 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Collections.Generic; + using System.Data.SqlClient; + using System.Diagnostics; + using System.IO; + using System.Runtime.CompilerServices; + using System.Security.Cryptography; + + /// + /// This class implements AES_256_CBC algorithm. + /// + internal class SqlAes256CbcAlgorithm : SqlAeadAes256CbcHmac256Algorithm + { + /// + /// Algorithm Name + /// + internal new const string AlgorithmName = @"AES_256_CBC"; + + /// + /// Initializes a new instance of SqlAes256CbcAlgorithm algorithm with a given key and encryption type + /// + /// + /// Root encryption key from which three other keys will be derived + /// + /// Encryption Type, accepted values are Deterministic and Randomized. + /// For Deterministic encryption, a synthetic IV will be genenrated during encryption + /// For Randomized encryption, a random IV will be generated during encryption. + /// + /// + /// Algorithm version + /// + internal SqlAes256CbcAlgorithm(SqlAeadAes256CbcHmac256EncryptionKey encryptionKey, SqlClientEncryptionType encryptionType, byte algorithmVersion) + :base(encryptionKey, encryptionType, algorithmVersion) + { } + + /// + /// Encryption Algorithm + /// Simply call the base class, indicating we don't need an authentication tag. + /// + /// Plaintext data to be encrypted + /// Returns the ciphertext corresponding to the plaintext. + internal override byte[] EncryptData(byte[] plainText) { + return EncryptData(plainText, hasAuthenticationTag: false); + } + + /// + /// Decryption Algorithm + /// Simply call the base class, indicating we don't have an authentication tag. + /// + /// + /// + internal override byte[] DecryptData(byte[] cipherText) { + return base.DecryptData(cipherText, hasAuthenticationTag: false); + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcFactory.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcFactory.cs new file mode 100644 index 0000000000..09d7468728 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlAes256CbcFactory.cs @@ -0,0 +1,85 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Collections.Concurrent; + using System.Data.SqlClient; + using System.Diagnostics; + using System.Text; + + /// + /// This is a factory class for AES_256_CBC. + /// + internal class SqlAes256CbcFactory : SqlAeadAes256CbcHmac256Factory + { + /// + /// Factory classes caches the SqlAeadAes256CbcHmac256EncryptionKey objects to avoid computation of the derived keys + /// + private readonly ConcurrentDictionary _encryptionAlgorithms = + new ConcurrentDictionary(concurrencyLevel: 4 * Environment.ProcessorCount /* default value in ConcurrentDictionary*/, capacity: 2); + + /// + /// Creates an instance of SqlAes256CbcAlgorithm class with a given key + /// + /// Root key + /// Encryption Type. Expected values are either Determinitic or Randomized. + /// Encryption Algorithm. + /// + internal override SqlClientEncryptionAlgorithm Create(SqlClientSymmetricKey encryptionKey, SqlClientEncryptionType encryptionType, string encryptionAlgorithm) + { + // Callers should have validated the encryption algorithm and the encryption key + Debug.Assert(encryptionKey != null); + Debug.Assert(string.Equals(encryptionAlgorithm, SqlAes256CbcAlgorithm.AlgorithmName, StringComparison.OrdinalIgnoreCase) == true); + + // Validate encryption type + if (!((encryptionType == SqlClientEncryptionType.Deterministic) || (encryptionType == SqlClientEncryptionType.Randomized))) + { + throw SQL.InvalidEncryptionType(SqlAes256CbcAlgorithm.AlgorithmName, + encryptionType, + SqlClientEncryptionType.Deterministic, + SqlClientEncryptionType.Randomized); + } + + // Get the cached encryption algorithm if one exists or create a new one, add it to cache and use it + // + // For now, we only have one version. In future, we may need to parse the algorithm names to derive the version byte. + const byte algorithmVersion = 0x1; + + StringBuilder algorithmKeyBuilder = new StringBuilder(Convert.ToBase64String(encryptionKey.RootKey), SqlSecurityUtility.GetBase64LengthFromByteLength(encryptionKey.RootKey.Length) + 4/*separators, type and version*/); + +#if DEBUG + int capacity = algorithmKeyBuilder.Capacity; +#endif //DEBUG + + algorithmKeyBuilder.Append(":"); + algorithmKeyBuilder.Append((int)encryptionType); + algorithmKeyBuilder.Append(":"); + algorithmKeyBuilder.Append(algorithmVersion); + + string algorithmKey = algorithmKeyBuilder.ToString(); + +#if DEBUG + Debug.Assert(algorithmKey.Length <= capacity, "We needed to allocate a larger array"); +#endif //DEBUG + + SqlAes256CbcAlgorithm aesAlgorithm; + if (!_encryptionAlgorithms.TryGetValue(algorithmKey, out aesAlgorithm)) + { + SqlAeadAes256CbcHmac256EncryptionKey encryptedKey = new SqlAeadAes256CbcHmac256EncryptionKey(encryptionKey.RootKey, SqlAes256CbcAlgorithm.AlgorithmName); + aesAlgorithm = new SqlAes256CbcAlgorithm(encryptedKey, encryptionType, algorithmVersion); + + // In case multiple threads reach here at the same time, the first one adds the value + // the second one will be a no-op, the allocated memory will be claimed by Garbage Collector. + _encryptionAlgorithms.TryAdd(algorithmKey, aesAlgorithm); + } + + return aesAlgorithm; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlBuffer.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlBuffer.cs index aa838b29c5..f4dce919cf 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlBuffer.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlBuffer.cs @@ -868,11 +868,11 @@ namespace System.Data.SqlClient { _isNull = false; } - internal void SetToTime(byte[] bytes, int length, byte scale) { + internal void SetToTime(byte[] bytes, int length, byte scale, byte denormalizedScale) { Debug.Assert(IsEmpty, "setting value a second time?"); _type = StorageType.Time; - FillInTimeInfo(ref _value._timeInfo, bytes, length, scale); + FillInTimeInfo(ref _value._timeInfo, bytes, length, scale, denormalizedScale); _isNull = false; } @@ -885,11 +885,11 @@ namespace System.Data.SqlClient { _isNull = false; } - internal void SetToDateTime2(byte[] bytes, int length, byte scale) { + internal void SetToDateTime2(byte[] bytes, int length, byte scale, byte denormalizedScale) { Debug.Assert(IsEmpty, "setting value a second time?"); _type = StorageType.DateTime2; - FillInTimeInfo(ref _value._dateTime2Info.timeInfo, bytes, length - 3, scale); // remaining 3 bytes is for date + FillInTimeInfo(ref _value._dateTime2Info.timeInfo, bytes, length - 3, scale, denormalizedScale); // remaining 3 bytes is for date _value._dateTime2Info.date = GetDateFromByteArray(bytes, length - 3); // 3 bytes for date _isNull = false; } @@ -904,11 +904,11 @@ namespace System.Data.SqlClient { _isNull = false; } - internal void SetToDateTimeOffset(byte[] bytes, int length, byte scale) { + internal void SetToDateTimeOffset(byte[] bytes, int length, byte scale, byte denormalizedScale) { Debug.Assert(IsEmpty, "setting value a second time?"); _type = StorageType.DateTimeOffset; - FillInTimeInfo(ref _value._dateTimeOffsetInfo.dateTime2Info.timeInfo, bytes, length - 5, scale); // remaining 5 bytes are for date and offset + FillInTimeInfo(ref _value._dateTimeOffsetInfo.dateTime2Info.timeInfo, bytes, length - 5, scale, denormalizedScale); // remaining 5 bytes are for date and offset _value._dateTimeOffsetInfo.dateTime2Info.date = GetDateFromByteArray(bytes, length - 5); // 3 bytes for date _value._dateTimeOffsetInfo.offset = (Int16)(bytes[length - 2] + (bytes[length - 1] << 8)); // 2 bytes for offset (Int16) _isNull = false; @@ -926,9 +926,10 @@ namespace System.Data.SqlClient { _isNull = false; } - private static void FillInTimeInfo(ref TimeInfo timeInfo, byte[] timeBytes, int length, byte scale) { + private static void FillInTimeInfo(ref TimeInfo timeInfo, byte[] timeBytes, int length, byte scale, byte denormalizedScale) { Debug.Assert(3 <= length && length <= 5, "invalid data length for timeInfo: " + length); Debug.Assert(0 <= scale && scale <= 7, "invalid scale: " + scale); + Debug.Assert(0 <= denormalizedScale && denormalizedScale <= 7, "invalid denormalized scale: " + denormalizedScale); Int64 tickUnits = (Int64)timeBytes[0] + ((Int64)timeBytes[1] << 8) + ((Int64)timeBytes[2] << 16); if (length > 3) { @@ -938,7 +939,11 @@ namespace System.Data.SqlClient { tickUnits += ((Int64)timeBytes[4] << 32); } timeInfo.ticks = tickUnits * TdsEnums.TICKS_FROM_SCALE[scale]; - timeInfo.scale = scale; + + // Once the deserialization has been completed using the value scale, we need to set the actual denormalized scale, + // coming from the data type, on the original result, so that it has the proper scale setting. + // This only applies for values that got serialized/deserialized for encryption. Otherwise, both scales should be equal. + timeInfo.scale = denormalizedScale; } private static Int32 GetDateFromByteArray(byte[] buf, int offset) { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopy.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopy.cs.REMOVED.git-id index 826cf1a1eb..9bf1fc1cfd 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopy.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopy.cs.REMOVED.git-id @@ -1 +1 @@ -91812a7b96c2d1123b38454b099aa1892ab0a3c5 \ No newline at end of file +2a4b96c02a36a45bbc09c39c729d107f10314af7 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopyOptions.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopyOptions.cs index 9c7d1ed171..00d01449c2 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopyOptions.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlBulkCopyOptions.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// mithomas +// blained //------------------------------------------------------------------------------ namespace System.Data.SqlClient { @@ -17,6 +17,7 @@ namespace System.Data.SqlClient { KeepNulls = 1 << 3, FireTriggers = 1 << 4, UseInternalTransaction = 1 << 5, + AllowEncryptedValueModifications = 1 << 6, } } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithm.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithm.cs new file mode 100644 index 0000000000..d8cc2dde56 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithm.cs @@ -0,0 +1,33 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + + /// + /// Abstract base class for all TCE encryption algorithms. It exposes two functions + /// 1. Encrypt - This function is used by SqlClient under the covers to transparently encrypt TCE enabled column data. + /// 2. Decrypt - This function is used by SqlClient under the covers to transparently decrypt TCE enabled column data. + /// + internal abstract class SqlClientEncryptionAlgorithm + { + /// + /// Encrypts the plainText with a column encryption key + /// + /// Plain text value to be encrypted + /// + internal abstract byte[] EncryptData(byte[] plainText); + + /// + /// Decrypts the cipherText with a column encryption key + /// + /// Ciphertext value to be decrypted + /// + internal abstract byte[] DecryptData(byte[] cipherText); + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactory.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactory.cs new file mode 100644 index 0000000000..bdd0c78336 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactory.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + /// + /// Abstract base class for all TCE encryption algorithm factory classes. Factory classes create instances of an encryption algorithm + /// with a given key. At runtime when we determine a particular column is marked for TCE, based on the encryption algorithm we invoke + /// the corresponding factory class and retrieve an object to an encryption algorithm. + /// + internal abstract class SqlClientEncryptionAlgorithmFactory + { + /// + /// Creates an encrytion algorithm with a given key. + /// + /// encryption key that should be passed to the encryption algorithm to be created + /// Encryption Type, some algorithms will need this + /// Encryption algorithm name. Needed for extracting version bits + /// Return a newly created SqlClientEncryptionAlgorithm instance + internal abstract SqlClientEncryptionAlgorithm Create(SqlClientSymmetricKey encryptionKey, SqlClientEncryptionType encryptionType, string encryptionAlgorithm); + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactoryList.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactoryList.cs new file mode 100644 index 0000000000..e012c24a03 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionAlgorithmFactoryList.cs @@ -0,0 +1,79 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// krishnib +// balnee +//------------------------------------------------------------------------------ + +namespace System.Data.SqlClient { + using System; + using System.Diagnostics; + using System.Collections.Concurrent; + using System.Text; + + /// + /// Implements a global directory of all the encryption algorithms registered with client. + /// + sealed internal class SqlClientEncryptionAlgorithmFactoryList { + private readonly ConcurrentDictionary _encryptionAlgoFactoryList; + private static readonly SqlClientEncryptionAlgorithmFactoryList _singletonInstance = new SqlClientEncryptionAlgorithmFactoryList(); + + private SqlClientEncryptionAlgorithmFactoryList () { + _encryptionAlgoFactoryList = new ConcurrentDictionary(concurrencyLevel: 4 * Environment.ProcessorCount /* default value in ConcurrentDictionary*/, capacity: 2); + + // Add wellknown algorithms + _encryptionAlgoFactoryList.TryAdd(SqlAeadAes256CbcHmac256Algorithm.AlgorithmName, new SqlAeadAes256CbcHmac256Factory()); + _encryptionAlgoFactoryList.TryAdd(SqlAes256CbcAlgorithm.AlgorithmName, new SqlAes256CbcFactory()); + } + + internal static SqlClientEncryptionAlgorithmFactoryList GetInstance () { + return _singletonInstance; + } + + /// + /// Get the registered list of algorithms as a comma seperated list with algorithm names + /// wrapped in single quotes. + /// + internal string GetRegisteredCipherAlgorithmNames () { + StringBuilder builder = new StringBuilder(); + bool firstElem = true; + foreach (string key in _encryptionAlgoFactoryList.Keys) { + if (firstElem) { + builder.Append("'"); + firstElem = false; + } + else { + builder.Append(", '"); + } + builder.Append (key); + builder.Append ("'"); + } + + return builder.ToString(); + } + + /// + /// Gets the algorithm handle instance for a given algorithm and instantiates it using the provided key and the encryption type. + /// + /// + /// + /// + /// + internal void GetAlgorithm(SqlClientSymmetricKey key, byte type, string algorithmName, out SqlClientEncryptionAlgorithm encryptionAlgorithm) { + encryptionAlgorithm = null; + + SqlClientEncryptionAlgorithmFactory factory = null; + if (!_encryptionAlgoFactoryList.TryGetValue (algorithmName, out factory)) { + throw SQL.UnknownColumnEncryptionAlgorithm(algorithmName, + SqlClientEncryptionAlgorithmFactoryList.GetInstance().GetRegisteredCipherAlgorithmNames()); + } + + Debug.Assert (null != factory, "Null Algorithm Factory class detected"); + + // If the factory exists, following method will Create an algorithm object. If this fails, + // it will raise an exception. + encryptionAlgorithm = factory.Create(key, (SqlClientEncryptionType)type, algorithmName); + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionType.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionType.cs new file mode 100644 index 0000000000..3ba5a31986 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientEncryptionType.cs @@ -0,0 +1,19 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + /// + /// Encryption types supported in TCE + /// + internal enum SqlClientEncryptionType + { + PlainText = 0, + Deterministic, + Randomized + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlClientSymmetricKey.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientSymmetricKey.cs new file mode 100644 index 0000000000..112108ae14 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlClientSymmetricKey.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Data.SqlClient; + using System.Security.Cryptography; + + /// + /// Base class containing raw key bytes for symmetric key algorithms. Some encryption algorithms can use the key directly while others derive sub keys from this. + /// If an algorithm needs to derive more keys, have a derived class from this and use it in the corresponding encryption algorithm. + /// + internal class SqlClientSymmetricKey + { + /// + /// DPAPI protected key + /// + protected readonly byte[] _rootKey; + + /// + /// Constructor that initializes the root key. + /// + /// root key + internal SqlClientSymmetricKey(byte[] rootKey) + { + // Key validation + if (rootKey == null || rootKey.Length == 0) { + throw SQL.NullColumnEncryptionKeySysErr(); + } + + _rootKey = rootKey; + } + + /// + /// Returns a copy of the plain text key + /// This is needed for actual encryption/decryption. + /// + internal virtual byte[] RootKey + { + get + { + return _rootKey; + } + } + + /// + /// Computes SHA256 value of the plain text key bytes + /// + /// A string containing SHA256 hash of the root key + internal virtual string GetKeyHash() + { + return SqlSecurityUtility.GetSHA256Hash(RootKey); + } + + /// + /// Gets the length of the root key + /// + /// + /// Returns the length of the root key + /// + internal virtual int Length() + { + // Note: DPAPI preserves the original byte length + // so for now, this is as same as returning the length of the raw key. + return _rootKey.Length; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCertificateStoreProvider.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCertificateStoreProvider.cs new file mode 100644 index 0000000000..a81efb1996 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCertificateStoreProvider.cs @@ -0,0 +1,556 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Text; + using System.Data.Common; + using System.Diagnostics; + using System.Globalization; + using System.Security; + using System.Security.Cryptography; + using System.Security.Cryptography.X509Certificates; + + /// + /// Certificate Key Store Provider class + /// + public class SqlColumnEncryptionCertificateStoreProvider : SqlColumnEncryptionKeyStoreProvider + { + // Constants + // + // Assumption: Certificate Locations (LocalMachine & CurrentUser), Certificate Store name "My" + // Certificate provider name (CertificateStore) dont need to be localized. + + /// + /// Name for the certificate key store provider. + /// + public const string ProviderName = @"MSSQL_CERTIFICATE_STORE"; + + /// + /// RSA_OAEP is the only algorithm supported for encrypting/decrypting column encryption keys. + /// + internal const string RSAEncryptionAlgorithmWithOAEP = @"RSA_OAEP"; + + /// + /// LocalMachine certificate store location. Valid certificate locations are LocalMachine and CurrentUser. + /// + private const string _certLocationLocalMachine = @"LocalMachine"; + + /// + /// CurrentUser certificate store location. Valid certificate locations are LocalMachine and CurrentUser. + /// + private const string _certLocationCurrentUser = @"CurrentUser"; + + /// + /// Valid certificate store + /// + private const string _myCertificateStore = @"My"; + + /// + /// Certificate path format. This is a custom format. + /// + private const string _certificatePathFormat = @"[LocalMachine|CurrentUser]/My/[Thumbprint]"; + + /// + /// Hashig algoirthm used for signing + /// + private const string _hashingAlgorithm = @"SHA256"; + + /// + /// Algorithm version + /// + private readonly byte[] _version = new byte[] { 0x01 }; + + /// + /// This function uses a certificate specified by the key path + /// and decrypts an encrypted CEK with RSA encryption algorithm. + /// + /// Complete path of a certificate + /// Asymmetric Key Encryption Algorithm + /// Encrypted Column Encryption Key + /// Plain text column encryption key + public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyCertificatePath(masterKeyPath, isSystemOp: true); + + if (null == encryptedColumnEncryptionKey) + { + throw SQL.NullEncryptedColumnEncryptionKey(); + } + else if (0 == encryptedColumnEncryptionKey.Length) + { + throw SQL.EmptyEncryptedColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: true); + + // Validate key path length + ValidateCertificatePathLength(masterKeyPath, isSystemOp: true); + + // Parse the path and get the X509 cert + X509Certificate2 certificate = GetCertificateByPath(masterKeyPath, isSystemOp: true); + int keySizeInBytes = certificate.PublicKey.Key.KeySize / 8; + + // Validate and decrypt the EncryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + // + // keyPath is present in the encrypted column encryption key for identifying the original source of the asymmetric key pair and + // we will not validate it against the data contained in the CMK metadata (masterKeyPath). + + // Validate the version byte + if (encryptedColumnEncryptionKey[0] != _version[0]) + { + throw SQL.InvalidAlgorithmVersionInEncryptedCEK(encryptedColumnEncryptionKey[0], _version[0]); + } + + // Get key path length + int currentIndex = _version.Length; + Int16 keyPathLength = BitConverter.ToInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(Int16); + + // Get ciphertext length + int cipherTextLength = BitConverter.ToInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(Int16); + + // Skip KeyPath + // KeyPath exists only for troubleshooting purposes and doesnt need validation. + currentIndex += keyPathLength; + + // validate the ciphertext length + if (cipherTextLength != keySizeInBytes) + { + throw SQL.InvalidCiphertextLengthInEncryptedCEK(cipherTextLength, keySizeInBytes, masterKeyPath); + } + + // Validate the signature length + // Signature length should be same as the key side for RSA PKCSv1.5 + int signatureLength = encryptedColumnEncryptionKey.Length - currentIndex - cipherTextLength; + if (signatureLength != keySizeInBytes) + { + throw SQL.InvalidSignatureInEncryptedCEK(signatureLength, keySizeInBytes, masterKeyPath); + } + + // Get ciphertext + byte[] cipherText = new byte[cipherTextLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, cipherText, 0, cipherText.Length); + currentIndex += cipherTextLength; + + // Get signature + byte[] signature = new byte[signatureLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, signature, 0, signature.Length); + + // Compute the hash to validate the signature + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformFinalBlock(encryptedColumnEncryptionKey, 0, encryptedColumnEncryptionKey.Length - signature.Length); + hash = sha256.Hash; + } + + Debug.Assert(hash != null, @"hash should not be null while decrypting encrypted column encryption key."); + + // Validate the signature + if (!RSAVerifySignature(hash, signature, certificate)) + { + throw SQL.InvalidCertificateSignature(masterKeyPath); + } + + // Decrypt the CEK + return RSADecrypt(cipherText, certificate); + } + + /// + /// This function uses a certificate specified by the key path + /// and encrypts CEK with RSA encryption algorithm. + /// + /// Complete path of a certificate + /// Asymmetric Key Encryption Algorithm + /// Plain text column encryption key + /// Encrypted column encryption key + public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyCertificatePath(masterKeyPath, isSystemOp: false); + if (null == columnEncryptionKey) + { + throw SQL.NullColumnEncryptionKey(); + } + else if (0 == columnEncryptionKey.Length) + { + throw SQL.EmptyColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: false); + + // Validate masterKeyPath Length + ValidateCertificatePathLength(masterKeyPath, isSystemOp: false); + + // Parse the certificate path and get the X509 cert + X509Certificate2 certificate = GetCertificateByPath(masterKeyPath, isSystemOp: false); + int keySizeInBytes = certificate.PublicKey.Key.KeySize / 8; + + // Construct the encryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + ciphertext + keyPath + signature + // + // We currently only support one version + byte[] version = new byte[] { _version[0] }; + + // Get the Unicode encoded bytes of cultureinvariant lower case masterKeyPath + byte[] masterKeyPathBytes = Encoding.Unicode.GetBytes(masterKeyPath.ToLowerInvariant()); + byte[] keyPathLength = BitConverter.GetBytes((Int16)masterKeyPathBytes.Length); + + // Encrypt the plain text + byte[] cipherText = RSAEncrypt(columnEncryptionKey, certificate); + byte[] cipherTextLength = BitConverter.GetBytes((Int16)cipherText.Length); + Debug.Assert(cipherText.Length == keySizeInBytes, @"cipherText length does not match the RSA key size"); + + // Compute hash + // SHA-2-256(version + keyPathLength + ciphertextLength + keyPath + ciphertext) + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformBlock(version, 0, version.Length, version, 0); + sha256.TransformBlock(keyPathLength, 0, keyPathLength.Length, keyPathLength, 0); + sha256.TransformBlock(cipherTextLength, 0, cipherTextLength.Length, cipherTextLength, 0); + sha256.TransformBlock(masterKeyPathBytes, 0, masterKeyPathBytes.Length, masterKeyPathBytes, 0); + sha256.TransformFinalBlock(cipherText, 0, cipherText.Length); + hash = sha256.Hash; + } + + // Sign the hash + byte[] signedHash = RSASignHashedData(hash, certificate); + Debug.Assert(signedHash.Length == keySizeInBytes, @"signed hash length does not match the RSA key size"); + Debug.Assert(RSAVerifySignature(hash, signedHash, certificate), @"Invalid signature of the encrypted column encryption key computed."); + + // Construct the encrypted column encryption key + // EncryptedColumnEncryptionKey = version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + int encryptedColumnEncryptionKeyLength = version.Length + cipherTextLength.Length + keyPathLength.Length + cipherText.Length + masterKeyPathBytes.Length + signedHash.Length; + byte[] encryptedColumnEncryptionKey = new byte[encryptedColumnEncryptionKeyLength]; + + // Copy version byte + int currentIndex = 0; + Buffer.BlockCopy(version, 0, encryptedColumnEncryptionKey, currentIndex, version.Length); + currentIndex += version.Length; + + // Copy key path length + Buffer.BlockCopy(keyPathLength, 0, encryptedColumnEncryptionKey, currentIndex, keyPathLength.Length); + currentIndex += keyPathLength.Length; + + // Copy ciphertext length + Buffer.BlockCopy(cipherTextLength, 0, encryptedColumnEncryptionKey, currentIndex, cipherTextLength.Length); + currentIndex += cipherTextLength.Length; + + // Copy key path + Buffer.BlockCopy(masterKeyPathBytes, 0, encryptedColumnEncryptionKey, currentIndex, masterKeyPathBytes.Length); + currentIndex += masterKeyPathBytes.Length; + + // Copy ciphertext + Buffer.BlockCopy(cipherText, 0, encryptedColumnEncryptionKey, currentIndex, cipherText.Length); + currentIndex += cipherText.Length; + + // copy the signature + Buffer.BlockCopy(signedHash, 0, encryptedColumnEncryptionKey, currentIndex, signedHash.Length); + + return encryptedColumnEncryptionKey; + } + + /// + /// This function validates that the encryption algorithm is RSA_OAEP and if it is not, + /// then throws an exception + /// + /// Asymmetric key encryptio algorithm + private void ValidateEncryptionAlgorithm(string encryptionAlgorithm, bool isSystemOp) + { + // This validates that the encryption algorithm is RSA_OAEP + if (null == encryptionAlgorithm) + { + throw SQL.NullKeyEncryptionAlgorithm(isSystemOp); + } + + if (string.Equals(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, StringComparison.OrdinalIgnoreCase) != true) + { + throw SQL.InvalidKeyEncryptionAlgorithm(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, isSystemOp); + } + } + + /// + /// Certificate path length has to fit in two bytes, so check its value against Int16.MaxValue + /// + /// + /// + private void ValidateCertificatePathLength(string masterKeyPath, bool isSystemOp) + { + if (masterKeyPath.Length >= Int16.MaxValue) + { + throw SQL.LargeCertificatePathLength(masterKeyPath.Length, Int16.MaxValue, isSystemOp); + } + } + + /// + /// Gets a string array containing Valid certificate locations. + /// + private string[] GetValidCertificateLocations() + { + return new string[2] {_certLocationLocalMachine, _certLocationCurrentUser}; + } + + /// + /// Checks if the certificate path is Empty or Null (and raises exception if they are). + /// + private void ValidateNonEmptyCertificatePath(string masterKeyPath, bool isSystemOp) + { + if (string.IsNullOrWhiteSpace(masterKeyPath)) + { + if (null == masterKeyPath) + { + throw SQL.NullCertificatePath(GetValidCertificateLocations(), isSystemOp); + } + else + { + throw SQL.InvalidCertificatePath(masterKeyPath, GetValidCertificateLocations(), isSystemOp); + } + } + } + + /// + /// Parses the given certificate path, searches in certificate store and returns a matching certificate + /// + /// + /// Certificate key path. Format of the path is [LocalMachine|CurrentUser]/[storename]/thumbprint + /// + /// Returns the certificate identified by the certificate path + private X509Certificate2 GetCertificateByPath(string keyPath, bool isSystemOp) + { + Debug.Assert(!string.IsNullOrEmpty(keyPath)); + + // Assign default values for omitted fields + StoreLocation storeLocation = StoreLocation.LocalMachine; // Default to Local Machine + StoreName storeName = StoreName.My; + string[] certParts = keyPath.Split('/'); + + // Validate certificate path + // Certificate path should only contain 3 parts (Certificate Location, Certificate Store Name and Thumbprint) + if (certParts.Length > 3) + { + throw SQL.InvalidCertificatePath(keyPath, GetValidCertificateLocations(), isSystemOp); + } + + // Extract the store location where the cert is stored + if (certParts.Length > 2) + { + if (string.Equals(certParts[0], _certLocationLocalMachine, StringComparison.OrdinalIgnoreCase) == true) + { + storeLocation = StoreLocation.LocalMachine; + } + else if (string.Equals(certParts[0], _certLocationCurrentUser, StringComparison.OrdinalIgnoreCase) == true) + { + storeLocation = StoreLocation.CurrentUser; + } + else + { + // throw an invalid certificate location exception + throw SQL.InvalidCertificateLocation(certParts[0], keyPath, GetValidCertificateLocations(), isSystemOp); + } + } + + // Parse the certificate store name + if (certParts.Length > 1) + { + if (string.Equals(certParts[certParts.Length - 2], _myCertificateStore, StringComparison.OrdinalIgnoreCase) == true) + { + storeName = StoreName.My; + } + else + { + // We only support storing them in My certificate store + throw SQL.InvalidCertificateStore(certParts[certParts.Length - 2], keyPath, _myCertificateStore, isSystemOp); + } + } + + // Get thumpbrint + string thumbprint = certParts[certParts.Length - 1]; + if (string.IsNullOrEmpty(thumbprint)) + { + // An empty thumbprint specified + throw SQL.EmptyCertificateThumbprint(keyPath, isSystemOp); + } + + // Find the certificate and return + return GetCertificate(storeLocation, storeName, keyPath, thumbprint, isSystemOp); + } + + /// + /// Searches for a certificate in certificate store and returns the matching certificate + /// + /// Store Location: This can be one of LocalMachine or UserName + /// Store Location: Currently this can only be My store. + /// Certificate thumbprint + /// Matching certificate + private X509Certificate2 GetCertificate(StoreLocation storeLocation, StoreName storeName, string masterKeyPath, string thumbprint, bool isSystemOp) + { + // Open specified certificate store + X509Store certificateStore = null; + + try + { + certificateStore = new X509Store(storeName, storeLocation); + certificateStore.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); + + // Search for the specified certificate + X509Certificate2Collection matchingCertificates = + certificateStore.Certificates.Find(X509FindType.FindByThumbprint, + thumbprint, + false); + + // Throw an exception if a cert with the specified thumbprint is not found + if (matchingCertificates == null || matchingCertificates.Count == 0) + { + throw SQL.CertificateNotFound(thumbprint, storeName.ToString(), storeLocation.ToString(), isSystemOp); + } + + X509Certificate2 certificate = matchingCertificates[0]; + if (!certificate.HasPrivateKey) + { + // ensure the certificate has private key + throw SQL.CertificateWithNoPrivateKey(masterKeyPath, isSystemOp); + } + + // return the matching certificate + return certificate; + } + finally + { + // Close the certificate store + if (certificateStore != null) + { + certificateStore.Close(); + } + } + } + + /// + /// Encrypt the text using specified certificate. + /// + /// Text to encrypt. + /// Certificate object. + /// Master key path that was used. + /// Returns an encrypted blob or throws an exception if there are any errors. + private byte[] RSAEncrypt(byte[] plainText, X509Certificate2 certificate) + { + Debug.Assert(plainText != null); + Debug.Assert(certificate != null); + Debug.Assert(certificate.HasPrivateKey, "Attempting to encrypt with cert without privatekey"); + + RSACryptoServiceProvider rscp = (RSACryptoServiceProvider)certificate.PublicKey.Key; + return rscp.Encrypt(plainText, fOAEP: true); + } + + /// + /// Encrypt the text using specified certificate. + /// + /// Text to decrypt. + /// Certificate object. + /// Master key path that was used. + private byte[] RSADecrypt(byte[] cipherText, X509Certificate2 certificate) + { + Debug.Assert((cipherText != null) && (cipherText.Length != 0)); + Debug.Assert(certificate != null); + Debug.Assert(certificate.HasPrivateKey, "Attempting to decrypt with cert without privatekey"); + + RSACryptoServiceProvider rscp = (RSACryptoServiceProvider)certificate.PrivateKey; + return rscp.Decrypt(cipherText, fOAEP: true); + } + + /// + /// Generates signature based on RSA PKCS#v1.5 scheme using a specified certificate. + /// + /// Text to sign. + /// Certificate object. + /// Signature + private byte[] RSASignHashedData(byte[] dataToSign, X509Certificate2 certificate) + { + Debug.Assert((dataToSign != null) && (dataToSign.Length != 0)); + Debug.Assert(certificate != null); + Debug.Assert(certificate.HasPrivateKey, "Attempting to sign with cert without privatekey"); + + // Prepare RSACryptoServiceProvider from certificate's private key + RSACryptoServiceProvider rscp = GetCSPFromCertificatePrivateKey(certificate); + + // Prepare RSAPKCS1SignatureFormatter for signing the passed in hash + RSAPKCS1SignatureFormatter rsaFormatter = new RSAPKCS1SignatureFormatter(rscp); + + //Set the hash algorithm to SHA256. + rsaFormatter.SetHashAlgorithm(_hashingAlgorithm); + + //Create a signature for HashValue and return it. + return rsaFormatter.CreateSignature(dataToSign); + } + + /// + /// Verifies the given RSA PKCSv1.5 signature. + /// + /// + /// + /// + /// true if signature is valid, false if it is not valid + private bool RSAVerifySignature(byte[] dataToVerify, byte[] signature, X509Certificate2 certificate) + { + Debug.Assert((dataToVerify != null) && (dataToVerify.Length != 0)); + Debug.Assert((signature != null) && (signature.Length != 0)); + Debug.Assert(certificate != null); + Debug.Assert(certificate.HasPrivateKey, "Attempting to sign with cert without privatekey"); + + // Prepare RSACryptoServiceProvider from certificate's private key + RSACryptoServiceProvider rscp = GetCSPFromCertificatePrivateKey(certificate); + + // Prepare RSAPKCS1SignatureFormatter for signing the passed in hash + RSAPKCS1SignatureDeformatter rsaDeFormatter = new RSAPKCS1SignatureDeformatter(rscp); + + //Set the hash algorithm to SHA256. + rsaDeFormatter.SetHashAlgorithm(_hashingAlgorithm); + + //Create a signature for HashValue and return it. + return rsaDeFormatter.VerifySignature(dataToVerify, signature); + } + + /// + /// Prepares RSACryptoServiceProvider from a given certificate's private key + /// + /// + /// + private RSACryptoServiceProvider GetCSPFromCertificatePrivateKey(X509Certificate2 certificate) + { + const int rsaAesProviderType = 24; + + CspParameters privateKeyParams = new CspParameters(); + privateKeyParams = new CspParameters(); + privateKeyParams.KeyContainerName = ((RSACryptoServiceProvider)certificate.PrivateKey).CspKeyContainerInfo.KeyContainerName; + privateKeyParams.ProviderType = rsaAesProviderType /*PROV_RSA_AES*/; + privateKeyParams.KeyNumber = (int)((RSACryptoServiceProvider)certificate.PrivateKey).CspKeyContainerInfo.KeyNumber; + + // For CurrentUser store, use UseExistingKey + // For LocalMachine store, use UseMachineKeyStore + // CspKeyContainerInfo.MachineKeyStore already contains the appropriate information so just use it. + if (((RSACryptoServiceProvider)certificate.PrivateKey).CspKeyContainerInfo.MachineKeyStore) + { + privateKeyParams.Flags = CspProviderFlags.UseMachineKeyStore; + } + else + { + privateKeyParams.Flags = CspProviderFlags.UseExistingKey; + } + + return new RSACryptoServiceProvider(privateKeyParams); + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCngProvider.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCngProvider.cs new file mode 100644 index 0000000000..aa4561ab3c --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCngProvider.cs @@ -0,0 +1,414 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Text; + using System.Data.Common; + using System.Diagnostics; + using System.Globalization; + using System.Security; + using System.Security.Cryptography; + + /// + /// Provides implementation similar to certificate store provider. + /// A CEK encrypted with certificate provider should be decryptable by this provider and vice versa. + /// + /// Envolope Format for the encrypted column encryption key + /// version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + /// version: A single byte indicating the format version. + /// keyPathLength: Length of the keyPath. + /// ciphertextLength: ciphertext length + /// keyPath: keyPath used to encrypt the column encryption key. This is only used for troubleshooting purposes and is not verified during decryption. + /// ciphertext: Encrypted column encryption key + /// signature: Signature of the entire byte array. Signature is validated before decrypting the column encryption key. + /// + public class SqlColumnEncryptionCngProvider : SqlColumnEncryptionKeyStoreProvider + { + /// + /// Name for the CNG key store provider. + /// + public const string ProviderName = @"MSSQL_CNG_STORE"; + + /// + /// RSA_OAEP is the only algorithm supported for encrypting/decrypting column encryption keys using this provider. + /// For now, we are keeping all the providers in [....]. + /// + private const string RSAEncryptionAlgorithmWithOAEP = @"RSA_OAEP"; + + /// + /// Algorithm version + /// + private readonly byte[] _version = new byte[] { 0x01 }; + + /// + /// This function uses the asymmetric key specified by the key path + /// and decrypts an encrypted CEK with RSA encryption algorithm. + /// + /// Complete path of an asymmetric key in CNG + /// Asymmetric Key Encryption Algorithm + /// Encrypted Column Encryption Key + /// Plain text column encryption key + public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyKeyPath(masterKeyPath, isSystemOp: true); + + if (null == encryptedColumnEncryptionKey) + { + throw SQL.NullEncryptedColumnEncryptionKey(); + } + + if (0 == encryptedColumnEncryptionKey.Length) + { + throw SQL.EmptyEncryptedColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: true); + + // Create RSA Provider with the given CNG name and key name + RSACng rsaCngProvider = CreateRSACngProvider(masterKeyPath, isSystemOp: true); + + // Validate whether the key is RSA one or not and then get the key size + int keySizeInBytes = GetKeySize(rsaCngProvider); + + // Validate and decrypt the EncryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + keyPath + ciphervtext + signature + // + // keyPath is present in the encrypted column encryption key for identifying the original source of the asymmetric key pair and + // we will not validate it against the data contained in the CMK metadata (masterKeyPath). + + // Validate the version byte + if (encryptedColumnEncryptionKey[0] != _version[0]) + { + throw SQL.InvalidAlgorithmVersionInEncryptedCEK(encryptedColumnEncryptionKey[0], _version[0]); + } + + // Get key path length + int currentIndex = _version.Length; + UInt16 keyPathLength = BitConverter.ToUInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(UInt16); + + // Get ciphertext length + UInt16 cipherTextLength = BitConverter.ToUInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(UInt16); + + // Skip KeyPath + // KeyPath exists only for troubleshooting purposes and doesnt need validation. + currentIndex += keyPathLength; + + // validate the ciphertext length + if (cipherTextLength != keySizeInBytes) + { + throw SQL.InvalidCiphertextLengthInEncryptedCEKCng(cipherTextLength, keySizeInBytes, masterKeyPath); + } + + // Validate the signature length + // Signature length should be same as the key side for RSA PKCSv1.5 + int signatureLength = encryptedColumnEncryptionKey.Length - currentIndex - cipherTextLength; + if (signatureLength != keySizeInBytes) + { + throw SQL.InvalidSignatureInEncryptedCEKCng(signatureLength, keySizeInBytes, masterKeyPath); + } + + // Get ciphertext + byte[] cipherText = new byte[cipherTextLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, cipherText, 0, cipherText.Length); + currentIndex += cipherTextLength; + + // Get signature + byte[] signature = new byte[signatureLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, signature, 0, signature.Length); + + // Compute the hash to validate the signature + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformFinalBlock(encryptedColumnEncryptionKey, 0, encryptedColumnEncryptionKey.Length - signature.Length); + hash = sha256.Hash; + } + + Debug.Assert(hash != null, @"hash should not be null while decrypting encrypted column encryption key."); + + // Validate the signature + if (!RSAVerifySignature(hash, signature, rsaCngProvider)) + { + throw SQL.InvalidSignature(masterKeyPath); + } + + // Decrypt the CEK + return RSADecrypt(rsaCngProvider, cipherText); + } + + /// + /// This function uses the asymmetric key specified by the key path + /// and encrypts CEK with RSA encryption algorithm. + /// + /// Complete path of an asymmetric key in AKV + /// Asymmetric Key Encryption Algorithm + /// Plain text column encryption key + /// Encrypted column encryption key + public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyKeyPath(masterKeyPath, isSystemOp: false); + + if (null == columnEncryptionKey) + { + throw SQL.NullColumnEncryptionKey(); + } + else if (0 == columnEncryptionKey.Length) + { + throw SQL.EmptyColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: false); + + // CreateCNGProviderWithKey + RSACng rsaCngProvider = CreateRSACngProvider(masterKeyPath, isSystemOp: false); + + // Validate whether the key is RSA one or not and then get the key size + int keySizeInBytes = GetKeySize(rsaCngProvider); + + // Construct the encryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + ciphertext + keyPath + signature + // + // We currently only support one version + byte[] version = new byte[] { _version[0] }; + + // Get the Unicode encoded bytes of cultureinvariant lower case masterKeyPath + byte[] masterKeyPathBytes = Encoding.Unicode.GetBytes(masterKeyPath.ToLowerInvariant()); + byte[] keyPathLength = BitConverter.GetBytes((Int16)masterKeyPathBytes.Length); + + // Encrypt the plain text + byte[] cipherText = RSAEncrypt(rsaCngProvider, columnEncryptionKey); + byte[] cipherTextLength = BitConverter.GetBytes((Int16)cipherText.Length); + Debug.Assert(cipherText.Length == keySizeInBytes, @"cipherText length does not match the RSA key size"); + + // Compute hash + // SHA-2-256(version + keyPathLength + ciphertextLength + keyPath + ciphertext) + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformBlock(version, 0, version.Length, version, 0); + sha256.TransformBlock(keyPathLength, 0, keyPathLength.Length, keyPathLength, 0); + sha256.TransformBlock(cipherTextLength, 0, cipherTextLength.Length, cipherTextLength, 0); + sha256.TransformBlock(masterKeyPathBytes, 0, masterKeyPathBytes.Length, masterKeyPathBytes, 0); + sha256.TransformFinalBlock(cipherText, 0, cipherText.Length); + hash = sha256.Hash; + } + + // Sign the hash + byte[] signedHash = RSASignHashedData(hash, rsaCngProvider); + Debug.Assert(signedHash.Length == keySizeInBytes, @"signed hash length does not match the RSA key size"); + Debug.Assert(RSAVerifySignature(hash, signedHash, rsaCngProvider), @"Invalid signature of the encrypted column encryption key computed."); + + // Construct the encrypted column encryption key + // EncryptedColumnEncryptionKey = version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + int encryptedColumnEncryptionKeyLength = version.Length + cipherTextLength.Length + keyPathLength.Length + cipherText.Length + masterKeyPathBytes.Length + signedHash.Length; + byte[] encryptedColumnEncryptionKey = new byte[encryptedColumnEncryptionKeyLength]; + + // Copy version byte + int currentIndex = 0; + Buffer.BlockCopy(version, 0, encryptedColumnEncryptionKey, currentIndex, version.Length); + currentIndex += version.Length; + + // Copy key path length + Buffer.BlockCopy(keyPathLength, 0, encryptedColumnEncryptionKey, currentIndex, keyPathLength.Length); + currentIndex += keyPathLength.Length; + + // Copy ciphertext length + Buffer.BlockCopy(cipherTextLength, 0, encryptedColumnEncryptionKey, currentIndex, cipherTextLength.Length); + currentIndex += cipherTextLength.Length; + + // Copy key path + Buffer.BlockCopy(masterKeyPathBytes, 0, encryptedColumnEncryptionKey, currentIndex, masterKeyPathBytes.Length); + currentIndex += masterKeyPathBytes.Length; + + // Copy ciphertext + Buffer.BlockCopy(cipherText, 0, encryptedColumnEncryptionKey, currentIndex, cipherText.Length); + currentIndex += cipherText.Length; + + // copy the signature + Buffer.BlockCopy(signedHash, 0, encryptedColumnEncryptionKey, currentIndex, signedHash.Length); + + return encryptedColumnEncryptionKey; + } + + /// + /// This function validates that the encryption algorithm is RSA_OAEP and if it is not, + /// then throws an exception + /// + /// Asymmetric key encryptio algorithm + /// Indicates if ADO.NET calls or the customer calls the API + private void ValidateEncryptionAlgorithm(string encryptionAlgorithm, bool isSystemOp) + { + // This validates that the encryption algorithm is RSA_OAEP + if (null == encryptionAlgorithm) + { + throw SQL.NullKeyEncryptionAlgorithm(isSystemOp); + } + + if (!string.Equals(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, StringComparison.OrdinalIgnoreCase)) + { + throw SQL.InvalidKeyEncryptionAlgorithm(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, isSystemOp); + } + } + + /// + /// Checks if the CNG key path is Empty or Null (and raises exception if they are). + /// + /// keypath containing the CNG provider name and key name + /// Indicates if ADO.NET calls or the customer calls the API + private void ValidateNonEmptyKeyPath(string masterKeyPath, bool isSystemOp) + { + if (string.IsNullOrWhiteSpace(masterKeyPath)) + { + if (null == masterKeyPath) + { + throw SQL.NullCngKeyPath(isSystemOp); + } + else + { + throw SQL.InvalidCngPath(masterKeyPath, isSystemOp); + } + } + } + + /// + /// Encrypt the text using specified CNG key. + /// + /// RSA CNG Provider. + /// Plain text Column Encryption Key. + /// Returns an encrypted blob or throws an exception if there are any errors. + private byte[] RSAEncrypt(RSACng rsaCngProvider, byte[] columnEncryptionKey) + { + Debug.Assert(columnEncryptionKey != null); + Debug.Assert(rsaCngProvider != null); + + return rsaCngProvider.Encrypt(columnEncryptionKey, RSAEncryptionPadding.OaepSHA1); + } + + /// + /// Decrypt the text using the specified CNG key. + /// + /// RSA CNG Provider. + /// Encrypted Column Encryption Key. + /// Returns the decrypted plaintext Column Encryption Key or throws an exception if there are any errors. + private byte[] RSADecrypt(RSACng rsaCngProvider, byte[] encryptedColumnEncryptionKey) + { + Debug.Assert((encryptedColumnEncryptionKey != null) && (encryptedColumnEncryptionKey.Length != 0)); + Debug.Assert(rsaCngProvider != null); + + return rsaCngProvider.Decrypt(encryptedColumnEncryptionKey, RSAEncryptionPadding.OaepSHA1); + } + + /// + /// Generates signature based on RSA PKCS#v1.5 scheme using a specified CNG Key. + /// + /// Text to sign. + /// RSA CNG Provider. + /// Signature + private byte[] RSASignHashedData(byte[] dataToSign, RSACng rsaCngProvider) + { + Debug.Assert((dataToSign != null) && (dataToSign.Length != 0)); + Debug.Assert(rsaCngProvider != null); + + return rsaCngProvider.SignData(dataToSign, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + } + + /// + /// Verifies the given RSA PKCSv1.5 signature. + /// + /// + /// + /// RSA CNG Provider. + /// true if signature is valid, false if it is not valid + private bool RSAVerifySignature(byte[] dataToVerify, byte[] signature, RSACng rsaCngProvider) + { + Debug.Assert((dataToVerify != null) && (dataToVerify.Length != 0)); + Debug.Assert((signature != null) && (signature.Length != 0)); + Debug.Assert(rsaCngProvider != null); + + return rsaCngProvider.VerifyData(dataToVerify, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + } + + /// + /// Gets the public Key size in bytes + /// + /// RSA CNG Provider. + /// Key size in bytes + private int GetKeySize(RSACng rsaCngProvider) + { + Debug.Assert(rsaCngProvider != null); + + return rsaCngProvider.KeySize / 8; // Convert from bits to byte + } + + /// + /// Creates a RSACng object from the given keyName + /// + /// + /// Indicates if ADO.NET calls or the customer calls the API + /// + private RSACng CreateRSACngProvider(string keyPath, bool isSystemOp) + { + // Get CNGProvider and the KeyID + string cngProviderName; + string keyIdentifier; + GetCngProviderAndKeyId(keyPath, isSystemOp, out cngProviderName, out keyIdentifier); + + CngProvider cngProvider = new CngProvider(cngProviderName); + CngKey cngKey; + + try + { + cngKey = CngKey.Open(keyIdentifier, cngProvider); + } + catch (CryptographicException) + { + throw SQL.InvalidCngKey(keyPath, cngProviderName, keyIdentifier, isSystemOp); + } + + return new RSACng(cngKey); + } + + /// + /// Extracts the CNG provider and key name from the key path + /// + /// keypath in the format [CNG Provider]\[KeyName] + /// Indicates if ADO.NET calls or the customer calls the API + /// CNG Provider + /// Key identifier inside the CNG provider + private void GetCngProviderAndKeyId(string keyPath, bool isSystemOp, out string cngProvider, out string keyIdentifier) + { + int indexOfSlash = keyPath.IndexOf(@"/"); + if (indexOfSlash == -1) + { + throw SQL.InvalidCngPath(keyPath, isSystemOp); + } + + cngProvider = keyPath.Substring(0, indexOfSlash); + keyIdentifier = keyPath.Substring(indexOfSlash + 1, keyPath.Length - (indexOfSlash + 1)); + + if (cngProvider.Length == 0) + { + throw SQL.EmptyCngName(keyPath, isSystemOp); + } + + if (keyIdentifier.Length == 0) + { + throw SQL.EmptyCngKeyId(keyPath, isSystemOp); + } + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCspProvider.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCspProvider.cs new file mode 100644 index 0000000000..19ac621b38 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionCspProvider.cs @@ -0,0 +1,462 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Text; + using System.Data.Common; + using System.Diagnostics; + using System.Globalization; + using System.Security; + using System.Security.Cryptography; + using Microsoft.Win32; + + /// + /// Provides implementation similar to certificate store provider. + /// A CEK encrypted with certificate store provider should be decryptable by this provider and vice versa. + /// + /// Envolope Format for the encrypted column encryption key + /// version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + /// version: A single byte indicating the format version. + /// keyPathLength: Length of the keyPath. + /// ciphertextLength: ciphertext length + /// keyPath: keyPath used to encrypt the column encryption key. This is only used for troubleshooting purposes and is not verified during decryption. + /// ciphertext: Encrypted column encryption key + /// signature: Signature of the entire byte array. Signature is validated before decrypting the column encryption key. + /// + public class SqlColumnEncryptionCspProvider : SqlColumnEncryptionKeyStoreProvider + { + /// + /// Name for the CSP key store provider. + /// + public const string ProviderName = @"MSSQL_CSP_PROVIDER"; + + /// + /// RSA_OAEP is the only algorithm supported for encrypting/decrypting column encryption keys using this provider. + /// For now, we are keeping all the providers in [....]. + /// + private const string RSAEncryptionAlgorithmWithOAEP = @"RSA_OAEP"; + + /// + /// Hashing algoirthm used for signing + /// + private const string HashingAlgorithm = @"SHA256"; + + /// + /// Algorithm version + /// + private readonly byte[] _version = new byte[] { 0x01 }; + + /// + /// This function uses the asymmetric key specified by the key path + /// and decrypts an encrypted CEK with RSA encryption algorithm. + /// + /// Complete path of an asymmetric key in CSP + /// Asymmetric Key Encryption Algorithm + /// Encrypted Column Encryption Key + /// Plain text column encryption key + public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyCSPKeyPath(masterKeyPath, isSystemOp: true); + + if (null == encryptedColumnEncryptionKey) + { + throw SQL.NullEncryptedColumnEncryptionKey(); + } + + if (0 == encryptedColumnEncryptionKey.Length) + { + throw SQL.EmptyEncryptedColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: true); + + // Create RSA Provider with the given CSP name and key name + RSACryptoServiceProvider rsaProvider = CreateRSACryptoProvider(masterKeyPath, isSystemOp: true); + + // Validate whether the key is RSA one or not and then get the key size + int keySizeInBytes = GetKeySize(rsaProvider); + + // Validate and decrypt the EncryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + keyPath + ciphervtext + signature + // + // keyPath is present in the encrypted column encryption key for identifying the original source of the asymmetric key pair and + // we will not validate it against the data contained in the CMK metadata (masterKeyPath). + + // Validate the version byte + if (encryptedColumnEncryptionKey[0] != _version[0]) + { + throw SQL.InvalidAlgorithmVersionInEncryptedCEK(encryptedColumnEncryptionKey[0], _version[0]); + } + + // Get key path length + int currentIndex = _version.Length; + UInt16 keyPathLength = BitConverter.ToUInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(UInt16); + + // Get ciphertext length + UInt16 cipherTextLength = BitConverter.ToUInt16(encryptedColumnEncryptionKey, currentIndex); + currentIndex += sizeof(UInt16); + + // Skip KeyPath + // KeyPath exists only for troubleshooting purposes and doesnt need validation. + currentIndex += keyPathLength; + + // validate the ciphertext length + if (cipherTextLength != keySizeInBytes) + { + throw SQL.InvalidCiphertextLengthInEncryptedCEKCsp(cipherTextLength, keySizeInBytes, masterKeyPath); + } + + // Validate the signature length + // Signature length should be same as the key side for RSA PKCSv1.5 + int signatureLength = encryptedColumnEncryptionKey.Length - currentIndex - cipherTextLength; + if (signatureLength != keySizeInBytes) + { + throw SQL.InvalidSignatureInEncryptedCEKCsp(signatureLength, keySizeInBytes, masterKeyPath); + } + + // Get ciphertext + byte[] cipherText = new byte[cipherTextLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, cipherText, 0, cipherText.Length); + currentIndex += cipherTextLength; + + // Get signature + byte[] signature = new byte[signatureLength]; + Buffer.BlockCopy(encryptedColumnEncryptionKey, currentIndex, signature, 0, signature.Length); + + // Compute the hash to validate the signature + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformFinalBlock(encryptedColumnEncryptionKey, 0, encryptedColumnEncryptionKey.Length - signature.Length); + hash = sha256.Hash; + } + + Debug.Assert(hash != null, @"hash should not be null while decrypting encrypted column encryption key."); + + // Validate the signature + if (!RSAVerifySignature(hash, signature, rsaProvider)) + { + throw SQL.InvalidSignature(masterKeyPath); + } + + // Decrypt the CEK + return RSADecrypt(rsaProvider, cipherText); + } + + /// + /// This function uses the asymmetric key specified by the key path + /// and encrypts CEK with RSA encryption algorithm. + /// + /// Complete path of an asymmetric key in AKV + /// Asymmetric Key Encryption Algorithm + /// Plain text column encryption key + /// Encrypted column encryption key + public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) + { + // Validate the input parameters + ValidateNonEmptyCSPKeyPath(masterKeyPath, isSystemOp: false); + + if (null == columnEncryptionKey) + { + throw SQL.NullColumnEncryptionKey(); + } + else if (0 == columnEncryptionKey.Length) + { + throw SQL.EmptyColumnEncryptionKey(); + } + + // Validate encryptionAlgorithm + ValidateEncryptionAlgorithm(encryptionAlgorithm, isSystemOp: false); + + // Create RSA Provider with the given CSP name and key name + RSACryptoServiceProvider rsaProvider = CreateRSACryptoProvider(masterKeyPath, isSystemOp: false); + + // Validate whether the key is RSA one or not and then get the key size + int keySizeInBytes = GetKeySize(rsaProvider); + + // Construct the encryptedColumnEncryptionKey + // Format is + // version + keyPathLength + ciphertextLength + ciphertext + keyPath + signature + // + // We currently only support one version + byte[] version = new byte[] { _version[0] }; + + // Get the Unicode encoded bytes of cultureinvariant lower case masterKeyPath + byte[] masterKeyPathBytes = Encoding.Unicode.GetBytes(masterKeyPath.ToLowerInvariant()); + byte[] keyPathLength = BitConverter.GetBytes((Int16)masterKeyPathBytes.Length); + + // Encrypt the plain text + byte[] cipherText = RSAEncrypt(rsaProvider, columnEncryptionKey); + byte[] cipherTextLength = BitConverter.GetBytes((Int16)cipherText.Length); + Debug.Assert(cipherText.Length == keySizeInBytes, @"cipherText length does not match the RSA key size"); + + // Compute hash + // SHA-2-256(version + keyPathLength + ciphertextLength + keyPath + ciphertext) + byte[] hash; + using (SHA256Cng sha256 = new SHA256Cng()) + { + sha256.TransformBlock(version, 0, version.Length, version, 0); + sha256.TransformBlock(keyPathLength, 0, keyPathLength.Length, keyPathLength, 0); + sha256.TransformBlock(cipherTextLength, 0, cipherTextLength.Length, cipherTextLength, 0); + sha256.TransformBlock(masterKeyPathBytes, 0, masterKeyPathBytes.Length, masterKeyPathBytes, 0); + sha256.TransformFinalBlock(cipherText, 0, cipherText.Length); + hash = sha256.Hash; + } + + // Sign the hash + byte[] signedHash = RSASignHashedData(hash, rsaProvider); + Debug.Assert(signedHash.Length == keySizeInBytes, @"signed hash length does not match the RSA key size"); + Debug.Assert(RSAVerifySignature(hash, signedHash, rsaProvider), @"Invalid signature of the encrypted column encryption key computed."); + + // Construct the encrypted column encryption key + // EncryptedColumnEncryptionKey = version + keyPathLength + ciphertextLength + keyPath + ciphertext + signature + int encryptedColumnEncryptionKeyLength = version.Length + cipherTextLength.Length + keyPathLength.Length + cipherText.Length + masterKeyPathBytes.Length + signedHash.Length; + byte[] encryptedColumnEncryptionKey = new byte[encryptedColumnEncryptionKeyLength]; + + // Copy version byte + int currentIndex = 0; + Buffer.BlockCopy(version, 0, encryptedColumnEncryptionKey, currentIndex, version.Length); + currentIndex += version.Length; + + // Copy key path length + Buffer.BlockCopy(keyPathLength, 0, encryptedColumnEncryptionKey, currentIndex, keyPathLength.Length); + currentIndex += keyPathLength.Length; + + // Copy ciphertext length + Buffer.BlockCopy(cipherTextLength, 0, encryptedColumnEncryptionKey, currentIndex, cipherTextLength.Length); + currentIndex += cipherTextLength.Length; + + // Copy key path + Buffer.BlockCopy(masterKeyPathBytes, 0, encryptedColumnEncryptionKey, currentIndex, masterKeyPathBytes.Length); + currentIndex += masterKeyPathBytes.Length; + + // Copy ciphertext + Buffer.BlockCopy(cipherText, 0, encryptedColumnEncryptionKey, currentIndex, cipherText.Length); + currentIndex += cipherText.Length; + + // copy the signature + Buffer.BlockCopy(signedHash, 0, encryptedColumnEncryptionKey, currentIndex, signedHash.Length); + + return encryptedColumnEncryptionKey; + } + + /// + /// This function validates that the encryption algorithm is RSA_OAEP and if it is not, + /// then throws an exception + /// + /// Asymmetric key encryptio algorithm + /// Indicates if ADO.NET calls or the customer calls the API + private void ValidateEncryptionAlgorithm(string encryptionAlgorithm, bool isSystemOp) + { + // This validates that the encryption algorithm is RSA_OAEP + if (null == encryptionAlgorithm) + { + throw SQL.NullKeyEncryptionAlgorithm(isSystemOp); + } + + if (string.Equals(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, StringComparison.OrdinalIgnoreCase) != true) + { + throw SQL.InvalidKeyEncryptionAlgorithm(encryptionAlgorithm, RSAEncryptionAlgorithmWithOAEP, isSystemOp); + } + } + + + /// + /// Checks if the CSP key path is Empty or Null (and raises exception if they are). + /// + /// CSP key path. + /// Indicates if ADO.NET calls or the customer calls the API + private void ValidateNonEmptyCSPKeyPath(string masterKeyPath, bool isSystemOp) + { + if (string.IsNullOrWhiteSpace(masterKeyPath)) + { + if (null == masterKeyPath) + { + throw SQL.NullCspKeyPath(isSystemOp); + } + else + { + throw SQL.InvalidCspPath(masterKeyPath, isSystemOp); + } + } + } + + /// + /// Encrypt the text using specified CSP key. + /// + /// CSP key path. + /// Encryption Algorithm. + /// Plain text Column Encryption Key. + /// Returns an encrypted blob or throws an exception if there are any errors. + private byte[] RSAEncrypt(RSACryptoServiceProvider rscp, byte[] columnEncryptionKey) + { + Debug.Assert(columnEncryptionKey != null); + Debug.Assert(rscp != null); + + return rscp.Encrypt(columnEncryptionKey, fOAEP: true); + } + + /// + /// Decrypt the text using specified CSP key. + /// + /// CSP key url. + /// Encryption Algorithm. + /// Encrypted Column Encryption Key. + /// Returns the decrypted plaintext Column Encryption Key or throws an exception if there are any errors. + private byte[] RSADecrypt(RSACryptoServiceProvider rscp, byte[] encryptedColumnEncryptionKey) + { + Debug.Assert((encryptedColumnEncryptionKey != null) && (encryptedColumnEncryptionKey.Length != 0)); + Debug.Assert(rscp != null); + + return rscp.Decrypt(encryptedColumnEncryptionKey, fOAEP: true); + } + + /// + /// Generates signature based on RSA PKCS#v1.5 scheme using a specified CSP Key URL. + /// + /// Text to sign. + /// RSA Provider with a given key + /// Signature + private byte[] RSASignHashedData(byte[] dataToSign, RSACryptoServiceProvider rscp) + { + Debug.Assert((dataToSign != null) && (dataToSign.Length != 0)); + Debug.Assert(rscp != null); + + return rscp.SignData(dataToSign, HashingAlgorithm); + } + + /// + /// Verifies the given RSA PKCSv1.5 signature. + /// + /// + /// + /// RSA Provider with a given key + /// true if signature is valid, false if it is not valid + private bool RSAVerifySignature(byte[] dataToVerify, byte[] signature, RSACryptoServiceProvider rscp) + { + Debug.Assert((dataToVerify != null) && (dataToVerify.Length != 0)); + Debug.Assert((signature != null) && (signature.Length != 0)); + Debug.Assert(rscp != null); + + return rscp.VerifyData(dataToVerify, HashingAlgorithm, signature); + } + + /// + /// Gets the public Key size in bytes + /// + /// RSA Provider with a given key + /// Key size in bytes + private int GetKeySize(RSACryptoServiceProvider rscp) + { + Debug.Assert(rscp != null); + + return rscp.KeySize / 8; + } + + /// + /// Creates a RSACryptoServiceProvider from the given key path which contains both CSP name and key name + /// + /// key path in the format of [CAPI provider name]\[key name] + /// Indicates if ADO.NET calls or the customer calls the API + /// + private RSACryptoServiceProvider CreateRSACryptoProvider(string keyPath, bool isSystemOp) + { + // Get CNGProvider and the KeyID + string cspProviderName; + string keyName; + GetCspProviderAndKeyName(keyPath, isSystemOp, out cspProviderName, out keyName); + + // Verify the existence of CSP and then get the provider type + int providerType = GetProviderType(cspProviderName, keyPath, isSystemOp); + + // Create a new instance of CspParameters for an RSA container. + CspParameters cspParams = new CspParameters(providerType, cspProviderName, keyName); + cspParams.Flags = CspProviderFlags.UseExistingKey; + + RSACryptoServiceProvider rscp = null; + + try + { + //Create a new instance of RSACryptoServiceProvider + rscp = new RSACryptoServiceProvider(cspParams); + } + catch (CryptographicException e) + { + const int KEYSETDOESNOTEXIST = -2146893802; + if (e.HResult == KEYSETDOESNOTEXIST) + { + // Key does not exist + throw SQL.InvalidCspKeyIdentifier(keyName, keyPath, isSystemOp); + } + else + { + // bubble up the exception + throw; + } + } + + return rscp; + } + + /// + /// Extracts the CSP provider name and key name from the given key path + /// + /// key path in the format of [CSP provider name]\[key name] + /// Indicates if ADO.NET calls or the customer calls the API + /// output containing the CSP provider name + /// output containing the key name + private void GetCspProviderAndKeyName(string keyPath, bool isSystemOp, out string cspProviderName, out string keyIdentifier) + { + int indexOfSlash = keyPath.IndexOf(@"/"); + if (indexOfSlash == -1) + { + throw SQL.InvalidCspPath(keyPath, isSystemOp); + } + + cspProviderName = keyPath.Substring(0, indexOfSlash); + keyIdentifier = keyPath.Substring(indexOfSlash + 1, keyPath.Length - (indexOfSlash + 1)); + + if (cspProviderName.Length == 0) + { + throw SQL.EmptyCspName(keyPath, isSystemOp); + } + + if (keyIdentifier.Length == 0) + { + throw SQL.EmptyCspKeyId(keyPath, isSystemOp); + } + } + + /// + /// Gets the provider type from a given CAPI provider name + /// + /// CAPI provider name + /// key path in the format of [CSP provider name]\[key name] + /// Indicates if ADO.NET calls or the customer calls the API + /// + private int GetProviderType(string providerName, string keyPath, bool isSystemOp) + { + string keyName = String.Format(@"SOFTWARE\Microsoft\Cryptography\Defaults\Provider\{0}", providerName); + RegistryKey key = Registry.LocalMachine.OpenSubKey(keyName); + if (key == null) + { + throw SQL.InvalidCspName(providerName, keyPath, isSystemOp); + } + + int providerType = (int)key.GetValue(@"Type"); + key.Close(); + + return providerType; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionKeyStoreProvider.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionKeyStoreProvider.cs new file mode 100644 index 0000000000..afcf970bc4 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlColumnEncryptionKeyStoreProvider.cs @@ -0,0 +1,39 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + + /// + /// Abstract base class for all column encryption Key Store providers. It exposes two functions + /// 1. DecryptColumnEncryptionKey - This is the function used by SqlClient under the covers to decrypt encrypted column encryption key blob. + /// 2. EncryptColumnEncryptionKey - This will be used by client tools that generate DDL for customers + /// + public abstract class SqlColumnEncryptionKeyStoreProvider + { + /// + /// This function must be implemented by the corresponding Key Store providers. This function should use an asymmetric key identified by the key path + /// and decrypt an encrypted column encryption key with a given encryption algorithm. + /// + /// Complete path of an asymmetric key. Path format is specific to a key store provider. + /// Asymmetric Key Encryption Algorithm + /// Encrypted Column Encryption Key + /// Plain text column encryption key + public abstract byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey); + + /// + /// This function must be implemented by the corresponding Key Store providers. This function should use an asymmetric key identified by a key path + /// and encrypt a plain text column encryption key with a given asymmetric key encryption algorithm. + /// + /// Complete path of an asymmetric key. Path format is specific to a key store provider. + /// Asymmetric Key Encryption Algorithm + /// Plain text column encryption key to be encrypted + /// Encrypted column encryption key + public abstract byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey); + } +} \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlCommand.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/SqlCommand.cs.REMOVED.git-id index 70f1b89d7b..cb4f707c15 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlCommand.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlCommand.cs.REMOVED.git-id @@ -1 +1 @@ -3079ff01518b29dae0a29e6e9b2b0d9efaeaa68e \ No newline at end of file +2e560dbf344a2a5ef4577863f3342dc13d2498de \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlCommandSet.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlCommandSet.cs index eaf2f2a88a..b15a5353bb 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlCommandSet.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlCommandSet.cs @@ -35,13 +35,15 @@ namespace System.Data.SqlClient { internal readonly SqlParameterCollection Parameters; internal readonly int ReturnParameterIndex; internal readonly CommandType CmdType; + internal readonly SqlCommandColumnEncryptionSetting ColumnEncryptionSetting; - internal LocalCommand(string commandText, SqlParameterCollection parameters, int returnParameterIndex, CommandType cmdType) { + internal LocalCommand(string commandText, SqlParameterCollection parameters, int returnParameterIndex, CommandType cmdType, SqlCommandColumnEncryptionSetting columnEncryptionSetting) { Debug.Assert(0 <= commandText.Length, "no text"); this.CommandText = commandText; this.Parameters = parameters; this.ReturnParameterIndex = returnParameterIndex; this.CmdType = cmdType; + this.ColumnEncryptionSetting = columnEncryptionSetting; } } @@ -197,7 +199,7 @@ namespace System.Data.SqlClient { } } } - LocalCommand cmd = new LocalCommand(cmdText, parameters, returnParameterIndex, command.CommandType); + LocalCommand cmd = new LocalCommand(cmdText, parameters, returnParameterIndex, command.CommandType, command.ColumnEncryptionSetting); CommandList.Add(cmd); } @@ -260,7 +262,7 @@ namespace System.Data.SqlClient { BatchCommand.Parameters.Clear(); for (int ii = 0 ; ii < _commandList.Count; ii++) { LocalCommand cmd = _commandList[ii]; - BatchCommand.AddBatchCommand(cmd.CommandText, cmd.Parameters, cmd.CmdType); + BatchCommand.AddBatchCommand(cmd.CommandText, cmd.Parameters, cmd.CmdType, cmd.ColumnEncryptionSetting); } return BatchCommand.ExecuteBatchRPCCommand(); } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs deleted file mode 100644 index ac04c011fb..0000000000 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs +++ /dev/null @@ -1,2248 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// [....] -// [....] -//------------------------------------------------------------------------------ - -[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Data.DataSetExtensions, PublicKey="+AssemblyRef.EcmaPublicKeyFull)] // DevDiv Bugs 92166 - -namespace System.Data.SqlClient -{ - using System; - using System.Collections; - using System.Configuration.Assemblies; - using System.ComponentModel; - using System.Data; - using System.Data.Common; - using System.Data.ProviderBase; - using System.Data.Sql; - using System.Data.SqlTypes; - using System.Diagnostics; - using System.Globalization; - using System.IO; - using System.Runtime.CompilerServices; - using System.Runtime.ConstrainedExecution; - using System.Runtime.InteropServices; - using System.Runtime.Remoting; - using System.Runtime.Serialization.Formatters; - using System.Text; - using System.Threading; - using System.Threading.Tasks; - using System.Security; - using System.Security.Permissions; - using System.Reflection; - using System.Runtime.Versioning; - - using Microsoft.SqlServer.Server; - using System.Security.Principal; - using System.Diagnostics.CodeAnalysis; - - [DefaultEvent("InfoMessage")] - public sealed partial class SqlConnection: DbConnection, ICloneable { - - static private readonly object EventInfoMessage = new object(); - - private SqlDebugContext _sdc; // SQL Debugging support - - private bool _AsyncCommandInProgress; - - // SQLStatistics support - internal SqlStatistics _statistics; - private bool _collectstats; - - private bool _fireInfoMessageEventOnUserErrors; // False by default - - // root task associated with current async invocation - Tuple, Task> _currentCompletion; - - private SqlCredential _credential; // SQL authentication password stored in SecureString - private string _connectionString; - private int _connectRetryCount; - - // connection resiliency - private object _reconnectLock = new object(); - internal Task _currentReconnectionTask; - private Task _asyncWaitingForReconnection; // current async task waiting for reconnection in non-MARS connections - private Guid _originalConnectionId = Guid.Empty; - private CancellationTokenSource _reconnectionCancellationSource; - internal SessionData _recoverySessionData; - internal WindowsIdentity _lastIdentity; - internal WindowsIdentity _impersonateIdentity; - private int _reconnectCount; - - public SqlConnection(string connectionString) : this(connectionString, null) { - } - - public SqlConnection(string connectionString, SqlCredential credential) : this() { - ConnectionString = connectionString; // setting connection string first so that ConnectionOption is available - if (credential != null) - { - // The following checks are necessary as setting Credential property will call CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential - // CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential it will throw InvalidOperationException rather than Arguemtn exception - // Need to call setter on Credential property rather than setting _credential directly as pool groups need to be checked - SqlConnectionString connectionOptions = (SqlConnectionString) ConnectionOptions; - if (UsesClearUserIdOrPassword(connectionOptions)) - { - throw ADP.InvalidMixedArgumentOfSecureAndClearCredential(); - } - - if (UsesIntegratedSecurity(connectionOptions)) - { - throw ADP.InvalidMixedArgumentOfSecureCredentialAndIntegratedSecurity(); - } - - if (UsesContextConnection(connectionOptions)) - { - throw ADP.InvalidMixedArgumentOfSecureCredentialAndContextConnection(); - } - - Credential = credential; - } - // else - // credential == null: we should not set "Credential" as this will do additional validation check and - // checking pool groups which is not necessary. All necessary operation is already done by calling "ConnectionString = connectionString" - CacheConnectionStringProperties(); - } - - private SqlConnection(SqlConnection connection) { // Clone - GC.SuppressFinalize(this); - CopyFrom(connection); - _connectionString = connection._connectionString; - if (connection._credential != null) - { - SecureString password = connection._credential.Password.Copy(); - password.MakeReadOnly(); - _credential = new SqlCredential(connection._credential.UserId, password); - } - CacheConnectionStringProperties(); - } - - // This method will be called once connection string is set or changed. - private void CacheConnectionStringProperties() { - SqlConnectionString connString = ConnectionOptions as SqlConnectionString; - if (connString != null) { - _connectRetryCount = connString.ConnectRetryCount; - } - } - - // - // PUBLIC PROPERTIES - // - - // used to start/stop collection of statistics data and do verify the current state - // - // devnote: start/stop should not performed using a property since it requires execution of code - // - // start statistics - // set the internal flag (_statisticsEnabled) to true. - // Create a new SqlStatistics object if not already there. - // connect the parser to the object. - // if there is no parser at this time we need to connect it after creation. - // - - [ - DefaultValue(false), - ResCategoryAttribute(Res.DataCategory_Data), - ResDescriptionAttribute(Res.SqlConnection_StatisticsEnabled), - ] - public bool StatisticsEnabled { - get { - return (_collectstats); - } - set { - if (IsContextConnection) { - if (value) { - throw SQL.NotAvailableOnContextConnection(); - } - } - else { - if (value) { - // start - if (ConnectionState.Open == State) { - if (null == _statistics) { - _statistics = new SqlStatistics(); - ADP.TimerCurrent(out _statistics._openTimestamp); - } - // set statistics on the parser - // update timestamp; - Debug.Assert(Parser != null, "Where's the parser?"); - Parser.Statistics = _statistics; - } - } - else { - // stop - if (null != _statistics) { - if (ConnectionState.Open == State) { - // remove statistics from parser - // update timestamp; - TdsParser parser = Parser; - Debug.Assert(parser != null, "Where's the parser?"); - parser.Statistics = null; - ADP.TimerCurrent(out _statistics._closeTimestamp); - } - } - } - this._collectstats = value; - } - } - } - - internal bool AsyncCommandInProgress { - get { - return (_AsyncCommandInProgress); - } - [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] - set { - _AsyncCommandInProgress = value; - } - } - - internal bool IsContextConnection { - get { - SqlConnectionString opt = (SqlConnectionString)ConnectionOptions; - return UsesContextConnection(opt); - } - } - - // Is this connection is a Context Connection? - private bool UsesContextConnection(SqlConnectionString opt) - { - return opt != null ? opt.ContextConnection : false; - } - - // Does this connection uses Integrated Security? - private bool UsesIntegratedSecurity(SqlConnectionString opt) { - return opt != null ? opt.IntegratedSecurity : false; - } - - // Does this connection uses old style of clear userID or Password in connection string? - private bool UsesClearUserIdOrPassword(SqlConnectionString opt) { - bool result = false; - if (null != opt) { - result = (!ADP.IsEmpty(opt.UserID) || !ADP.IsEmpty(opt.Password)); - } - return result; - } - - internal SqlConnectionString.TransactionBindingEnum TransactionBinding { - get { - return ((SqlConnectionString)ConnectionOptions).TransactionBinding; - } - } - - internal SqlConnectionString.TypeSystem TypeSystem { - get { - return ((SqlConnectionString)ConnectionOptions).TypeSystemVersion; - } - } - - internal Version TypeSystemAssemblyVersion { - get { - return ((SqlConnectionString)ConnectionOptions).TypeSystemAssemblyVersion; - } - } - - internal int ConnectRetryInterval { - get { - return ((SqlConnectionString)ConnectionOptions).ConnectRetryInterval; - } - } - - override protected DbProviderFactory DbProviderFactory { - get { - return SqlClientFactory.Instance; - } - } - - [ - DefaultValue(""), -#pragma warning disable 618 // ignore obsolete warning about RecommendedAsConfigurable to use SettingsBindableAttribute - RecommendedAsConfigurable(true), -#pragma warning restore 618 - SettingsBindableAttribute(true), - RefreshProperties(RefreshProperties.All), - ResCategoryAttribute(Res.DataCategory_Data), - Editor("Microsoft.VSDesigner.Data.SQL.Design.SqlConnectionStringEditor, " + AssemblyRef.MicrosoftVSDesigner, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing), - ResDescriptionAttribute(Res.SqlConnection_ConnectionString), - ] - override public string ConnectionString { - get { - return ConnectionString_Get(); - } - set { - if (_credential != null) - { - SqlConnectionString connectionOptions = new SqlConnectionString(value); - CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(connectionOptions); - } - - ConnectionString_Set(new SqlConnectionPoolKey(value, _credential)); - _connectionString = value; // Change _connectionString value only after value is validated - CacheConnectionStringProperties(); - } - } - - [ - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.SqlConnection_ConnectionTimeout), - ] - override public int ConnectionTimeout { - get { - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return ((null != constr) ? constr.ConnectTimeout : SqlConnectionString.DEFAULT.Connect_Timeout); - } - } - - [ - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.SqlConnection_Database), - ] - override public string Database { - // if the connection is open, we need to ask the inner connection what it's - // current catalog is because it may have gotten changed, otherwise we can - // just return what the connection string had. - get { - SqlInternalConnection innerConnection = (InnerConnection as SqlInternalConnection); - string result; - - if (null != innerConnection) { - result = innerConnection.CurrentDatabase; - } - else { - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = ((null != constr) ? constr.InitialCatalog : SqlConnectionString.DEFAULT.Initial_Catalog); - } - return result; - } - } - - [ - Browsable(true), - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.SqlConnection_DataSource), - ] - override public string DataSource { - get { - SqlInternalConnection innerConnection = (InnerConnection as SqlInternalConnection); - string result; - - if (null != innerConnection) { - result = innerConnection.CurrentDataSource; - } - else { - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = ((null != constr) ? constr.DataSource : SqlConnectionString.DEFAULT.Data_Source); - } - return result; - } - } - - [ - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResCategoryAttribute(Res.DataCategory_Data), - ResDescriptionAttribute(Res.SqlConnection_PacketSize), - ] - public int PacketSize { - // if the connection is open, we need to ask the inner connection what it's - // current packet size is because it may have gotten changed, otherwise we - // can just return what the connection string had. - get { - if (IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - - SqlInternalConnectionTds innerConnection = (InnerConnection as SqlInternalConnectionTds); - int result; - - if (null != innerConnection) { - result = innerConnection.PacketSize; - } - else { - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - result = ((null != constr) ? constr.PacketSize : SqlConnectionString.DEFAULT.Packet_Size); - } - return result; - } - } - - [ - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResCategoryAttribute(Res.DataCategory_Data), - ResDescriptionAttribute(Res.SqlConnection_ClientConnectionId), - ] - public Guid ClientConnectionId { - get { - - SqlInternalConnectionTds innerConnection = (InnerConnection as SqlInternalConnectionTds); - - if (null != innerConnection) { - return innerConnection.ClientConnectionId; - } - else { - Task reconnectTask = _currentReconnectionTask; - if (reconnectTask != null && !reconnectTask.IsCompleted) { - return _originalConnectionId; - } - return Guid.Empty; - } - } - } - - [ - Browsable(false), - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.SqlConnection_ServerVersion), - ] - override public string ServerVersion { - get { - return GetOpenConnection().ServerVersion; - } - } - - [ - Browsable(false), - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.DbConnection_State), - ] - override public ConnectionState State { - get { - Task reconnectTask=_currentReconnectionTask; - if (reconnectTask != null && !reconnectTask.IsCompleted) { - return ConnectionState.Open; - } - return InnerConnection.State; - } - } - - - internal SqlStatistics Statistics { - get { - return _statistics; - } - } - - [ - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResCategoryAttribute(Res.DataCategory_Data), - ResDescriptionAttribute(Res.SqlConnection_WorkstationId), - ] - public string WorkstationId { - get { - if (IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - - // If not supplied by the user, the default value is the MachineName - // Note: In Longhorn you'll be able to rename a machine without - // rebooting. Therefore, don't cache this machine name. - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - string result = ((null != constr) ? constr.WorkstationId : null); - if (null == result) { - // getting machine name requires Environment.Permission - // user must have that permission in order to retrieve this - result = Environment.MachineName; - } - return result; - } - } - - // SqlCredential: Pair User Id and password in SecureString which are to be used for SQL authentication - [ - Browsable(false), - DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), - ResDescriptionAttribute(Res.SqlConnection_Credential), - ] - public SqlCredential Credential - { - get - { - SqlCredential result = _credential; - - // When a connection is connecting or is ever opened, make credential available only if "Persist Security Info" is set to true - // otherwise, return null - SqlConnectionString connectionOptions = (SqlConnectionString) UserConnectionOptions; - if (InnerConnection.ShouldHidePassword && connectionOptions != null && !connectionOptions.PersistSecurityInfo) - { - result = null; - } - - return result; - } - - set - { - // If a connection is connecting or is ever opened, user id/password cannot be set - if (!InnerConnection.AllowSetConnectionString) - { - throw ADP.OpenConnectionPropertySet("Credential", InnerConnection.State); - } - - // check if the usage of credential has any conflict with the keys used in connection string - if (value != null) - { - CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential((SqlConnectionString) ConnectionOptions); - } - - _credential = value; - - // Need to call ConnectionString_Set to do proper pool group check - ConnectionString_Set(new SqlConnectionPoolKey(_connectionString, _credential)); - } - } - - // CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential: check if the usage of credential has any conflict - // with the keys used in connection string - // If there is any conflict, it throws InvalidOperationException - // This is to be used setter of ConnectionString and Credential properties - private void CheckAndThrowOnInvalidCombinationOfConnectionStringAndSqlCredential(SqlConnectionString connectionOptions) - { - if (UsesClearUserIdOrPassword(connectionOptions)) - { - throw ADP.InvalidMixedUsageOfSecureAndClearCredential(); - } - - if (UsesIntegratedSecurity(connectionOptions)) - { - throw ADP.InvalidMixedUsageOfSecureCredentialAndIntegratedSecurity(); - } - - if (UsesContextConnection(connectionOptions)) - { - throw ADP.InvalidMixedArgumentOfSecureCredentialAndContextConnection(); - } - } - - // - // PUBLIC EVENTS - // - - [ - ResCategoryAttribute(Res.DataCategory_InfoMessage), - ResDescriptionAttribute(Res.DbConnection_InfoMessage), - ] - public event SqlInfoMessageEventHandler InfoMessage { - add { - Events.AddHandler(EventInfoMessage, value); - } - remove { - Events.RemoveHandler(EventInfoMessage, value); - } - } - - public bool FireInfoMessageEventOnUserErrors { - get { - return _fireInfoMessageEventOnUserErrors; - } - set { - _fireInfoMessageEventOnUserErrors = value; - } - } - - // Approx. number of times that the internal connection has been reconnected - internal int ReconnectCount { - get { - return _reconnectCount; - } - } - - // - // PUBLIC METHODS - // - - new public SqlTransaction BeginTransaction() { - // this is just a delegate. The actual method tracks executiontime - return BeginTransaction(IsolationLevel.Unspecified, null); - } - - new public SqlTransaction BeginTransaction(IsolationLevel iso) { - // this is just a delegate. The actual method tracks executiontime - return BeginTransaction(iso, null); - } - - public SqlTransaction BeginTransaction(string transactionName) { - // Use transaction names only on the outermost pair of nested - // BEGIN...COMMIT or BEGIN...ROLLBACK statements. Transaction names - // are ignored for nested BEGIN's. The only way to rollback a nested - // transaction is to have a save point from a SAVE TRANSACTION call. - return BeginTransaction(IsolationLevel.Unspecified, transactionName); - } - - // suppress this message - we cannot use SafeHandle here. Also, see notes in the code (VSTFDEVDIV# 560355) - [SuppressMessage("Microsoft.Reliability", "CA2004:RemoveCallsToGCKeepAlive")] - override protected DbTransaction BeginDbTransaction(IsolationLevel isolationLevel) { - IntPtr hscp; - - Bid.ScopeEnter(out hscp, " %d#, isolationLevel=%d{ds.IsolationLevel}", ObjectID, (int)isolationLevel); - try { - - DbTransaction transaction = BeginTransaction(isolationLevel); - - // VSTFDEVDIV# 560355 - InnerConnection doesn't maintain a ref on the outer connection (this) and - // subsequently leaves open the possibility that the outer connection could be GC'ed before the SqlTransaction - // is fully hooked up (leaving a DbTransaction with a null connection property). Ensure that this is reachable - // until the completion of BeginTransaction with KeepAlive - GC.KeepAlive(this); - - return transaction; - } - finally { - Bid.ScopeLeave(ref hscp); - } - } - - public SqlTransaction BeginTransaction(IsolationLevel iso, string transactionName) { - WaitForPendingReconnection(); - SqlStatistics statistics = null; - IntPtr hscp; - string xactName = ADP.IsEmpty(transactionName)? "None" : transactionName; - Bid.ScopeEnter(out hscp, " %d#, iso=%d{ds.IsolationLevel}, transactionName='%ls'\n", ObjectID, (int)iso, - xactName); - - try { - statistics = SqlStatistics.StartTimer(Statistics); - - // NOTE: we used to throw an exception if the transaction name was empty - // (see MDAC 50292) but that was incorrect because we have a BeginTransaction - // method that doesn't have a transactionName argument. - SqlTransaction transaction; - bool isFirstAttempt = true; - do { - transaction = GetOpenConnection().BeginSqlTransaction(iso, transactionName, isFirstAttempt); // do not reconnect twice - Debug.Assert(isFirstAttempt || !transaction.InternalTransaction.ConnectionHasBeenRestored, "Restored connection on non-first attempt"); - isFirstAttempt = false; - } while (transaction.InternalTransaction.ConnectionHasBeenRestored); - - - // SQLBU 503873 The GetOpenConnection line above doesn't keep a ref on the outer connection (this), - // and it could be collected before the inner connection can hook it to the transaction, resulting in - // a transaction with a null connection property. Use GC.KeepAlive to ensure this doesn't happen. - GC.KeepAlive(this); - - return transaction; - } - finally { - Bid.ScopeLeave(ref hscp); - SqlStatistics.StopTimer(statistics); - } - } - - override public void ChangeDatabase(string database) { - SqlStatistics statistics = null; - RepairInnerConnection(); - Bid.CorrelationTrace(" ObjectID%d#, ActivityID %ls\n", ObjectID); - TdsParser bestEffortCleanupTarget = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - - RuntimeHelpers.PrepareConstrainedRegions(); - try { - tdsReliabilitySection.Start(); -#else - { -#endif //DEBUG - bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(this); - statistics = SqlStatistics.StartTimer(Statistics); - InnerConnection.ChangeDatabase(database); - } -#if DEBUG - finally { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - } - catch (System.OutOfMemoryException e) { - Abort(e); - throw; - } - catch (System.StackOverflowException e) { - Abort(e); - throw; - } - catch (System.Threading.ThreadAbortException e) { - Abort(e); - SqlInternalConnection.BestEffortCleanup(bestEffortCleanupTarget); - throw; - } - finally { - SqlStatistics.StopTimer(statistics); - } - } - - static public void ClearAllPools() { - (new SqlClientPermission(PermissionState.Unrestricted)).Demand(); - SqlConnectionFactory.SingletonInstance.ClearAllPools(); - } - - static public void ClearPool(SqlConnection connection) { - ADP.CheckArgumentNull(connection, "connection"); - - DbConnectionOptions connectionOptions = connection.UserConnectionOptions; - if (null != connectionOptions) { - connectionOptions.DemandPermission(); - if (connection.IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - SqlConnectionFactory.SingletonInstance.ClearPool(connection); - } - } - - object ICloneable.Clone() { - SqlConnection clone = new SqlConnection(this); - Bid.Trace(" %d#, clone=%d#\n", ObjectID, clone.ObjectID); - return clone; - } - - void CloseInnerConnection() { - // CloseConnection() now handles the lock - - // The SqlInternalConnectionTds is set to OpenBusy during close, once this happens the cast below will fail and - // the command will no longer be cancelable. It might be desirable to be able to cancel the close opperation, but this is - // outside of the scope of Whidbey RTM. See (SqlCommand::Cancel) for other lock. - InnerConnection.CloseConnection(this, ConnectionFactory); - } - - override public void Close() { - IntPtr hscp; - Bid.ScopeEnter(out hscp, " %d#" , ObjectID); - Bid.CorrelationTrace(" ObjectID%d#, ActivityID %ls\n", ObjectID); - try { - SqlStatistics statistics = null; - - TdsParser bestEffortCleanupTarget = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - - RuntimeHelpers.PrepareConstrainedRegions(); - try { - tdsReliabilitySection.Start(); -#else - { -#endif //DEBUG - bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(this); - statistics = SqlStatistics.StartTimer(Statistics); - - Task reconnectTask = _currentReconnectionTask; - if (reconnectTask != null && !reconnectTask.IsCompleted) { - CancellationTokenSource cts = _reconnectionCancellationSource; - if (cts != null) { - cts.Cancel(); - } - AsyncHelper.WaitForCompletion(reconnectTask, 0, null, rethrowExceptions: false); // we do not need to deal with possible exceptions in reconnection - if (State != ConnectionState.Open) {// if we cancelled before the connection was opened - OnStateChange(DbConnectionInternal.StateChangeClosed); - } - } - CancelOpenAndWait(); - CloseInnerConnection(); - GC.SuppressFinalize(this); - - if (null != Statistics) { - ADP.TimerCurrent(out _statistics._closeTimestamp); - } - } - #if DEBUG - finally { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - } - catch (System.OutOfMemoryException e) { - Abort(e); - throw; - } - catch (System.StackOverflowException e) { - Abort(e); - throw; - } - catch (System.Threading.ThreadAbortException e) { - Abort(e); - SqlInternalConnection.BestEffortCleanup(bestEffortCleanupTarget); - throw; - } - finally { - SqlStatistics.StopTimer(statistics); - } - } - finally { - SqlDebugContext sdc = _sdc; - _sdc = null; - Bid.ScopeLeave(ref hscp); - if (sdc != null) { - sdc.Dispose(); - } - } - } - - new public SqlCommand CreateCommand() { - return new SqlCommand(null, this); - } - - private void DisposeMe(bool disposing) { // MDAC 65459 - _credential = null; // clear credential here rather than in IDisposable.Dispose as this is only specific to SqlConnection only - // IDisposable.Dispose is generated code from a template and used by other providers as well - - if (!disposing) { - // DevDiv2 Bug 457934:SQLConnection leaks when not disposed - // http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/457934 - // For non-pooled connections we need to make sure that if the SqlConnection was not closed, then we release the GCHandle on the stateObject to allow it to be GCed - // For pooled connections, we will rely on the pool reclaiming the connection - var innerConnection = (InnerConnection as SqlInternalConnectionTds); - if ((innerConnection != null) && (!innerConnection.ConnectionOptions.Pooling)) { - var parser = innerConnection.Parser; - if ((parser != null) && (parser._physicalStateObj != null)) { - parser._physicalStateObj.DecrementPendingCallbacks(release: false); - } - } - } - } - -#if !MOBILE - public void EnlistDistributedTransaction(System.EnterpriseServices.ITransaction transaction) { - if (IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - - EnlistDistributedTransactionHelper(transaction); - } -#endif - - override public void Open() { - IntPtr hscp; - Bid.ScopeEnter(out hscp, " %d#", ObjectID) ; - Bid.CorrelationTrace(" ObjectID%d#, ActivityID %ls\n", ObjectID); - - try { - if (StatisticsEnabled) { - if (null == _statistics) { - _statistics = new SqlStatistics(); - } - else { - _statistics.ContinueOnNewConnection(); - } - } - - SqlStatistics statistics = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { - statistics = SqlStatistics.StartTimer(Statistics); - - if (!TryOpen(null)) { - throw ADP.InternalError(ADP.InternalErrorCode.SynchronousConnectReturnedPending); - } - } - finally { - SqlStatistics.StopTimer(statistics); - } - } - finally { - Bid.ScopeLeave(ref hscp); - } - } - - internal void RegisterWaitingForReconnect(Task waitingTask) { - if (((SqlConnectionString)ConnectionOptions).MARS) { - return; - } - Interlocked.CompareExchange(ref _asyncWaitingForReconnection, waitingTask, null); - if (_asyncWaitingForReconnection != waitingTask) { // somebody else managed to register - throw SQL.MARSUnspportedOnConnection(); - } - } - - private async Task ReconnectAsync(int timeout) { - try { - long commandTimeoutExpiration = 0; - if (timeout > 0) { - commandTimeoutExpiration = ADP.TimerCurrent() + ADP.TimerFromSeconds(timeout); - } - CancellationTokenSource cts = new CancellationTokenSource(); - _reconnectionCancellationSource = cts; - CancellationToken ctoken = cts.Token; - int retryCount = _connectRetryCount; // take a snapshot: could be changed by modifying the connection string - for (int attempt = 0; attempt < retryCount; attempt++) { - if (ctoken.IsCancellationRequested) { - Bid.Trace(" Orginal ClientConnectionID %ls - reconnection cancelled\n", _originalConnectionId.ToString()); - return; - } - try { - _impersonateIdentity = _lastIdentity; - try { - ForceNewConnection = true; - await OpenAsync(ctoken).ConfigureAwait(false); - // On success, increment the reconnect count - we don't really care if it rolls over since it is approx. - _reconnectCount = unchecked(_reconnectCount + 1); -#if DEBUG - Debug.Assert(_recoverySessionData._debugReconnectDataApplied, "Reconnect data was not applied !"); -#endif - } - finally { - _impersonateIdentity = null; - ForceNewConnection = false; - } - Bid.Trace(" Reconnection suceeded. ClientConnectionID %ls -> %ls \n", _originalConnectionId.ToString(), ClientConnectionId.ToString()); - return; - } - catch (SqlException e) { - Bid.Trace(" Orginal ClientConnectionID %ls - reconnection attempt failed error %ls\n", _originalConnectionId.ToString(), e.Message); - if (attempt == retryCount - 1) { - Bid.Trace(" Orginal ClientConnectionID %ls - give up reconnection\n", _originalConnectionId.ToString()); - throw SQL.CR_AllAttemptsFailed(e, _originalConnectionId); - } - if (timeout > 0 && ADP.TimerRemaining(commandTimeoutExpiration) < ADP.TimerFromSeconds(ConnectRetryInterval)) { - throw SQL.CR_NextAttemptWillExceedQueryTimeout(e, _originalConnectionId); - } - } - await Task.Delay(1000 * ConnectRetryInterval, ctoken).ConfigureAwait(false); - } - } - finally { - _recoverySessionData = null; - _supressStateChangeForReconnection = false; - } - Debug.Assert(false, "Should not reach this point"); - } - - internal Task ValidateAndReconnect(Action beforeDisconnect, int timeout) { - Task runningReconnect = _currentReconnectionTask; - // This loop in the end will return not completed reconnect task or null - while (runningReconnect != null && runningReconnect.IsCompleted) { - // clean current reconnect task (if it is the same one we checked - Interlocked.CompareExchange(ref _currentReconnectionTask, null, runningReconnect); - // make sure nobody started new task (if which case we did not clean it) - runningReconnect = _currentReconnectionTask; - } - if (runningReconnect == null) { - if (_connectRetryCount > 0) { - SqlInternalConnectionTds tdsConn = GetOpenTdsConnection(); - if (tdsConn._sessionRecoveryAcknowledged) { - TdsParserStateObject stateObj = tdsConn.Parser._physicalStateObj; - if (!stateObj.ValidateSNIConnection()) { - if (tdsConn.Parser._sessionPool != null) { - if (tdsConn.Parser._sessionPool.ActiveSessionsCount > 0) { - // >1 MARS session - if (beforeDisconnect != null) { - beforeDisconnect(); - } - OnError(SQL.CR_UnrecoverableClient(ClientConnectionId), true, null); - } - } - SessionData cData = tdsConn.CurrentSessionData; - cData.AssertUnrecoverableStateCountIsCorrect(); - if (cData._unrecoverableStatesCount == 0) { - bool callDisconnect = false; - lock (_reconnectLock) { - tdsConn.CheckEnlistedTransactionBinding(); - runningReconnect = _currentReconnectionTask; // double check after obtaining the lock - if (runningReconnect == null) { - if (cData._unrecoverableStatesCount == 0) { // could change since the first check, but now is stable since connection is know to be broken - _originalConnectionId = ClientConnectionId; - Bid.Trace(" Connection ClientConnectionID %ls is invalid, reconnecting\n", _originalConnectionId.ToString()); - _recoverySessionData = cData; - if (beforeDisconnect != null) { - beforeDisconnect(); - } - try { - _supressStateChangeForReconnection = true; - tdsConn.DoomThisConnection(); - } - catch (SqlException) { - } - runningReconnect = Task.Run(() => ReconnectAsync(timeout)); - // if current reconnect is not null, somebody already started reconnection task - some kind of race condition - Debug.Assert(_currentReconnectionTask == null, "Duplicate reconnection tasks detected"); - _currentReconnectionTask = runningReconnect; - } - } - else { - callDisconnect = true; - } - } - if (callDisconnect && beforeDisconnect != null) { - beforeDisconnect(); - } - } - else { - if (beforeDisconnect != null) { - beforeDisconnect(); - } - OnError(SQL.CR_UnrecoverableServer(ClientConnectionId), true, null); - } - } // ValidateSNIConnection - } // sessionRecoverySupported - } // connectRetryCount>0 - } - else { // runningReconnect = null - if (beforeDisconnect != null) { - beforeDisconnect(); - } - } - return runningReconnect; - } - - // this is straightforward, but expensive method to do connection resiliency - it take locks and all prepartions as for TDS request - partial void RepairInnerConnection() { - WaitForPendingReconnection(); - if (_connectRetryCount == 0) { - return; - } - SqlInternalConnectionTds tdsConn = InnerConnection as SqlInternalConnectionTds; - if (tdsConn != null) { - tdsConn.ValidateConnectionForExecute(null); - tdsConn.GetSessionAndReconnectIfNeeded((SqlConnection)this); - } - } - - private void WaitForPendingReconnection() { - Task reconnectTask = _currentReconnectionTask; - if (reconnectTask != null && !reconnectTask.IsCompleted) { - AsyncHelper.WaitForCompletion(reconnectTask, 0, null, rethrowExceptions: false); - } - } - - void CancelOpenAndWait() - { - // copy from member to avoid changes by background thread - var completion = _currentCompletion; - if (completion != null) - { - completion.Item1.TrySetCanceled(); - ((IAsyncResult)completion.Item2).AsyncWaitHandle.WaitOne(); - } - Debug.Assert(_currentCompletion == null, "After waiting for an async call to complete, there should be no completion source"); - } - - public override Task OpenAsync(CancellationToken cancellationToken) { - IntPtr hscp; - Bid.ScopeEnter(out hscp, " %d#", ObjectID) ; - Bid.CorrelationTrace(" ObjectID%d#, ActivityID %ls\n", ObjectID); - try { - - if (StatisticsEnabled) { - if (null == _statistics) { - _statistics = new SqlStatistics(); - } - else { - _statistics.ContinueOnNewConnection(); - } - } - - SqlStatistics statistics = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { - statistics = SqlStatistics.StartTimer(Statistics); - - System.Transactions.Transaction transaction = ADP.GetCurrentTransaction(); - TaskCompletionSource completion = new TaskCompletionSource(transaction); - TaskCompletionSource result = new TaskCompletionSource(); - - if (cancellationToken.IsCancellationRequested) { - result.SetCanceled(); - return result.Task; - } - - if (IsContextConnection) { - // Async not supported on Context Connections - result.SetException(ADP.ExceptionWithStackTrace(SQL.NotAvailableOnContextConnection())); - return result.Task; - } - - bool completed; - - try { - completed = TryOpen(completion); - } - catch (Exception e) { - result.SetException(e); - return result.Task; - } - - if (completed) { - result.SetResult(null); - } - else { - CancellationTokenRegistration registration = new CancellationTokenRegistration(); - if (cancellationToken.CanBeCanceled) { - registration = cancellationToken.Register(() => completion.TrySetCanceled()); - } - OpenAsyncRetry retry = new OpenAsyncRetry(this, completion, result, registration); - _currentCompletion = new Tuple, Task>(completion, result.Task); - completion.Task.ContinueWith(retry.Retry, TaskScheduler.Default); - return result.Task; - } - - return result.Task; - } - finally { - SqlStatistics.StopTimer(statistics); - } - } - finally { - Bid.ScopeLeave(ref hscp); - } - } - - private class OpenAsyncRetry { - SqlConnection _parent; - TaskCompletionSource _retry; - TaskCompletionSource _result; - CancellationTokenRegistration _registration; - - public OpenAsyncRetry(SqlConnection parent, TaskCompletionSource retry, TaskCompletionSource result, CancellationTokenRegistration registration) { - _parent = parent; - _retry = retry; - _result = result; - _registration = registration; - } - - internal void Retry(Task retryTask) { - Bid.Trace(" %d#\n", _parent.ObjectID); - _registration.Dispose(); - try { - SqlStatistics statistics = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { - statistics = SqlStatistics.StartTimer(_parent.Statistics); - - if (retryTask.IsFaulted) { - Exception e = retryTask.Exception.InnerException; - _parent.CloseInnerConnection(); - _parent._currentCompletion = null; - _result.SetException(retryTask.Exception.InnerException); - } - else if (retryTask.IsCanceled) { - _parent.CloseInnerConnection(); - _parent._currentCompletion = null; - _result.SetCanceled(); - } - else { - bool result; - // protect continuation from ----s with close and cancel - lock (_parent.InnerConnection) { - result = _parent.TryOpen(_retry); - } - if (result) - { - _parent._currentCompletion = null; - _result.SetResult(null); - } - else { - _parent.CloseInnerConnection(); - _parent._currentCompletion = null; - _result.SetException(ADP.ExceptionWithStackTrace(ADP.InternalError(ADP.InternalErrorCode.CompletedConnectReturnedPending))); - } - } - } - finally { - SqlStatistics.StopTimer(statistics); - } - } - catch (Exception e) { - _parent.CloseInnerConnection(); - _parent._currentCompletion = null; - _result.SetException(e); - } - } - } - - private bool TryOpen(TaskCompletionSource retry) { - if (_impersonateIdentity != null) { - if (_impersonateIdentity.User == DbConnectionPoolIdentity.GetCurrentWindowsIdentity().User) { - return TryOpenInner(retry); - } - else { - using (WindowsImpersonationContext context = _impersonateIdentity.Impersonate()) { - return TryOpenInner(retry); - } - } - } - else { - if (this.UsesIntegratedSecurity((SqlConnectionString)ConnectionOptions)) { - _lastIdentity = DbConnectionPoolIdentity.GetCurrentWindowsIdentity(); - } - else { - _lastIdentity = null; - } - return TryOpenInner(retry); - } - } - - private bool TryOpenInner(TaskCompletionSource retry) { - TdsParser bestEffortCleanupTarget = null; - RuntimeHelpers.PrepareConstrainedRegions(); - try { -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - - RuntimeHelpers.PrepareConstrainedRegions(); - try { - tdsReliabilitySection.Start(); -#else - { -#endif //DEBUG - if (ForceNewConnection) { - if (!InnerConnection.TryReplaceConnection(this, ConnectionFactory, retry, UserConnectionOptions)) { - return false; - } - } - else { - if (!InnerConnection.TryOpenConnection(this, ConnectionFactory, retry, UserConnectionOptions)) { - return false; - } - } - // does not require GC.KeepAlive(this) because of OnStateChange - - // GetBestEffortCleanup must happen AFTER OpenConnection to get the correct target. - bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(this); - - var tdsInnerConnection = (InnerConnection as SqlInternalConnectionTds); - if (tdsInnerConnection == null) { - SqlInternalConnectionSmi innerConnection = (InnerConnection as SqlInternalConnectionSmi); - innerConnection.AutomaticEnlistment(); - } - else { - Debug.Assert(tdsInnerConnection.Parser != null, "Where's the parser?"); - - if (!tdsInnerConnection.ConnectionOptions.Pooling) { - // For non-pooled connections, we need to make sure that the finalizer does actually run to avoid leaking SNI handles - GC.ReRegisterForFinalize(this); - } - - if (StatisticsEnabled) { - ADP.TimerCurrent(out _statistics._openTimestamp); - tdsInnerConnection.Parser.Statistics = _statistics; - } - else { - tdsInnerConnection.Parser.Statistics = null; - _statistics = null; // in case of previous Open/Close/reset_CollectStats sequence - } - CompleteOpen(); - } - } -#if DEBUG - finally { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - } - catch (System.OutOfMemoryException e) { - Abort(e); - throw; - } - catch (System.StackOverflowException e) { - Abort(e); - throw; - } - catch (System.Threading.ThreadAbortException e) { - Abort(e); - SqlInternalConnection.BestEffortCleanup(bestEffortCleanupTarget); - throw; - } - - return true; - } - - - // - // INTERNAL PROPERTIES - // - - internal bool HasLocalTransaction { - get { - return GetOpenConnection().HasLocalTransaction; - } - } - - internal bool HasLocalTransactionFromAPI { - get { - Task reconnectTask = _currentReconnectionTask; - if (reconnectTask != null && !reconnectTask.IsCompleted) { - return false; //we will not go into reconnection if we are inside the transaction - } - return GetOpenConnection().HasLocalTransactionFromAPI; - } - } - - internal bool IsShiloh { - get { - if (_currentReconnectionTask != null) { // holds true even if task is completed - return true; // if CR is enabled, connection, if established, will be Katmai+ - } - return GetOpenConnection().IsShiloh; - } - } - - internal bool IsYukonOrNewer { - get { - if (_currentReconnectionTask != null) { // holds true even if task is completed - return true; // if CR is enabled, connection, if established, will be Katmai+ - } - return GetOpenConnection().IsYukonOrNewer; - } - } - - internal bool IsKatmaiOrNewer { - get { - if (_currentReconnectionTask != null) { // holds true even if task is completed - return true; // if CR is enabled, connection, if established, will be Katmai+ - } - return GetOpenConnection().IsKatmaiOrNewer; - } - } - - internal TdsParser Parser { - get { - SqlInternalConnectionTds tdsConnection = (GetOpenConnection() as SqlInternalConnectionTds); - if (null == tdsConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - return tdsConnection.Parser; - } - } - - internal bool Asynchronous { - get { - SqlConnectionString constr = (SqlConnectionString)ConnectionOptions; - return ((null != constr) ? constr.Asynchronous : SqlConnectionString.DEFAULT.Asynchronous); - } - } - - // - // INTERNAL METHODS - // - - internal void ValidateConnectionForExecute(string method, SqlCommand command) { - Task asyncWaitingForReconnection=_asyncWaitingForReconnection; - if (asyncWaitingForReconnection!=null) { - if (!asyncWaitingForReconnection.IsCompleted) { - throw SQL.MARSUnspportedOnConnection(); - } - else { - Interlocked.CompareExchange(ref _asyncWaitingForReconnection, null, asyncWaitingForReconnection); - } - } - if (_currentReconnectionTask != null) { - Task currentReconnectionTask = _currentReconnectionTask; - if (currentReconnectionTask != null && !currentReconnectionTask.IsCompleted) { - return; // execution will wait for this task later - } - } - SqlInternalConnection innerConnection = GetOpenConnection(method); - innerConnection.ValidateConnectionForExecute(command); - } - - // Surround name in brackets and then escape any end bracket to protect against SQL Injection. - // NOTE: if the user escapes it themselves it will not work, but this was the case in V1 as well - // as native OleDb and Odbc. - static internal string FixupDatabaseTransactionName(string name) { - if (!ADP.IsEmpty(name)) { - return SqlServerEscapeHelper.EscapeIdentifier(name); - } - else { - return name; - } - } - - // If wrapCloseInAction is defined, then the action it defines will be run with the connection close action passed in as a parameter - // The close action also supports being run asynchronously - internal void OnError(SqlException exception, bool breakConnection, Action wrapCloseInAction) { - Debug.Assert(exception != null && exception.Errors.Count != 0, "SqlConnection: OnError called with null or empty exception!"); - - // Bug fix - MDAC 49022 - connection open after failure... Problem was parser was passing - // Open as a state - because the parser's connection to the netlib was open. We would - // then set the connection state to the parser's state - which is not correct. The only - // time the connection state should change to what is passed in to this function is if - // the parser is broken, then we should be closed. Changed to passing in - // TdsParserState, not ConnectionState. - // fixed by [....] - - if (breakConnection && (ConnectionState.Open == State)) { - - if (wrapCloseInAction != null) { - int capturedCloseCount = _closeCount; - - Action closeAction = () => { - if (capturedCloseCount == _closeCount) { - Bid.Trace(" %d#, Connection broken.\n", ObjectID); - Close(); - } - }; - - wrapCloseInAction(closeAction); - } - else { - Bid.Trace(" %d#, Connection broken.\n", ObjectID); - Close(); - } - } - - if (exception.Class >= TdsEnums.MIN_ERROR_CLASS) { - // It is an error, and should be thrown. Class of TdsEnums.MIN_ERROR_CLASS or above is an error, - // below TdsEnums.MIN_ERROR_CLASS denotes an info message. - throw exception; - } - else { - // If it is a class < TdsEnums.MIN_ERROR_CLASS, it is a warning collection - so pass to handler - this.OnInfoMessage(new SqlInfoMessageEventArgs(exception)); - } - } - - // - // PRIVATE METHODS - // - - // SxS: using Debugger.IsAttached - // - [ResourceExposure(ResourceScope.None)] - [ResourceConsumption(ResourceScope.Process, ResourceScope.Process)] - private void CompleteOpen() { - Debug.Assert(ConnectionState.Open == State, "CompleteOpen not open"); - // be sure to mark as open so SqlDebugCheck can issue Query - - // check to see if we need to hook up sql-debugging if a debugger is attached - // We only need this check for Shiloh and earlier servers. - if (!GetOpenConnection().IsYukonOrNewer && - System.Diagnostics.Debugger.IsAttached) { - bool debugCheck = false; - try { - new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand(); // MDAC 66682, 69017 - debugCheck = true; - } - catch (SecurityException e) { - ADP.TraceExceptionWithoutRethrow(e); - } - - if (debugCheck) { - // if we don't have Unmanaged code permission, don't check for debugging - // but let the connection be opened while under the debugger - CheckSQLDebugOnConnect(); - } - } - } - - internal SqlInternalConnection GetOpenConnection() { - SqlInternalConnection innerConnection = (InnerConnection as SqlInternalConnection); - if (null == innerConnection) { - throw ADP.ClosedConnectionError(); - } - return innerConnection; - } - - internal SqlInternalConnection GetOpenConnection(string method) { - DbConnectionInternal innerConnection = InnerConnection; - SqlInternalConnection innerSqlConnection = (innerConnection as SqlInternalConnection); - if (null == innerSqlConnection) { - throw ADP.OpenConnectionRequired(method, innerConnection.State); - } - return innerSqlConnection; - } - - internal SqlInternalConnectionTds GetOpenTdsConnection() { - SqlInternalConnectionTds innerConnection = (InnerConnection as SqlInternalConnectionTds); - if (null == innerConnection) { - throw ADP.ClosedConnectionError(); - } - return innerConnection; - } - - internal SqlInternalConnectionTds GetOpenTdsConnection(string method) { - SqlInternalConnectionTds innerConnection = (InnerConnection as SqlInternalConnectionTds); - if (null == innerConnection) { - throw ADP.OpenConnectionRequired(method, InnerConnection.State); - } - return innerConnection; - } - - internal void OnInfoMessage(SqlInfoMessageEventArgs imevent) { - bool notified; - OnInfoMessage(imevent, out notified); - } - - internal void OnInfoMessage(SqlInfoMessageEventArgs imevent, out bool notified) { - if (Bid.TraceOn) { - Debug.Assert(null != imevent, "null SqlInfoMessageEventArgs"); - Bid.Trace(" %d#, Message='%ls'\n", ObjectID, ((null != imevent) ? imevent.Message : "")); - } - SqlInfoMessageEventHandler handler = (SqlInfoMessageEventHandler)Events[EventInfoMessage]; - if (null != handler) { - notified = true; - try { - handler(this, imevent); - } - catch (Exception e) { // MDAC 53175 - if (!ADP.IsCatchableOrSecurityExceptionType(e)) { - throw; - } - - ADP.TraceExceptionWithoutRethrow(e); - } - } else { - notified = false; - } - } - - // - // SQL DEBUGGING SUPPORT - // - - // this only happens once per connection - // SxS: using named file mapping APIs - // - [ResourceExposure(ResourceScope.None)] - [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] - private void CheckSQLDebugOnConnect() { - IntPtr hFileMap; - uint pid = (uint)SafeNativeMethods.GetCurrentProcessId(); - - string mapFileName; - - // If Win2k or later, prepend "Global\\" to enable this to work through TerminalServices. - if (ADP.IsPlatformNT5) { - mapFileName = "Global\\" + TdsEnums.SDCI_MAPFILENAME; - } - else { - mapFileName = TdsEnums.SDCI_MAPFILENAME; - } - - mapFileName = mapFileName + pid.ToString(CultureInfo.InvariantCulture); - - hFileMap = NativeMethods.OpenFileMappingA(0x4/*FILE_MAP_READ*/, false, mapFileName); - - if (ADP.PtrZero != hFileMap) { - IntPtr pMemMap = NativeMethods.MapViewOfFile(hFileMap, 0x4/*FILE_MAP_READ*/, 0, 0, IntPtr.Zero); - if (ADP.PtrZero != pMemMap) { - SqlDebugContext sdc = new SqlDebugContext(); - sdc.hMemMap = hFileMap; - sdc.pMemMap = pMemMap; - sdc.pid = pid; - - // optimization: if we only have to refresh memory-mapped data at connection open time - // optimization: then call here instead of in CheckSQLDebug() which gets called - // optimization: at command execution time - // RefreshMemoryMappedData(sdc); - - // delaying setting out global state until after we issue this first SQLDebug command so that - // we don't reentrantly call into CheckSQLDebug - CheckSQLDebug(sdc); - // now set our global state - _sdc = sdc; - } - } - } - - // This overload is called by the Command object when executing stored procedures. Note that - // if SQLDebug has never been called, it is a noop. - internal void CheckSQLDebug() { - if (null != _sdc) - CheckSQLDebug(_sdc); - } - - // SxS: using GetCurrentThreadId - [ResourceExposure(ResourceScope.None)] - [ResourceConsumption(ResourceScope.Process, ResourceScope.Process)] - [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] // MDAC 66682, 69017 - private void CheckSQLDebug(SqlDebugContext sdc) { - // check to see if debugging has been activated - Debug.Assert(null != sdc, "SQL Debug: invalid null debugging context!"); - -#pragma warning disable 618 - uint tid = (uint)AppDomain.GetCurrentThreadId(); // Sql Debugging doesn't need fiber support; -#pragma warning restore 618 - RefreshMemoryMappedData(sdc); - - // - - - - // If we get here, the debugger must be hooked up. - if (!sdc.active) { - if (sdc.fOption/*TdsEnums.SQLDEBUG_ON*/) { - // turn on - sdc.active = true; - sdc.tid = tid; - try { - IssueSQLDebug(TdsEnums.SQLDEBUG_ON, sdc.machineName, sdc.pid, sdc.dbgpid, sdc.sdiDllName, sdc.data); - sdc.tid = 0; // reset so that the first successful time through, we notify the server of the context switch - } - catch { - sdc.active = false; - throw; - } - } - } - - // be sure to pick up thread context switch, especially the first time through - if (sdc.active) { - if (!sdc.fOption/*TdsEnums.SQLDEBUG_OFF*/) { - // turn off and free the memory - sdc.Dispose(); - // okay if we throw out here, no state to clean up - IssueSQLDebug(TdsEnums.SQLDEBUG_OFF, null, 0, 0, null, null); - } - else { - // notify server of context change - if (sdc.tid != tid) { - sdc.tid = tid; - try { - IssueSQLDebug(TdsEnums.SQLDEBUG_CONTEXT, null, sdc.pid, sdc.tid, null, null); - } - catch { - sdc.tid = 0; - throw; - } - } - } - } - } - - private void IssueSQLDebug(uint option, string machineName, uint pid, uint id, string sdiDllName, byte[] data) { - - if (GetOpenConnection().IsYukonOrNewer) { - // - return; - } - - // - - SqlCommand c = new SqlCommand(TdsEnums.SP_SDIDEBUG, this); - c.CommandType = CommandType.StoredProcedure; - - // context param - SqlParameter p = new SqlParameter(null, SqlDbType.VarChar, TdsEnums.SQLDEBUG_MODE_NAMES[option].Length); - p.Value = TdsEnums.SQLDEBUG_MODE_NAMES[option]; - c.Parameters.Add(p); - - if (option == TdsEnums.SQLDEBUG_ON) { - // debug dll name - p = new SqlParameter(null, SqlDbType.VarChar, sdiDllName.Length); - p.Value = sdiDllName; - c.Parameters.Add(p); - // debug machine name - p = new SqlParameter(null, SqlDbType.VarChar, machineName.Length); - p.Value = machineName; - c.Parameters.Add(p); - } - - if (option != TdsEnums.SQLDEBUG_OFF) { - // client pid - p = new SqlParameter(null, SqlDbType.Int); - p.Value = pid; - c.Parameters.Add(p); - // dbgpid or tid - p = new SqlParameter(null, SqlDbType.Int); - p.Value = id; - c.Parameters.Add(p); - } - - if (option == TdsEnums.SQLDEBUG_ON) { - // debug data - p = new SqlParameter(null, SqlDbType.VarBinary, (null != data) ? data.Length : 0); - p.Value = data; - c.Parameters.Add(p); - } - - c.ExecuteNonQuery(); - } - - - public static void ChangePassword(string connectionString, string newPassword) { - IntPtr hscp; - Bid.ScopeEnter(out hscp, "") ; - Bid.CorrelationTrace(" ActivityID %ls\n"); - try { - if (ADP.IsEmpty(connectionString)) { - throw SQL.ChangePasswordArgumentMissing("connectionString"); - } - if (ADP.IsEmpty(newPassword)) { - throw SQL.ChangePasswordArgumentMissing("newPassword"); - } - if (TdsEnums.MAXLEN_NEWPASSWORD < newPassword.Length) { - throw ADP.InvalidArgumentLength("newPassword", TdsEnums.MAXLEN_NEWPASSWORD); - } - - SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, null); - - SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key); - if (connectionOptions.IntegratedSecurity) { - throw SQL.ChangePasswordConflictsWithSSPI(); - } - if (! ADP.IsEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); - } - if (connectionOptions.ContextConnection) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.Context_Connection); - } - - System.Security.PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); - permissionSet.Demand(); - - ChangePassword(connectionString, connectionOptions, null, newPassword, null); - } - finally { - Bid.ScopeLeave(ref hscp) ; - } - } - - public static void ChangePassword(string connectionString, SqlCredential credential, SecureString newSecurePassword) { - IntPtr hscp; - Bid.ScopeEnter(out hscp, "") ; - Bid.CorrelationTrace(" ActivityID %ls\n"); - try { - if (ADP.IsEmpty(connectionString)) { - throw SQL.ChangePasswordArgumentMissing("connectionString"); - } - - // check credential; not necessary to check the length of password in credential as the check is done by SqlCredential class - if (credential == null) { - throw SQL.ChangePasswordArgumentMissing("credential"); - } - - if (newSecurePassword == null || newSecurePassword.Length == 0) { - throw SQL.ChangePasswordArgumentMissing("newSecurePassword");; - } - - if (!newSecurePassword.IsReadOnly()) { - throw ADP.MustBeReadOnly("newSecurePassword"); - } - - if (TdsEnums.MAXLEN_NEWPASSWORD < newSecurePassword.Length) { - throw ADP.InvalidArgumentLength("newSecurePassword", TdsEnums.MAXLEN_NEWPASSWORD); - } - - SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential); - - SqlConnectionString connectionOptions = SqlConnectionFactory.FindSqlConnectionOptions(key); - - // Check for incompatible connection string value with SqlCredential - if (!ADP.IsEmpty(connectionOptions.UserID) || !ADP.IsEmpty(connectionOptions.Password)) { - throw ADP.InvalidMixedArgumentOfSecureAndClearCredential(); - } - - if (connectionOptions.IntegratedSecurity) { - throw SQL.ChangePasswordConflictsWithSSPI(); - } - - if (! ADP.IsEmpty(connectionOptions.AttachDBFilename)) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.AttachDBFilename); - } - - if (connectionOptions.ContextConnection) { - throw SQL.ChangePasswordUseOfUnallowedKey(SqlConnectionString.KEY.Context_Connection); - } - - System.Security.PermissionSet permissionSet = connectionOptions.CreatePermissionSet(); - permissionSet.Demand(); - - ChangePassword(connectionString, connectionOptions, credential, null, newSecurePassword); - } - finally { - Bid.ScopeLeave(ref hscp) ; - } - } - - private static void ChangePassword(string connectionString, SqlConnectionString connectionOptions, SqlCredential credential, string newPassword, SecureString newSecurePassword ) { - // note: This is the only case where we directly construt the internal connection, passing in the new password. - // Normally we would simply create a regular connectoin and open it but there is no other way to pass the - // new password down to the constructor. Also it would have an unwanted impact on the connection pool - // - using (SqlInternalConnectionTds con = new SqlInternalConnectionTds(null, connectionOptions, credential, null, newPassword, newSecurePassword, false)) { - if (!con.IsYukonOrNewer) { - throw SQL.ChangePasswordRequiresYukon(); - } - } - SqlConnectionPoolKey key = new SqlConnectionPoolKey(connectionString, credential); - - SqlConnectionFactory.SingletonInstance.ClearPool(key); - } - - internal void RegisterForConnectionCloseNotification(ref Task outterTask, object value, int tag) { - // Connection exists, schedule removal, will be added to ref collection after calling ValidateAndReconnect - outterTask = outterTask.ContinueWith(task => { - RemoveWeakReference(value); - return task; - }, TaskScheduler.Default).Unwrap(); - } - - // updates our context with any changes made to the memory-mapped data by an external process - static private void RefreshMemoryMappedData(SqlDebugContext sdc) { - Debug.Assert(ADP.PtrZero != sdc.pMemMap, "SQL Debug: invalid null value for pMemMap!"); - // copy memory mapped file contents into managed types - MEMMAP memMap = (MEMMAP)Marshal.PtrToStructure(sdc.pMemMap, typeof(MEMMAP)); - sdc.dbgpid = memMap.dbgpid; - sdc.fOption = (memMap.fOption == 1) ? true : false; - // xlate ansi byte[] -> managed strings - Encoding cp = System.Text.Encoding.GetEncoding(TdsEnums.DEFAULT_ENGLISH_CODE_PAGE_VALUE); - sdc.machineName = cp.GetString(memMap.rgbMachineName, 0, memMap.rgbMachineName.Length); - sdc.sdiDllName = cp.GetString(memMap.rgbDllName, 0, memMap.rgbDllName.Length); - // just get data reference - sdc.data = memMap.rgbData; - } - - public void ResetStatistics() { - if (IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - - if (null != Statistics) { - Statistics.Reset(); - if (ConnectionState.Open == State) { - // update timestamp; - ADP.TimerCurrent(out _statistics._openTimestamp); - } - } - } - - public IDictionary RetrieveStatistics() { - if (IsContextConnection) { - throw SQL.NotAvailableOnContextConnection(); - } - - if (null != Statistics) { - UpdateStatistics(); - return Statistics.GetHashtable(); - } - else { - return new SqlStatistics().GetHashtable(); - } - } - - private void UpdateStatistics() { - if (ConnectionState.Open == State) { - // update timestamp - ADP.TimerCurrent(out _statistics._closeTimestamp); - } - // delegate the rest of the work to the SqlStatistics class - Statistics.UpdateStatistics(); - } - - // - // UDT SUPPORT - // - - private Assembly ResolveTypeAssembly(AssemblyName asmRef, bool throwOnError) { - Debug.Assert(TypeSystemAssemblyVersion != null, "TypeSystemAssembly should be set !"); - if (string.Compare(asmRef.Name, "Microsoft.SqlServer.Types", StringComparison.OrdinalIgnoreCase) == 0) { - if (Bid.TraceOn) { - if (asmRef.Version!=TypeSystemAssemblyVersion) { - Bid.Trace(" SQL CLR type version change: Server sent %ls, client will instantiate %ls", - asmRef.Version.ToString(), TypeSystemAssemblyVersion.ToString()); - } - } - asmRef.Version = TypeSystemAssemblyVersion; - } - try { - return Assembly.Load(asmRef); - } - catch (Exception e) { - if (throwOnError || !ADP.IsCatchableExceptionType(e)) { - throw; - } - else { - return null; - }; - } - } - - // - internal void CheckGetExtendedUDTInfo(SqlMetaDataPriv metaData, bool fThrow) { - if (metaData.udtType == null) { // If null, we have not obtained extended info. - Debug.Assert(!ADP.IsEmpty(metaData.udtAssemblyQualifiedName), "Unexpected state on GetUDTInfo"); - // Parameter throwOnError determines whether exception from Assembly.Load is thrown. - metaData.udtType = - Type.GetType(typeName:metaData.udtAssemblyQualifiedName, assemblyResolver:asmRef => ResolveTypeAssembly(asmRef, fThrow), typeResolver:null, throwOnError: fThrow); - - if (fThrow && metaData.udtType == null) { - // - throw SQL.UDTUnexpectedResult(metaData.udtAssemblyQualifiedName); - } - } - } - - internal object GetUdtValue(object value, SqlMetaDataPriv metaData, bool returnDBNull) { - if (returnDBNull && ADP.IsNull(value)) { - return DBNull.Value; - } - - object o = null; - - // Since the serializer doesn't handle nulls... - if (ADP.IsNull(value)) { - Type t = metaData.udtType; - Debug.Assert(t != null, "Unexpected null of udtType on GetUdtValue!"); - o = t.InvokeMember("Null", BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Static, null, null, new Object[]{}, CultureInfo.InvariantCulture); - Debug.Assert(o != null); - return o; - } - else { - - MemoryStream stm = new MemoryStream((byte[]) value); - - o = SerializationHelperSql9.Deserialize(stm, metaData.udtType); - - Debug.Assert(o != null, "object could NOT be created"); - return o; - } - } - - internal byte[] GetBytes(object o) { - Microsoft.SqlServer.Server.Format format = Microsoft.SqlServer.Server.Format.Native; - int maxSize = 0; - return GetBytes(o, out format, out maxSize); - } - - internal byte[] GetBytes(object o, out Microsoft.SqlServer.Server.Format format, out int maxSize) { - SqlUdtInfo attr = AssemblyCache.GetInfoFromType(o.GetType()); - maxSize = attr.MaxByteSize; - format = attr.SerializationFormat; - - if (maxSize < -1 || maxSize >= UInt16.MaxValue) { // Do we need this? Is this the right place? - throw new InvalidOperationException(o.GetType() + ": invalid Size"); - } - - byte[] retval; - - using (MemoryStream stm = new MemoryStream(maxSize < 0 ? 0 : maxSize)) { - SerializationHelperSql9.Serialize(stm, o); - retval = stm.ToArray(); - } - return retval; - } - } // SqlConnection - - // - - - - - - [ - ComVisible(true), - ClassInterface(ClassInterfaceType.None), - Guid("afef65ad-4577-447a-a148-83acadd3d4b9"), - ] - [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] - public sealed class SQLDebugging: ISQLDebug { - - // Security stuff - const int STANDARD_RIGHTS_REQUIRED = (0x000F0000); - const int DELETE = (0x00010000); - const int READ_CONTROL = (0x00020000); - const int WRITE_DAC = (0x00040000); - const int WRITE_OWNER = (0x00080000); - const int SYNCHRONIZE = (0x00100000); - const int FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x000001FF); - const uint GENERIC_READ = (0x80000000); - const uint GENERIC_WRITE = (0x40000000); - const uint GENERIC_EXECUTE = (0x20000000); - const uint GENERIC_ALL = (0x10000000); - - const int SECURITY_DESCRIPTOR_REVISION = (1); - const int ACL_REVISION = (2); - - const int SECURITY_AUTHENTICATED_USER_RID = (0x0000000B); - const int SECURITY_LOCAL_SYSTEM_RID = (0x00000012); - const int SECURITY_BUILTIN_DOMAIN_RID = (0x00000020); - const int SECURITY_WORLD_RID = (0x00000000); - const byte SECURITY_NT_AUTHORITY = 5; - const int DOMAIN_GROUP_RID_ADMINS = (0x00000200); - const int DOMAIN_ALIAS_RID_ADMINS = (0x00000220); - - const int sizeofSECURITY_ATTRIBUTES = 12; // sizeof(SECURITY_ATTRIBUTES); - const int sizeofSECURITY_DESCRIPTOR = 20; // sizeof(SECURITY_DESCRIPTOR); - const int sizeofACCESS_ALLOWED_ACE = 12; // sizeof(ACCESS_ALLOWED_ACE); - const int sizeofACCESS_DENIED_ACE = 12; // sizeof(ACCESS_DENIED_ACE); - const int sizeofSID_IDENTIFIER_AUTHORITY = 6; // sizeof(SID_IDENTIFIER_AUTHORITY) - const int sizeofACL = 8; // sizeof(ACL); - - private IntPtr CreateSD(ref IntPtr pDacl) { - IntPtr pSecurityDescriptor = IntPtr.Zero; - IntPtr pUserSid = IntPtr.Zero; - IntPtr pAdminSid = IntPtr.Zero; - IntPtr pNtAuthority = IntPtr.Zero; - int cbAcl = 0; - bool status = false; - - pNtAuthority = Marshal.AllocHGlobal(sizeofSID_IDENTIFIER_AUTHORITY); - if (pNtAuthority == IntPtr.Zero) - goto cleanup; - Marshal.WriteInt32(pNtAuthority, 0, 0); - Marshal.WriteByte(pNtAuthority, 4, 0); - Marshal.WriteByte(pNtAuthority, 5, SECURITY_NT_AUTHORITY); - - status = - NativeMethods.AllocateAndInitializeSid( - pNtAuthority, - (byte)1, - SECURITY_AUTHENTICATED_USER_RID, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - ref pUserSid); - - if (!status || pUserSid == IntPtr.Zero) { - goto cleanup; - } - status = - NativeMethods.AllocateAndInitializeSid( - pNtAuthority, - (byte)2, - SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_ADMINS, - 0, - 0, - 0, - 0, - 0, - 0, - ref pAdminSid); - - if (!status || pAdminSid == IntPtr.Zero) { - goto cleanup; - } - status = false; - pSecurityDescriptor = Marshal.AllocHGlobal(sizeofSECURITY_DESCRIPTOR); - if (pSecurityDescriptor == IntPtr.Zero) { - goto cleanup; - } - for (int i = 0; i < sizeofSECURITY_DESCRIPTOR; i++) - Marshal.WriteByte(pSecurityDescriptor, i, (byte)0); - cbAcl = sizeofACL - + (2 * (sizeofACCESS_ALLOWED_ACE)) - + sizeofACCESS_DENIED_ACE - + NativeMethods.GetLengthSid(pUserSid) - + NativeMethods.GetLengthSid(pAdminSid); - - pDacl = Marshal.AllocHGlobal(cbAcl); - if (pDacl == IntPtr.Zero) { - goto cleanup; - } - // rights must be added in a certain order. Namely, deny access first, then add access - if (NativeMethods.InitializeAcl(pDacl, cbAcl, ACL_REVISION)) - if (NativeMethods.AddAccessDeniedAce(pDacl, ACL_REVISION, WRITE_DAC, pUserSid)) - if (NativeMethods.AddAccessAllowedAce(pDacl, ACL_REVISION, GENERIC_READ, pUserSid)) - if (NativeMethods.AddAccessAllowedAce(pDacl, ACL_REVISION, GENERIC_ALL, pAdminSid)) - if (NativeMethods.InitializeSecurityDescriptor(pSecurityDescriptor, SECURITY_DESCRIPTOR_REVISION)) - if (NativeMethods.SetSecurityDescriptorDacl(pSecurityDescriptor, true, pDacl, false)) { - status = true; - } - - cleanup : - if (pNtAuthority != IntPtr.Zero) { - Marshal.FreeHGlobal(pNtAuthority); - } - if (pAdminSid != IntPtr.Zero) - NativeMethods.FreeSid(pAdminSid); - if (pUserSid != IntPtr.Zero) - NativeMethods.FreeSid(pUserSid); - if (status) - return pSecurityDescriptor; - else { - if (pSecurityDescriptor != IntPtr.Zero) { - Marshal.FreeHGlobal(pSecurityDescriptor); - } - } - return IntPtr.Zero; - } - - // SxS: using file mapping API (CreateFileMapping) - // - [ResourceExposure(ResourceScope.None)] - [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] - bool ISQLDebug.SQLDebug(int dwpidDebugger, int dwpidDebuggee, [MarshalAs(UnmanagedType.LPStr)] string pszMachineName, - [MarshalAs(UnmanagedType.LPStr)] string pszSDIDLLName, int dwOption, int cbData, byte[] rgbData) { - bool result = false; - IntPtr hFileMap = IntPtr.Zero; - IntPtr pMemMap = IntPtr.Zero; - IntPtr pSecurityDescriptor = IntPtr.Zero; - IntPtr pSecurityAttributes = IntPtr.Zero; - IntPtr pDacl = IntPtr.Zero; - - // validate the structure - if (null == pszMachineName || null == pszSDIDLLName) - return false; - - if (pszMachineName.Length > TdsEnums.SDCI_MAX_MACHINENAME || - pszSDIDLLName.Length > TdsEnums.SDCI_MAX_DLLNAME) - return false; - - // note that these are ansi strings - Encoding cp = System.Text.Encoding.GetEncoding(TdsEnums.DEFAULT_ENGLISH_CODE_PAGE_VALUE); - byte[] rgbMachineName = cp.GetBytes(pszMachineName); - byte[] rgbSDIDLLName = cp.GetBytes(pszSDIDLLName); - - if (null != rgbData && cbData > TdsEnums.SDCI_MAX_DATA) - return false; - - string mapFileName; - - // If Win2k or later, prepend "Global\\" to enable this to work through TerminalServices. - if (ADP.IsPlatformNT5) { - mapFileName = "Global\\" + TdsEnums.SDCI_MAPFILENAME; - } - else { - mapFileName = TdsEnums.SDCI_MAPFILENAME; - } - - mapFileName = mapFileName + dwpidDebuggee.ToString(CultureInfo.InvariantCulture); - - // Create Security Descriptor - pSecurityDescriptor = CreateSD(ref pDacl); - pSecurityAttributes = Marshal.AllocHGlobal(sizeofSECURITY_ATTRIBUTES); - if ((pSecurityDescriptor == IntPtr.Zero) || (pSecurityAttributes == IntPtr.Zero)) - return false; - - Marshal.WriteInt32(pSecurityAttributes, 0, sizeofSECURITY_ATTRIBUTES); // nLength = sizeof(SECURITY_ATTRIBUTES) - Marshal.WriteIntPtr(pSecurityAttributes, 4, pSecurityDescriptor); // lpSecurityDescriptor = pSecurityDescriptor - Marshal.WriteInt32(pSecurityAttributes, 8, 0); // bInheritHandle = FALSE - hFileMap = NativeMethods.CreateFileMappingA( - ADP.InvalidPtr/*INVALID_HANDLE_VALUE*/, - pSecurityAttributes, - 0x4/*PAGE_READWRITE*/, - 0, - Marshal.SizeOf(typeof(MEMMAP)), - mapFileName); - - if (IntPtr.Zero == hFileMap) { - goto cleanup; - } - - - pMemMap = NativeMethods.MapViewOfFile(hFileMap, 0x6/*FILE_MAP_READ|FILE_MAP_WRITE*/, 0, 0, IntPtr.Zero); - - if (IntPtr.Zero == pMemMap) { - goto cleanup; - } - - // copy data to memory-mapped file - // layout of MEMMAP structure is: - // uint dbgpid - // uint fOption - // byte[32] machineName - // byte[16] sdiDllName - // uint dbData - // byte[255] vData - int offset = 0; - Marshal.WriteInt32(pMemMap, offset, (int)dwpidDebugger); - offset += 4; - Marshal.WriteInt32(pMemMap, offset, (int)dwOption); - offset += 4; - Marshal.Copy(rgbMachineName, 0, ADP.IntPtrOffset(pMemMap, offset), rgbMachineName.Length); - offset += TdsEnums.SDCI_MAX_MACHINENAME; - Marshal.Copy(rgbSDIDLLName, 0, ADP.IntPtrOffset(pMemMap, offset), rgbSDIDLLName.Length); - offset += TdsEnums.SDCI_MAX_DLLNAME; - Marshal.WriteInt32(pMemMap, offset, (int)cbData); - offset += 4; - if (null != rgbData) { - Marshal.Copy(rgbData, 0, ADP.IntPtrOffset(pMemMap, offset), (int)cbData); - } - NativeMethods.UnmapViewOfFile(pMemMap); - result = true; - cleanup : - if (result == false) { - if (hFileMap != IntPtr.Zero) - NativeMethods.CloseHandle(hFileMap); - } - if (pSecurityAttributes != IntPtr.Zero) - Marshal.FreeHGlobal(pSecurityAttributes); - if (pSecurityDescriptor != IntPtr.Zero) - Marshal.FreeHGlobal(pSecurityDescriptor); - if (pDacl != IntPtr.Zero) - Marshal.FreeHGlobal(pDacl); - return result; - } - } - - // this is a private interface to com+ users - // do not change this guid - [ - ComImport, - ComVisible(true), - Guid("6cb925bf-c3c0-45b3-9f44-5dd67c7b7fe8"), - InterfaceType(ComInterfaceType.InterfaceIsIUnknown), - BestFitMapping(false, ThrowOnUnmappableChar = true), - ] - interface ISQLDebug { - - [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] - bool SQLDebug( - int dwpidDebugger, - int dwpidDebuggee, - [MarshalAs(UnmanagedType.LPStr)] string pszMachineName, - [MarshalAs(UnmanagedType.LPStr)] string pszSDIDLLName, - int dwOption, - int cbData, - byte[] rgbData); - } - - sealed class SqlDebugContext: IDisposable { - // context data - internal uint pid = 0; - internal uint tid = 0; - internal bool active = false; - // memory-mapped data - internal IntPtr pMemMap = ADP.PtrZero; - internal IntPtr hMemMap = ADP.PtrZero; - internal uint dbgpid = 0; - internal bool fOption = false; - internal string machineName = null; - internal string sdiDllName = null; - internal byte[] data = null; - - public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - // using CloseHandle and UnmapViewOfFile - no exposure - [ResourceExposure(ResourceScope.None)] - [ResourceConsumption(ResourceScope.Machine, ResourceScope.Machine)] - private void Dispose(bool disposing) { - if (disposing) { - // Nothing to do here - ; - } - if (pMemMap != IntPtr.Zero) { - NativeMethods.UnmapViewOfFile(pMemMap); - pMemMap = IntPtr.Zero; - } - if (hMemMap != IntPtr.Zero) { - NativeMethods.CloseHandle(hMemMap); - hMemMap = IntPtr.Zero; - } - active = false; - } - - ~SqlDebugContext() { - Dispose(false); - } - - } - - // native interop memory mapped structure for sdi debugging - [StructLayoutAttribute(LayoutKind.Sequential, Pack = 1)] - internal struct MEMMAP { - [MarshalAs(UnmanagedType.U4)] - internal uint dbgpid; // id of debugger - [MarshalAs(UnmanagedType.U4)] - internal uint fOption; // 1 - start debugging, 0 - stop debugging - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] - internal byte[] rgbMachineName; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - internal byte[] rgbDllName; - [MarshalAs(UnmanagedType.U4)] - internal uint cbData; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 255)] - internal byte[] rgbData; - } -} // System.Data.SqlClient namespace - - diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs.REMOVED.git-id new file mode 100644 index 0000000000..a6658837b0 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnection.cs.REMOVED.git-id @@ -0,0 +1 @@ +0ce4dbb08763054308721ed6139b428134b0cb54 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionFactory.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionFactory.cs index 37766e5f46..d1b96a31b5 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionFactory.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionFactory.cs @@ -41,17 +41,19 @@ namespace System.Data.SqlClient SqlConnectionPoolKey key = (SqlConnectionPoolKey) poolKey; SqlInternalConnection result = null; SessionData recoverySessionData = null; + SqlConnection sqlOwningConnection = owningConnection as SqlConnection; + bool applyTransientFaultHandling = sqlOwningConnection != null ? sqlOwningConnection._applyTransientFaultHandling : false; SqlConnectionString userOpt = null; if (userOptions != null) { userOpt = (SqlConnectionString)userOptions; } - else if (owningConnection != null) { - userOpt = (SqlConnectionString)(((SqlConnection)owningConnection).UserConnectionOptions); + else if (sqlOwningConnection != null) { + userOpt = (SqlConnectionString)(sqlOwningConnection.UserConnectionOptions); } - if (owningConnection != null) { - recoverySessionData = ((SqlConnection)owningConnection)._recoverySessionData; + if (sqlOwningConnection != null) { + recoverySessionData = sqlOwningConnection._recoverySessionData; } if (opt.ContextConnection) { @@ -63,7 +65,7 @@ namespace System.Data.SqlClient // Pass DbConnectionPoolIdentity to SqlInternalConnectionTds if using integrated security. // Used by notifications. - if (opt.IntegratedSecurity) { + if (opt.IntegratedSecurity || opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated) { if (pool != null) { identity = pool.Identity; } @@ -90,7 +92,7 @@ namespace System.Data.SqlClient SqlConnectionString sseopt = new SqlConnectionString(opt, opt.DataSource, true /* user instance=true */, false /* set Enlist = false */); - sseConnection = new SqlInternalConnectionTds(identity, sseopt, key.Credential, null, "", null, false); + sseConnection = new SqlInternalConnectionTds(identity, sseopt, key.Credential, null, "", null, false, applyTransientFaultHandling: applyTransientFaultHandling); // NOTE: Retrieve here. This user instance name will be used below to connect to the Sql Express User Instance. instanceName = sseConnection.InstanceName; @@ -122,7 +124,7 @@ namespace System.Data.SqlClient opt = new SqlConnectionString(opt, instanceName, false /* user instance=false */, null /* do not modify the Enlist value */); poolGroupProviderInfo = null; // null so we do not pass to constructor below... } - result = new SqlInternalConnectionTds(identity, opt, key.Credential, poolGroupProviderInfo, "", null, redirectedUserInstance, userOpt, recoverySessionData); + result = new SqlInternalConnectionTds(identity, opt, key.Credential, poolGroupProviderInfo, "", null, redirectedUserInstance, userOpt, recoverySessionData, pool, key.AccessToken, applyTransientFaultHandling: applyTransientFaultHandling); } return result; } @@ -157,7 +159,7 @@ namespace System.Data.SqlClient connectionTimeout = Int32.MaxValue; poolingOptions = new DbConnectionPoolGroupOptions( - opt.IntegratedSecurity, + opt.IntegratedSecurity || opt.Authentication == SqlAuthenticationMethod.ActiveDirectoryIntegrated, opt.MinPoolSize, opt.MaxPoolSize, connectionTimeout, diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionPoolKey.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionPoolKey.cs index c589d8965a..e3fb5a7dd7 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionPoolKey.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionPoolKey.cs @@ -12,6 +12,7 @@ namespace System.Data.SqlClient using System; using System.Collections; using System.Data.Common; + using System.Diagnostics; // SqlConnectionPoolKey: Implementation of a key to connection pool groups for specifically to be used for SqlConnection // Connection string and SqlCredential are used as a key @@ -19,16 +20,20 @@ namespace System.Data.SqlClient { private SqlCredential _credential; private int _hashValue; + private readonly string _accessToken; - internal SqlConnectionPoolKey(string connectionString, SqlCredential credential) : base(connectionString) + internal SqlConnectionPoolKey(string connectionString, SqlCredential credential, string accessToken) : base(connectionString) { + Debug.Assert(_credential == null || _accessToken == null, "Credential and AccessToken can't have the value at the same time."); _credential = credential; + _accessToken = accessToken; CalculateHashCode(); } private SqlConnectionPoolKey(SqlConnectionPoolKey key) : base (key) { _credential = key.Credential; + _accessToken = key.AccessToken; CalculateHashCode(); } @@ -59,12 +64,19 @@ namespace System.Data.SqlClient } } + internal string AccessToken + { + get + { + return _accessToken; + } + } public override bool Equals(object obj) { SqlConnectionPoolKey key = obj as SqlConnectionPoolKey; - return (key != null && _credential == key._credential && ConnectionString == key.ConnectionString); + return (key != null && _credential == key._credential && ConnectionString == key.ConnectionString && Object.ReferenceEquals(_accessToken, key._accessToken)); } public override int GetHashCode() @@ -83,6 +95,13 @@ namespace System.Data.SqlClient _hashValue = _hashValue * 17 + _credential.GetHashCode(); } } + else if (_accessToken != null) + { + unchecked + { + _hashValue = _hashValue * 17 + _accessToken.GetHashCode(); + } + } } } } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionString.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionString.cs index 934f0f6ab5..85ed1b7bbf 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionString.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionString.cs @@ -27,74 +27,81 @@ namespace System.Data.SqlClient { internal static class DEFAULT { internal const ApplicationIntent ApplicationIntent = DbConnectionStringDefaults.ApplicationIntent; - internal const string Application_Name = TdsEnums.SQL_PROVIDER_NAME; - internal const bool Asynchronous = false; - internal const string AttachDBFilename = ""; - internal const int Connect_Timeout = ADP.DefaultConnectionTimeout; - internal const bool Connection_Reset = true; - internal const bool Context_Connection = false; - internal const string Current_Language = ""; - internal const string Data_Source = ""; - internal const bool Encrypt = false; - internal const bool Enlist = true; - internal const string FailoverPartner = ""; - internal const string Initial_Catalog = ""; - internal const bool Integrated_Security = false; - internal const int Load_Balance_Timeout = 0; // default of 0 means don't use - internal const bool MARS = false; - internal const int Max_Pool_Size = 100; - internal const int Min_Pool_Size = 0; - internal const bool MultiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - internal const string Network_Library = ""; - internal const int Packet_Size = 8000; - internal const string Password = ""; - internal const bool Persist_Security_Info = false; - internal const bool Pooling = true; - internal const bool TrustServerCertificate = false; - internal const string Type_System_Version = ""; - internal const string User_ID = ""; - internal const bool User_Instance = false; - internal const bool Replication = false; - internal const int Connect_Retry_Count = 1; - internal const int Connect_Retry_Interval = 10; + internal const string Application_Name = TdsEnums.SQL_PROVIDER_NAME; + internal const bool Asynchronous = false; + internal const string AttachDBFilename = ""; + internal const int Connect_Timeout = ADP.DefaultConnectionTimeout; + internal const bool Connection_Reset = true; + internal const bool Context_Connection = false; + internal const string Current_Language = ""; + internal const string Data_Source = ""; + internal const bool Encrypt = false; + internal const bool Enlist = true; + internal const string FailoverPartner = ""; + internal const string Initial_Catalog = ""; + internal const bool Integrated_Security = false; + internal const int Load_Balance_Timeout = 0; // default of 0 means don't use + internal const bool MARS = false; + internal const int Max_Pool_Size = 100; + internal const int Min_Pool_Size = 0; + internal const bool MultiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; + internal const bool TransparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + internal const string Network_Library = ""; + internal const int Packet_Size = 8000; + internal const string Password = ""; + internal const bool Persist_Security_Info = false; + internal const bool Pooling = true; + internal const bool TrustServerCertificate = false; + internal const string Type_System_Version = ""; + internal const string User_ID = ""; + internal const bool User_Instance = false; + internal const bool Replication = false; + internal const int Connect_Retry_Count = 1; + internal const int Connect_Retry_Interval = 10; + internal static readonly SqlAuthenticationMethod Authentication = SqlAuthenticationMethod.NotSpecified; + internal static readonly SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting = SqlConnectionColumnEncryptionSetting.Disabled; } // SqlConnection ConnectionString Options // keys must be lowercase! internal static class KEY { - internal const string ApplicationIntent = "applicationintent"; - internal const string Application_Name = "application name"; - internal const string AsynchronousProcessing = "asynchronous processing"; - internal const string AttachDBFilename = "attachdbfilename"; - internal const string Connect_Timeout = "connect timeout"; - internal const string Connection_Reset = "connection reset"; - internal const string Context_Connection = "context connection"; - internal const string Current_Language = "current language"; - internal const string Data_Source = "data source"; - internal const string Encrypt = "encrypt"; - internal const string Enlist = "enlist"; - internal const string FailoverPartner = "failover partner"; - internal const string Initial_Catalog = "initial catalog"; - internal const string Integrated_Security = "integrated security"; - internal const string Load_Balance_Timeout = "load balance timeout"; - internal const string MARS = "multipleactiveresultsets"; - internal const string Max_Pool_Size = "max pool size"; - internal const string Min_Pool_Size = "min pool size"; - internal const string MultiSubnetFailover = "multisubnetfailover"; - internal const string Network_Library = "network library"; - internal const string Packet_Size = "packet size"; - internal const string Password = "password"; - internal const string Persist_Security_Info = "persist security info"; - internal const string Pooling = "pooling"; - internal const string TransactionBinding = "transaction binding"; - internal const string TrustServerCertificate = "trustservercertificate"; - internal const string Type_System_Version = "type system version"; - internal const string User_ID = "user id"; - internal const string User_Instance = "user instance"; - internal const string Workstation_Id = "workstation id"; - internal const string Replication = "replication"; - internal const string Connect_Retry_Count = "connectretrycount"; - internal const string Connect_Retry_Interval = "connectretryinterval"; + internal const string ApplicationIntent = "applicationintent"; + internal const string Application_Name = "application name"; + internal const string AsynchronousProcessing = "asynchronous processing"; + internal const string AttachDBFilename = "attachdbfilename"; + internal const string ColumnEncryptionSetting = "column encryption setting"; + internal const string Connect_Timeout = "connect timeout"; + internal const string Connection_Reset = "connection reset"; + internal const string Context_Connection = "context connection"; + internal const string Current_Language = "current language"; + internal const string Data_Source = "data source"; + internal const string Encrypt = "encrypt"; + internal const string Enlist = "enlist"; + internal const string FailoverPartner = "failover partner"; + internal const string Initial_Catalog = "initial catalog"; + internal const string Integrated_Security = "integrated security"; + internal const string Load_Balance_Timeout = "load balance timeout"; + internal const string MARS = "multipleactiveresultsets"; + internal const string Max_Pool_Size = "max pool size"; + internal const string Min_Pool_Size = "min pool size"; + internal const string MultiSubnetFailover = "multisubnetfailover"; + internal const string TransparentNetworkIPResolution = "transparentnetworkipresolution"; + internal const string Network_Library = "network library"; + internal const string Packet_Size = "packet size"; + internal const string Password = "password"; + internal const string Persist_Security_Info = "persist security info"; + internal const string Pooling = "pooling"; + internal const string TransactionBinding = "transaction binding"; + internal const string TrustServerCertificate = "trustservercertificate"; + internal const string Type_System_Version = "type system version"; + internal const string User_ID = "user id"; + internal const string User_Instance = "user instance"; + internal const string Workstation_Id = "workstation id"; + internal const string Replication = "replication"; + internal const string Connect_Retry_Count = "connectretrycount"; + internal const string Connect_Retry_Interval = "connectretryinterval"; + internal const string Authentication = "authentication"; + } // Constant for the number of duplicate options in the connnection string @@ -194,6 +201,9 @@ namespace System.Data.SqlClient { private readonly bool _replication; private readonly bool _userInstance; private readonly bool _multiSubnetFailover; + private readonly bool _transparentNetworkIPResolution; + private readonly SqlAuthenticationMethod _authType; + private readonly SqlConnectionColumnEncryptionSetting _columnEncryptionSetting; private readonly int _connectTimeout; private readonly int _loadBalanceTimeout; @@ -213,7 +223,6 @@ namespace System.Data.SqlClient { private readonly string _initialCatalog; private readonly string _password; private readonly string _userID; - private readonly string _networkLibrary; private readonly string _workstationId; @@ -240,7 +249,7 @@ namespace System.Data.SqlClient { // SQLPT 41700: Ignore ResetConnection=False (still validate the keyword/value) _connectionReset = ConvertValueToBoolean(KEY.Connection_Reset, DEFAULT.Connection_Reset); _contextConnection = ConvertValueToBoolean(KEY.Context_Connection, DEFAULT.Context_Connection); - _encrypt = ConvertValueToBoolean(KEY.Encrypt, DEFAULT.Encrypt); + _encrypt = ConvertValueToEncrypt(); _enlist = ConvertValueToBoolean(KEY.Enlist, ADP.IsWindowsNT); _mars = ConvertValueToBoolean(KEY.MARS, DEFAULT.MARS); _persistSecurityInfo = ConvertValueToBoolean(KEY.Persist_Security_Info, DEFAULT.Persist_Security_Info); @@ -248,6 +257,7 @@ namespace System.Data.SqlClient { _replication = ConvertValueToBoolean(KEY.Replication, DEFAULT.Replication); _userInstance = ConvertValueToBoolean(KEY.User_Instance, DEFAULT.User_Instance); _multiSubnetFailover = ConvertValueToBoolean(KEY.MultiSubnetFailover, DEFAULT.MultiSubnetFailover); + _transparentNetworkIPResolution = ConvertValueToBoolean(KEY.TransparentNetworkIPResolution, DEFAULT.TransparentNetworkIPResolution); _connectTimeout = ConvertValueToInt32(KEY.Connect_Timeout, DEFAULT.Connect_Timeout); _loadBalanceTimeout = ConvertValueToInt32(KEY.Load_Balance_Timeout, DEFAULT.Load_Balance_Timeout); @@ -268,6 +278,8 @@ namespace System.Data.SqlClient { _networkLibrary = ConvertValueToString(KEY.Network_Library, null); _password = ConvertValueToString(KEY.Password, DEFAULT.Password); _trustServerCertificate = ConvertValueToBoolean(KEY.TrustServerCertificate, DEFAULT.TrustServerCertificate); + _authType = ConvertValueToAuthenticationType(); + _columnEncryptionSetting = ConvertValueToColumnEncryptionSetting(); // Temporary string - this value is stored internally as an enum. string typeSystemVersionString = ConvertValueToString(KEY.Type_System_Version, null); @@ -446,6 +458,14 @@ namespace System.Data.SqlClient { if ((_connectRetryInterval < 1) || (_connectRetryInterval > 60)) { throw ADP.InvalidConnectRetryIntervalValue(); } + + if (Authentication != SqlAuthenticationMethod.NotSpecified && _integratedSecurity == true) { + throw SQL.AuthenticationAndIntegratedSecurity(); + } + + if (Authentication == SqlClient.SqlAuthenticationMethod.ActiveDirectoryIntegrated && (HasUserIdKeyword || HasPasswordKeyword)) { + throw SQL.IntegratedWithUserIDAndPassword(); + } } // This c-tor is used to create SSE and user instance connection strings when user instance is set to true @@ -463,35 +483,38 @@ namespace System.Data.SqlClient { _enlist = connectionOptions._enlist; } - _mars = connectionOptions._mars; - _persistSecurityInfo = connectionOptions._persistSecurityInfo; - _pooling = connectionOptions._pooling; - _replication = connectionOptions._replication; - _userInstance = userInstance; - _connectTimeout = connectionOptions._connectTimeout; - _loadBalanceTimeout = connectionOptions._loadBalanceTimeout; - _maxPoolSize = connectionOptions._maxPoolSize; - _minPoolSize = connectionOptions._minPoolSize; - _multiSubnetFailover = connectionOptions._multiSubnetFailover; - _packetSize = connectionOptions._packetSize; - _applicationName = connectionOptions._applicationName; - _attachDBFileName = connectionOptions._attachDBFileName; - _currentLanguage = connectionOptions._currentLanguage; - _dataSource = dataSource; - _localDBInstance = LocalDBAPI.GetLocalDbInstanceNameFromServerName(_dataSource); - _failoverPartner = connectionOptions._failoverPartner; - _initialCatalog = connectionOptions._initialCatalog; - _password = connectionOptions._password; - _userID = connectionOptions._userID; - _networkLibrary = connectionOptions._networkLibrary; - _workstationId = connectionOptions._workstationId; - _expandedAttachDBFilename = connectionOptions._expandedAttachDBFilename; - _typeSystemVersion = connectionOptions._typeSystemVersion; - _typeSystemAssemblyVersion =connectionOptions._typeSystemAssemblyVersion; - _transactionBinding = connectionOptions._transactionBinding; - _applicationIntent = connectionOptions._applicationIntent; - _connectRetryCount = connectionOptions._connectRetryCount; - _connectRetryInterval = connectionOptions._connectRetryInterval; + _mars = connectionOptions._mars; + _persistSecurityInfo = connectionOptions._persistSecurityInfo; + _pooling = connectionOptions._pooling; + _replication = connectionOptions._replication; + _userInstance = userInstance; + _connectTimeout = connectionOptions._connectTimeout; + _loadBalanceTimeout = connectionOptions._loadBalanceTimeout; + _maxPoolSize = connectionOptions._maxPoolSize; + _minPoolSize = connectionOptions._minPoolSize; + _multiSubnetFailover = connectionOptions._multiSubnetFailover; + _transparentNetworkIPResolution = connectionOptions._transparentNetworkIPResolution; + _packetSize = connectionOptions._packetSize; + _applicationName = connectionOptions._applicationName; + _attachDBFileName = connectionOptions._attachDBFileName; + _currentLanguage = connectionOptions._currentLanguage; + _dataSource = dataSource; + _localDBInstance = LocalDBAPI.GetLocalDbInstanceNameFromServerName(_dataSource); + _failoverPartner = connectionOptions._failoverPartner; + _initialCatalog = connectionOptions._initialCatalog; + _password = connectionOptions._password; + _userID = connectionOptions._userID; + _networkLibrary = connectionOptions._networkLibrary; + _workstationId = connectionOptions._workstationId; + _expandedAttachDBFilename = connectionOptions._expandedAttachDBFilename; + _typeSystemVersion = connectionOptions._typeSystemVersion; + _typeSystemAssemblyVersion = connectionOptions._typeSystemAssemblyVersion; + _transactionBinding = connectionOptions._transactionBinding; + _applicationIntent = connectionOptions._applicationIntent; + _connectRetryCount = connectionOptions._connectRetryCount; + _connectRetryInterval = connectionOptions._connectRetryInterval; + _authType = connectionOptions._authType; + _columnEncryptionSetting = connectionOptions._columnEncryptionSetting; ValidateValueLength(_dataSource, TdsEnums.MAXLEN_SERVERNAME, KEY.Data_Source); } @@ -511,7 +534,9 @@ namespace System.Data.SqlClient { internal bool Enlist { get { return _enlist; } } internal bool MARS { get { return _mars; } } internal bool MultiSubnetFailover { get { return _multiSubnetFailover; } } - + internal bool TransparentNetworkIPResolution { get { return _transparentNetworkIPResolution; } } + internal SqlAuthenticationMethod Authentication { get { return _authType; } } + internal SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { get { return _columnEncryptionSetting; } } internal bool PersistSecurityInfo { get { return _persistSecurityInfo; } } internal bool Pooling { get { return _pooling; } } internal bool Replication { get { return _replication; } } @@ -591,61 +616,64 @@ namespace System.Data.SqlClient { Hashtable hash = _sqlClientSynonyms; if (null == hash) { hash = new Hashtable(SqlConnectionStringBuilder.KeywordsCount + SynonymCount); - hash.Add(KEY.ApplicationIntent, KEY.ApplicationIntent); - hash.Add(KEY.Application_Name, KEY.Application_Name); - hash.Add(KEY.AsynchronousProcessing, KEY.AsynchronousProcessing); - hash.Add(KEY.AttachDBFilename, KEY.AttachDBFilename); - hash.Add(KEY.Connect_Timeout, KEY.Connect_Timeout); - hash.Add(KEY.Connection_Reset, KEY.Connection_Reset); - hash.Add(KEY.Context_Connection, KEY.Context_Connection); - hash.Add(KEY.Current_Language, KEY.Current_Language); - hash.Add(KEY.Data_Source, KEY.Data_Source); - hash.Add(KEY.Encrypt, KEY.Encrypt); - hash.Add(KEY.Enlist, KEY.Enlist); - hash.Add(KEY.FailoverPartner, KEY.FailoverPartner); - hash.Add(KEY.Initial_Catalog, KEY.Initial_Catalog); - hash.Add(KEY.Integrated_Security, KEY.Integrated_Security); - hash.Add(KEY.Load_Balance_Timeout, KEY.Load_Balance_Timeout); - hash.Add(KEY.MARS, KEY.MARS); - hash.Add(KEY.Max_Pool_Size, KEY.Max_Pool_Size); - hash.Add(KEY.Min_Pool_Size, KEY.Min_Pool_Size); - hash.Add(KEY.MultiSubnetFailover, KEY.MultiSubnetFailover); - hash.Add(KEY.Network_Library, KEY.Network_Library); - hash.Add(KEY.Packet_Size, KEY.Packet_Size); - hash.Add(KEY.Password, KEY.Password); - hash.Add(KEY.Persist_Security_Info, KEY.Persist_Security_Info); - hash.Add(KEY.Pooling, KEY.Pooling); - hash.Add(KEY.Replication, KEY.Replication); - hash.Add(KEY.TrustServerCertificate, KEY.TrustServerCertificate); - hash.Add(KEY.TransactionBinding, KEY.TransactionBinding); - hash.Add(KEY.Type_System_Version, KEY.Type_System_Version); - hash.Add(KEY.User_ID, KEY.User_ID); - hash.Add(KEY.User_Instance, KEY.User_Instance); - hash.Add(KEY.Workstation_Id, KEY.Workstation_Id); - hash.Add(KEY.Connect_Retry_Count, KEY.Connect_Retry_Count); - hash.Add(KEY.Connect_Retry_Interval, KEY.Connect_Retry_Interval); + hash.Add(KEY.ApplicationIntent, KEY.ApplicationIntent); + hash.Add(KEY.Application_Name, KEY.Application_Name); + hash.Add(KEY.AsynchronousProcessing, KEY.AsynchronousProcessing); + hash.Add(KEY.AttachDBFilename, KEY.AttachDBFilename); + hash.Add(KEY.Connect_Timeout, KEY.Connect_Timeout); + hash.Add(KEY.Connection_Reset, KEY.Connection_Reset); + hash.Add(KEY.Context_Connection, KEY.Context_Connection); + hash.Add(KEY.Current_Language, KEY.Current_Language); + hash.Add(KEY.Data_Source, KEY.Data_Source); + hash.Add(KEY.Encrypt, KEY.Encrypt); + hash.Add(KEY.Enlist, KEY.Enlist); + hash.Add(KEY.FailoverPartner, KEY.FailoverPartner); + hash.Add(KEY.Initial_Catalog, KEY.Initial_Catalog); + hash.Add(KEY.Integrated_Security, KEY.Integrated_Security); + hash.Add(KEY.Load_Balance_Timeout, KEY.Load_Balance_Timeout); + hash.Add(KEY.MARS, KEY.MARS); + hash.Add(KEY.Max_Pool_Size, KEY.Max_Pool_Size); + hash.Add(KEY.Min_Pool_Size, KEY.Min_Pool_Size); + hash.Add(KEY.MultiSubnetFailover, KEY.MultiSubnetFailover); + hash.Add(KEY.TransparentNetworkIPResolution, KEY.TransparentNetworkIPResolution); + hash.Add(KEY.Network_Library, KEY.Network_Library); + hash.Add(KEY.Packet_Size, KEY.Packet_Size); + hash.Add(KEY.Password, KEY.Password); + hash.Add(KEY.Persist_Security_Info, KEY.Persist_Security_Info); + hash.Add(KEY.Pooling, KEY.Pooling); + hash.Add(KEY.Replication, KEY.Replication); + hash.Add(KEY.TrustServerCertificate, KEY.TrustServerCertificate); + hash.Add(KEY.TransactionBinding, KEY.TransactionBinding); + hash.Add(KEY.Type_System_Version, KEY.Type_System_Version); + hash.Add(KEY.ColumnEncryptionSetting, KEY.ColumnEncryptionSetting); + hash.Add(KEY.User_ID, KEY.User_ID); + hash.Add(KEY.User_Instance, KEY.User_Instance); + hash.Add(KEY.Workstation_Id, KEY.Workstation_Id); + hash.Add(KEY.Connect_Retry_Count, KEY.Connect_Retry_Count); + hash.Add(KEY.Connect_Retry_Interval, KEY.Connect_Retry_Interval); + hash.Add(KEY.Authentication, KEY.Authentication); - hash.Add(SYNONYM.APP, KEY.Application_Name); - hash.Add(SYNONYM.Async, KEY.AsynchronousProcessing); - hash.Add(SYNONYM.EXTENDED_PROPERTIES, KEY.AttachDBFilename); - hash.Add(SYNONYM.INITIAL_FILE_NAME, KEY.AttachDBFilename); - hash.Add(SYNONYM.CONNECTION_TIMEOUT, KEY.Connect_Timeout); - hash.Add(SYNONYM.TIMEOUT, KEY.Connect_Timeout); - hash.Add(SYNONYM.LANGUAGE, KEY.Current_Language); - hash.Add(SYNONYM.ADDR, KEY.Data_Source); - hash.Add(SYNONYM.ADDRESS, KEY.Data_Source); - hash.Add(SYNONYM.NETWORK_ADDRESS, KEY.Data_Source); - hash.Add(SYNONYM.SERVER, KEY.Data_Source); - hash.Add(SYNONYM.DATABASE, KEY.Initial_Catalog); - hash.Add(SYNONYM.TRUSTED_CONNECTION, KEY.Integrated_Security); - hash.Add(SYNONYM.Connection_Lifetime, KEY.Load_Balance_Timeout); - hash.Add(SYNONYM.NET, KEY.Network_Library); - hash.Add(SYNONYM.NETWORK, KEY.Network_Library); - hash.Add(SYNONYM.Pwd, KEY.Password); - hash.Add(SYNONYM.PERSISTSECURITYINFO, KEY.Persist_Security_Info); - hash.Add(SYNONYM.UID, KEY.User_ID); - hash.Add(SYNONYM.User, KEY.User_ID); - hash.Add(SYNONYM.WSID, KEY.Workstation_Id); + hash.Add(SYNONYM.APP, KEY.Application_Name); + hash.Add(SYNONYM.Async, KEY.AsynchronousProcessing); + hash.Add(SYNONYM.EXTENDED_PROPERTIES, KEY.AttachDBFilename); + hash.Add(SYNONYM.INITIAL_FILE_NAME, KEY.AttachDBFilename); + hash.Add(SYNONYM.CONNECTION_TIMEOUT, KEY.Connect_Timeout); + hash.Add(SYNONYM.TIMEOUT, KEY.Connect_Timeout); + hash.Add(SYNONYM.LANGUAGE, KEY.Current_Language); + hash.Add(SYNONYM.ADDR, KEY.Data_Source); + hash.Add(SYNONYM.ADDRESS, KEY.Data_Source); + hash.Add(SYNONYM.NETWORK_ADDRESS, KEY.Data_Source); + hash.Add(SYNONYM.SERVER, KEY.Data_Source); + hash.Add(SYNONYM.DATABASE, KEY.Initial_Catalog); + hash.Add(SYNONYM.TRUSTED_CONNECTION, KEY.Integrated_Security); + hash.Add(SYNONYM.Connection_Lifetime, KEY.Load_Balance_Timeout); + hash.Add(SYNONYM.NET, KEY.Network_Library); + hash.Add(SYNONYM.NETWORK, KEY.Network_Library); + hash.Add(SYNONYM.Pwd, KEY.Password); + hash.Add(SYNONYM.PERSISTSECURITYINFO, KEY.Persist_Security_Info); + hash.Add(SYNONYM.UID, KEY.User_ID); + hash.Add(SYNONYM.User, KEY.User_ID); + hash.Add(SYNONYM.WSID, KEY.Workstation_Id); Debug.Assert(SqlConnectionStringBuilder.KeywordsCount + SynonymCount == hash.Count, "incorrect initial ParseSynonyms size"); _sqlClientSynonyms = hash; } @@ -750,6 +778,56 @@ namespace System.Data.SqlClient { } // ArgumentException and other types are raised as is (no wrapping) } + + internal SqlAuthenticationMethod ConvertValueToAuthenticationType() { + object value = base.Parsetable[KEY.Authentication]; + + string valStr = value as string; + if (valStr == null) { + return DEFAULT.Authentication; + } + + try { + return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(KEY.Authentication, valStr); + } + catch (FormatException e) { + throw ADP.InvalidConnectionOptionValue(KEY.Authentication, e); + } + catch (OverflowException e) { + throw ADP.InvalidConnectionOptionValue(KEY.Authentication, e); + } + } + + /// + /// Convert the value to SqlConnectionColumnEncryptionSetting. + /// + /// + internal SqlConnectionColumnEncryptionSetting ConvertValueToColumnEncryptionSetting() { + object value = base.Parsetable[KEY.ColumnEncryptionSetting]; + + string valStr = value as string; + if (valStr == null) { + return DEFAULT.ColumnEncryptionSetting; + } + + try { + return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(KEY.ColumnEncryptionSetting, valStr); + } + catch (FormatException e) { + throw ADP.InvalidConnectionOptionValue(KEY.ColumnEncryptionSetting, e); + } + catch (OverflowException e) { + throw ADP.InvalidConnectionOptionValue(KEY.ColumnEncryptionSetting, e); + } + } + + internal bool ConvertValueToEncrypt() { + // If the Authentication keyword is provided, default to Encrypt=true; + // otherwise keep old default for backwards compatibility + object authValue = base.Parsetable[KEY.Authentication]; + bool defaultEncryptValue = (authValue == null) ? DEFAULT.Encrypt : true; + return ConvertValueToBoolean(KEY.Encrypt, defaultEncryptValue); + } } } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionStringBuilder.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionStringBuilder.cs index b5184a87ac..8e7714341c 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -55,6 +55,8 @@ namespace System.Data.SqlClient { PacketSize, TypeSystemVersion, + Authentication, + ApplicationName, CurrentLanguage, WorkstationID, @@ -69,10 +71,14 @@ namespace System.Data.SqlClient { MultiSubnetFailover, + TransparentNetworkIPResolution, + ConnectRetryCount, ConnectRetryInterval, + ColumnEncryptionSetting, + // keep the count value last KeywordsCount } @@ -105,116 +111,124 @@ namespace System.Data.SqlClient { private int _connectRetryCount = DbConnectionStringDefaults.ConnectRetryCount; private int _connectRetryInterval = DbConnectionStringDefaults.ConnectRetryInterval; - private bool _asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing; - private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset; - private bool _contextConnection = DbConnectionStringDefaults.ContextConnection; - private bool _encrypt = DbConnectionStringDefaults.Encrypt; - private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; - private bool _enlist = DbConnectionStringDefaults.Enlist; - private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; - private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; - private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; - private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; - private bool _pooling = DbConnectionStringDefaults.Pooling; - private bool _replication = DbConnectionStringDefaults.Replication; - private bool _userInstance = DbConnectionStringDefaults.UserInstance; - + private bool _asynchronousProcessing = DbConnectionStringDefaults.AsynchronousProcessing; + private bool _connectionReset = DbConnectionStringDefaults.ConnectionReset; + private bool _contextConnection = DbConnectionStringDefaults.ContextConnection; + private bool _encrypt = DbConnectionStringDefaults.Encrypt; + private bool _trustServerCertificate = DbConnectionStringDefaults.TrustServerCertificate; + private bool _enlist = DbConnectionStringDefaults.Enlist; + private bool _integratedSecurity = DbConnectionStringDefaults.IntegratedSecurity; + private bool _multipleActiveResultSets = DbConnectionStringDefaults.MultipleActiveResultSets; + private bool _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; + private bool _transparentNetworkIPResolution= DbConnectionStringDefaults.TransparentNetworkIPResolution; + private bool _persistSecurityInfo = DbConnectionStringDefaults.PersistSecurityInfo; + private bool _pooling = DbConnectionStringDefaults.Pooling; + private bool _replication = DbConnectionStringDefaults.Replication; + private bool _userInstance = DbConnectionStringDefaults.UserInstance; + private SqlAuthenticationMethod _authentication = DbConnectionStringDefaults.Authentication; + private SqlConnectionColumnEncryptionSetting _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; static SqlConnectionStringBuilder() { string[] validKeywords = new string[KeywordsCount]; - validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent; - validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName; - validKeywords[(int)Keywords.AsynchronousProcessing] = DbConnectionStringKeywords.AsynchronousProcessing; - validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename; - validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; - validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; - validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; - validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage; - validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource; - validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt; - validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist; - validKeywords[(int)Keywords.FailoverPartner] = DbConnectionStringKeywords.FailoverPartner; - validKeywords[(int)Keywords.InitialCatalog] = DbConnectionStringKeywords.InitialCatalog; - validKeywords[(int)Keywords.IntegratedSecurity] = DbConnectionStringKeywords.IntegratedSecurity; - validKeywords[(int)Keywords.LoadBalanceTimeout] = DbConnectionStringKeywords.LoadBalanceTimeout; - validKeywords[(int)Keywords.MaxPoolSize] = DbConnectionStringKeywords.MaxPoolSize; - validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize; - validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets; - validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover; -// validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection; - validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary; - validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize; - validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password; - validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo; - validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling; - validKeywords[(int)Keywords.Replication] = DbConnectionStringKeywords.Replication; - validKeywords[(int)Keywords.TransactionBinding] = DbConnectionStringKeywords.TransactionBinding; - validKeywords[(int)Keywords.TrustServerCertificate] = DbConnectionStringKeywords.TrustServerCertificate; - validKeywords[(int)Keywords.TypeSystemVersion] = DbConnectionStringKeywords.TypeSystemVersion; - validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID; - validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance; - validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID; - validKeywords[(int)Keywords.ConnectRetryCount] = DbConnectionStringKeywords.ConnectRetryCount; - validKeywords[(int)Keywords.ConnectRetryInterval] = DbConnectionStringKeywords.ConnectRetryInterval; + validKeywords[(int)Keywords.ApplicationIntent] = DbConnectionStringKeywords.ApplicationIntent; + validKeywords[(int)Keywords.ApplicationName] = DbConnectionStringKeywords.ApplicationName; + validKeywords[(int)Keywords.AsynchronousProcessing] = DbConnectionStringKeywords.AsynchronousProcessing; + validKeywords[(int)Keywords.AttachDBFilename] = DbConnectionStringKeywords.AttachDBFilename; + validKeywords[(int)Keywords.ConnectionReset] = DbConnectionStringKeywords.ConnectionReset; + validKeywords[(int)Keywords.ContextConnection] = DbConnectionStringKeywords.ContextConnection; + validKeywords[(int)Keywords.ConnectTimeout] = DbConnectionStringKeywords.ConnectTimeout; + validKeywords[(int)Keywords.CurrentLanguage] = DbConnectionStringKeywords.CurrentLanguage; + validKeywords[(int)Keywords.DataSource] = DbConnectionStringKeywords.DataSource; + validKeywords[(int)Keywords.Encrypt] = DbConnectionStringKeywords.Encrypt; + validKeywords[(int)Keywords.Enlist] = DbConnectionStringKeywords.Enlist; + validKeywords[(int)Keywords.FailoverPartner] = DbConnectionStringKeywords.FailoverPartner; + validKeywords[(int)Keywords.InitialCatalog] = DbConnectionStringKeywords.InitialCatalog; + validKeywords[(int)Keywords.IntegratedSecurity] = DbConnectionStringKeywords.IntegratedSecurity; + validKeywords[(int)Keywords.LoadBalanceTimeout] = DbConnectionStringKeywords.LoadBalanceTimeout; + validKeywords[(int)Keywords.MaxPoolSize] = DbConnectionStringKeywords.MaxPoolSize; + validKeywords[(int)Keywords.MinPoolSize] = DbConnectionStringKeywords.MinPoolSize; + validKeywords[(int)Keywords.MultipleActiveResultSets] = DbConnectionStringKeywords.MultipleActiveResultSets; + validKeywords[(int)Keywords.MultiSubnetFailover] = DbConnectionStringKeywords.MultiSubnetFailover; + validKeywords[(int)Keywords.TransparentNetworkIPResolution] = DbConnectionStringKeywords.TransparentNetworkIPResolution; +// validKeywords[(int)Keywords.NamedConnection] = DbConnectionStringKeywords.NamedConnection; + validKeywords[(int)Keywords.NetworkLibrary] = DbConnectionStringKeywords.NetworkLibrary; + validKeywords[(int)Keywords.PacketSize] = DbConnectionStringKeywords.PacketSize; + validKeywords[(int)Keywords.Password] = DbConnectionStringKeywords.Password; + validKeywords[(int)Keywords.PersistSecurityInfo] = DbConnectionStringKeywords.PersistSecurityInfo; + validKeywords[(int)Keywords.Pooling] = DbConnectionStringKeywords.Pooling; + validKeywords[(int)Keywords.Replication] = DbConnectionStringKeywords.Replication; + validKeywords[(int)Keywords.TransactionBinding] = DbConnectionStringKeywords.TransactionBinding; + validKeywords[(int)Keywords.TrustServerCertificate] = DbConnectionStringKeywords.TrustServerCertificate; + validKeywords[(int)Keywords.TypeSystemVersion] = DbConnectionStringKeywords.TypeSystemVersion; + validKeywords[(int)Keywords.UserID] = DbConnectionStringKeywords.UserID; + validKeywords[(int)Keywords.UserInstance] = DbConnectionStringKeywords.UserInstance; + validKeywords[(int)Keywords.WorkstationID] = DbConnectionStringKeywords.WorkstationID; + validKeywords[(int)Keywords.ConnectRetryCount] = DbConnectionStringKeywords.ConnectRetryCount; + validKeywords[(int)Keywords.ConnectRetryInterval] = DbConnectionStringKeywords.ConnectRetryInterval; + validKeywords[(int)Keywords.Authentication] = DbConnectionStringKeywords.Authentication; + validKeywords[(int)Keywords.ColumnEncryptionSetting] = DbConnectionStringKeywords.ColumnEncryptionSetting; _validKeywords = validKeywords; Dictionary hash = new Dictionary(KeywordsCount + SqlConnectionString.SynonymCount, StringComparer.OrdinalIgnoreCase); - hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent); - hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName); - hash.Add(DbConnectionStringKeywords.AsynchronousProcessing, Keywords.AsynchronousProcessing); - hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset); - hash.Add(DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection); - hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource); - hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt); - hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist); - hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner); - hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog); - hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets); - hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize); - hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize); - hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover); -// hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection); - hash.Add(DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize); - hash.Add(DbConnectionStringKeywords.Password, Keywords.Password); - hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling); - hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication); - hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding); - hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate); - hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion); - hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID); - hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance); - hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID); - hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount); - hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval); + hash.Add(DbConnectionStringKeywords.ApplicationIntent, Keywords.ApplicationIntent); + hash.Add(DbConnectionStringKeywords.ApplicationName, Keywords.ApplicationName); + hash.Add(DbConnectionStringKeywords.AsynchronousProcessing, Keywords.AsynchronousProcessing); + hash.Add(DbConnectionStringKeywords.AttachDBFilename, Keywords.AttachDBFilename); + hash.Add(DbConnectionStringKeywords.ConnectTimeout, Keywords.ConnectTimeout); + hash.Add(DbConnectionStringKeywords.ConnectionReset, Keywords.ConnectionReset); + hash.Add(DbConnectionStringKeywords.ContextConnection, Keywords.ContextConnection); + hash.Add(DbConnectionStringKeywords.CurrentLanguage, Keywords.CurrentLanguage); + hash.Add(DbConnectionStringKeywords.DataSource, Keywords.DataSource); + hash.Add(DbConnectionStringKeywords.Encrypt, Keywords.Encrypt); + hash.Add(DbConnectionStringKeywords.Enlist, Keywords.Enlist); + hash.Add(DbConnectionStringKeywords.FailoverPartner, Keywords.FailoverPartner); + hash.Add(DbConnectionStringKeywords.InitialCatalog, Keywords.InitialCatalog); + hash.Add(DbConnectionStringKeywords.IntegratedSecurity, Keywords.IntegratedSecurity); + hash.Add(DbConnectionStringKeywords.LoadBalanceTimeout, Keywords.LoadBalanceTimeout); + hash.Add(DbConnectionStringKeywords.MultipleActiveResultSets, Keywords.MultipleActiveResultSets); + hash.Add(DbConnectionStringKeywords.MaxPoolSize, Keywords.MaxPoolSize); + hash.Add(DbConnectionStringKeywords.MinPoolSize, Keywords.MinPoolSize); + hash.Add(DbConnectionStringKeywords.MultiSubnetFailover, Keywords.MultiSubnetFailover); + hash.Add(DbConnectionStringKeywords.TransparentNetworkIPResolution, Keywords.TransparentNetworkIPResolution); +// hash.Add(DbConnectionStringKeywords.NamedConnection, Keywords.NamedConnection); + hash.Add(DbConnectionStringKeywords.NetworkLibrary, Keywords.NetworkLibrary); + hash.Add(DbConnectionStringKeywords.PacketSize, Keywords.PacketSize); + hash.Add(DbConnectionStringKeywords.Password, Keywords.Password); + hash.Add(DbConnectionStringKeywords.PersistSecurityInfo, Keywords.PersistSecurityInfo); + hash.Add(DbConnectionStringKeywords.Pooling, Keywords.Pooling); + hash.Add(DbConnectionStringKeywords.Replication, Keywords.Replication); + hash.Add(DbConnectionStringKeywords.TransactionBinding, Keywords.TransactionBinding); + hash.Add(DbConnectionStringKeywords.TrustServerCertificate, Keywords.TrustServerCertificate); + hash.Add(DbConnectionStringKeywords.TypeSystemVersion, Keywords.TypeSystemVersion); + hash.Add(DbConnectionStringKeywords.UserID, Keywords.UserID); + hash.Add(DbConnectionStringKeywords.UserInstance, Keywords.UserInstance); + hash.Add(DbConnectionStringKeywords.WorkstationID, Keywords.WorkstationID); + hash.Add(DbConnectionStringKeywords.ConnectRetryCount, Keywords.ConnectRetryCount); + hash.Add(DbConnectionStringKeywords.ConnectRetryInterval, Keywords.ConnectRetryInterval); + hash.Add(DbConnectionStringKeywords.Authentication, Keywords.Authentication); + hash.Add(DbConnectionStringKeywords.ColumnEncryptionSetting, Keywords.ColumnEncryptionSetting); - hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName); - hash.Add(DbConnectionStringSynonyms.Async, Keywords.AsynchronousProcessing); - hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename); - hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout); - hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage); - hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource); - hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog); - hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity); - hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout); - hash.Add(DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary); - hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password); - hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo); - hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID); - hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID); + hash.Add(DbConnectionStringSynonyms.APP, Keywords.ApplicationName); + hash.Add(DbConnectionStringSynonyms.Async, Keywords.AsynchronousProcessing); + hash.Add(DbConnectionStringSynonyms.EXTENDEDPROPERTIES, Keywords.AttachDBFilename); + hash.Add(DbConnectionStringSynonyms.INITIALFILENAME, Keywords.AttachDBFilename); + hash.Add(DbConnectionStringSynonyms.CONNECTIONTIMEOUT, Keywords.ConnectTimeout); + hash.Add(DbConnectionStringSynonyms.TIMEOUT, Keywords.ConnectTimeout); + hash.Add(DbConnectionStringSynonyms.LANGUAGE, Keywords.CurrentLanguage); + hash.Add(DbConnectionStringSynonyms.ADDR, Keywords.DataSource); + hash.Add(DbConnectionStringSynonyms.ADDRESS, Keywords.DataSource); + hash.Add(DbConnectionStringSynonyms.NETWORKADDRESS, Keywords.DataSource); + hash.Add(DbConnectionStringSynonyms.SERVER, Keywords.DataSource); + hash.Add(DbConnectionStringSynonyms.DATABASE, Keywords.InitialCatalog); + hash.Add(DbConnectionStringSynonyms.TRUSTEDCONNECTION, Keywords.IntegratedSecurity); + hash.Add(DbConnectionStringSynonyms.ConnectionLifetime, Keywords.LoadBalanceTimeout); + hash.Add(DbConnectionStringSynonyms.NET, Keywords.NetworkLibrary); + hash.Add(DbConnectionStringSynonyms.NETWORK, Keywords.NetworkLibrary); + hash.Add(DbConnectionStringSynonyms.Pwd, Keywords.Password); + hash.Add(DbConnectionStringSynonyms.PERSISTSECURITYINFO, Keywords.PersistSecurityInfo); + hash.Add(DbConnectionStringSynonyms.UID, Keywords.UserID); + hash.Add(DbConnectionStringSynonyms.User, Keywords.UserID); + hash.Add(DbConnectionStringSynonyms.WSID, Keywords.WorkstationID); Debug.Assert((KeywordsCount + SqlConnectionString.SynonymCount) == hash.Count, "initial expected size is incorrect"); _keywords = hash; @@ -238,45 +252,48 @@ namespace System.Data.SqlClient { if (null != value) { Keywords index = GetIndex(keyword); switch(index) { - case Keywords.ApplicationIntent: this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); break; - case Keywords.ApplicationName: ApplicationName = ConvertToString(value); break; - case Keywords.AttachDBFilename: AttachDBFilename = ConvertToString(value); break; - case Keywords.CurrentLanguage: CurrentLanguage = ConvertToString(value); break; - case Keywords.DataSource: DataSource = ConvertToString(value); break; - case Keywords.FailoverPartner: FailoverPartner = ConvertToString(value); break; - case Keywords.InitialCatalog: InitialCatalog = ConvertToString(value); break; -// case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; - case Keywords.NetworkLibrary: NetworkLibrary = ConvertToString(value); break; - case Keywords.Password: Password = ConvertToString(value); break; - case Keywords.UserID: UserID = ConvertToString(value); break; - case Keywords.TransactionBinding: TransactionBinding = ConvertToString(value); break; - case Keywords.TypeSystemVersion: TypeSystemVersion = ConvertToString(value); break; - case Keywords.WorkstationID: WorkstationID = ConvertToString(value); break; + case Keywords.ApplicationIntent: this.ApplicationIntent = ConvertToApplicationIntent(keyword, value); break; + case Keywords.ApplicationName: ApplicationName = ConvertToString(value); break; + case Keywords.AttachDBFilename: AttachDBFilename = ConvertToString(value); break; + case Keywords.CurrentLanguage: CurrentLanguage = ConvertToString(value); break; + case Keywords.DataSource: DataSource = ConvertToString(value); break; + case Keywords.FailoverPartner: FailoverPartner = ConvertToString(value); break; + case Keywords.InitialCatalog: InitialCatalog = ConvertToString(value); break; +// case Keywords.NamedConnection: NamedConnection = ConvertToString(value); break; + case Keywords.NetworkLibrary: NetworkLibrary = ConvertToString(value); break; + case Keywords.Password: Password = ConvertToString(value); break; + case Keywords.UserID: UserID = ConvertToString(value); break; + case Keywords.TransactionBinding: TransactionBinding = ConvertToString(value); break; + case Keywords.TypeSystemVersion: TypeSystemVersion = ConvertToString(value); break; + case Keywords.WorkstationID: WorkstationID = ConvertToString(value); break; - case Keywords.ConnectTimeout: ConnectTimeout = ConvertToInt32(value); break; - case Keywords.LoadBalanceTimeout: LoadBalanceTimeout = ConvertToInt32(value); break; - case Keywords.MaxPoolSize: MaxPoolSize = ConvertToInt32(value); break; - case Keywords.MinPoolSize: MinPoolSize = ConvertToInt32(value); break; - case Keywords.PacketSize: PacketSize = ConvertToInt32(value); break; + case Keywords.ConnectTimeout: ConnectTimeout = ConvertToInt32(value); break; + case Keywords.LoadBalanceTimeout: LoadBalanceTimeout = ConvertToInt32(value); break; + case Keywords.MaxPoolSize: MaxPoolSize = ConvertToInt32(value); break; + case Keywords.MinPoolSize: MinPoolSize = ConvertToInt32(value); break; + case Keywords.PacketSize: PacketSize = ConvertToInt32(value); break; - case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break; + case Keywords.IntegratedSecurity: IntegratedSecurity = ConvertToIntegratedSecurity(value); break; - case Keywords.AsynchronousProcessing: AsynchronousProcessing = ConvertToBoolean(value); break; + case Keywords.Authentication: Authentication = ConvertToAuthenticationType(keyword, value); break; + case Keywords.ColumnEncryptionSetting: ColumnEncryptionSetting = ConvertToColumnEncryptionSetting(keyword, value); break; + case Keywords.AsynchronousProcessing: AsynchronousProcessing = ConvertToBoolean(value); break; #pragma warning disable 618 // Obsolete ConnectionReset - case Keywords.ConnectionReset: ConnectionReset = ConvertToBoolean(value); break; + case Keywords.ConnectionReset: ConnectionReset = ConvertToBoolean(value); break; #pragma warning restore 618 - case Keywords.ContextConnection: ContextConnection = ConvertToBoolean(value); break; - case Keywords.Encrypt: Encrypt = ConvertToBoolean(value); break; - case Keywords.TrustServerCertificate: TrustServerCertificate = ConvertToBoolean(value); break; - case Keywords.Enlist: Enlist = ConvertToBoolean(value); break; - case Keywords.MultipleActiveResultSets: MultipleActiveResultSets = ConvertToBoolean(value); break; - case Keywords.MultiSubnetFailover: MultiSubnetFailover = ConvertToBoolean(value); break; - case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break; - case Keywords.Pooling: Pooling = ConvertToBoolean(value); break; - case Keywords.Replication: Replication = ConvertToBoolean(value); break; - case Keywords.UserInstance: UserInstance = ConvertToBoolean(value); break; - case Keywords.ConnectRetryCount: ConnectRetryCount = ConvertToInt32(value); break; - case Keywords.ConnectRetryInterval: ConnectRetryInterval = ConvertToInt32(value); break; + case Keywords.ContextConnection: ContextConnection = ConvertToBoolean(value); break; + case Keywords.Encrypt: Encrypt = ConvertToBoolean(value); break; + case Keywords.TrustServerCertificate: TrustServerCertificate = ConvertToBoolean(value); break; + case Keywords.Enlist: Enlist = ConvertToBoolean(value); break; + case Keywords.MultipleActiveResultSets: MultipleActiveResultSets = ConvertToBoolean(value); break; + case Keywords.MultiSubnetFailover: MultiSubnetFailover = ConvertToBoolean(value); break; + case Keywords.TransparentNetworkIPResolution: TransparentNetworkIPResolution = ConvertToBoolean(value); break; + case Keywords.PersistSecurityInfo: PersistSecurityInfo = ConvertToBoolean(value); break; + case Keywords.Pooling: Pooling = ConvertToBoolean(value); break; + case Keywords.Replication: Replication = ConvertToBoolean(value); break; + case Keywords.UserInstance: UserInstance = ConvertToBoolean(value); break; + case Keywords.ConnectRetryCount: ConnectRetryCount = ConvertToInt32(value); break; + case Keywords.ConnectRetryInterval: ConnectRetryInterval = ConvertToInt32(value); break; default: Debug.Assert(false, "unexpected keyword"); @@ -420,6 +437,22 @@ namespace System.Data.SqlClient { _encrypt = value; } } + + [DisplayName(DbConnectionStringKeywords.ColumnEncryptionSetting)] + [ResCategoryAttribute(Res.DataCategory_Security)] + [ResDescriptionAttribute(Res.TCE_DbConnectionString_ColumnEncryptionSetting)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { + get { return _columnEncryptionSetting; } + set { + if (!DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value)) { + throw ADP.InvalidEnumerationValue(typeof(SqlConnectionColumnEncryptionSetting), (int)value); + } + + SetColumnEncryptionSettingValue(value); + _columnEncryptionSetting = value; + } + } [DisplayName(DbConnectionStringKeywords.TrustServerCertificate)] [ResCategoryAttribute(Res.DataCategory_Security)] @@ -483,6 +516,22 @@ namespace System.Data.SqlClient { } } + [DisplayName(DbConnectionStringKeywords.Authentication)] + [ResCategoryAttribute(Res.DataCategory_Security)] + [ResDescriptionAttribute(Res.DbConnectionString_Authentication)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public SqlAuthenticationMethod Authentication { + get { return _authentication; } + set { + if (!DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value)) { + throw ADP.InvalidEnumerationValue(typeof(SqlAuthenticationMethod), (int)value); + } + + SetAuthenticationValue(value); + _authentication = value; + } + } + [DisplayName(DbConnectionStringKeywords.LoadBalanceTimeout)] [ResCategoryAttribute(Res.DataCategory_Pooling)] [ResDescriptionAttribute(Res.DbConnectionString_LoadBalanceTimeout)] @@ -584,6 +633,19 @@ namespace System.Data.SqlClient { _multiSubnetFailover = value; } } + + [DisplayName(DbConnectionStringKeywords.TransparentNetworkIPResolution)] + [ResCategoryAttribute(Res.DataCategory_Source)] + [ResDescriptionAttribute(Res.DbConnectionString_TransparentNetworkIPResolution)] + [RefreshPropertiesAttribute(RefreshProperties.All)] + public bool TransparentNetworkIPResolution + { + get { return _transparentNetworkIPResolution; } + set { + SetValue(DbConnectionStringKeywords.TransparentNetworkIPResolution, value); + _transparentNetworkIPResolution = value; + } + } /* [DisplayName(DbConnectionStringKeywords.NamedConnection)] [ResCategoryAttribute(Res.DataCategory_NamedConnectionString)] @@ -816,46 +878,69 @@ namespace System.Data.SqlClient { private static ApplicationIntent ConvertToApplicationIntent(string keyword, object value) { return DbConnectionStringBuilderUtil.ConvertToApplicationIntent(keyword, value); } + private static SqlAuthenticationMethod ConvertToAuthenticationType(string keyword, object value) { + return DbConnectionStringBuilderUtil.ConvertToAuthenticationType(keyword, value); + } + + /// + /// Convert to SqlConnectionColumnEncryptionSetting. + /// + /// + /// + private static SqlConnectionColumnEncryptionSetting ConvertToColumnEncryptionSetting(string keyword, object value) { + return DbConnectionStringBuilderUtil.ConvertToColumnEncryptionSetting(keyword, value); + } + + internal override string ConvertValueToString(object value) { + if (value is SqlAuthenticationMethod) { + return DbConnectionStringBuilderUtil.AuthenticationTypeToString((SqlAuthenticationMethod)value); + } + else { + return base.ConvertValueToString(value); + } + } private object GetAt(Keywords index) { switch(index) { - case Keywords.ApplicationIntent: return this.ApplicationIntent; - case Keywords.ApplicationName: return ApplicationName; - case Keywords.AsynchronousProcessing: return AsynchronousProcessing; - case Keywords.AttachDBFilename: return AttachDBFilename; - case Keywords.ConnectTimeout: return ConnectTimeout; + case Keywords.ApplicationIntent: return this.ApplicationIntent; + case Keywords.ApplicationName: return ApplicationName; + case Keywords.AsynchronousProcessing: return AsynchronousProcessing; + case Keywords.AttachDBFilename: return AttachDBFilename; + case Keywords.ConnectTimeout: return ConnectTimeout; #pragma warning disable 618 // Obsolete ConnectionReset - case Keywords.ConnectionReset: return ConnectionReset; + case Keywords.ConnectionReset: return ConnectionReset; #pragma warning restore 618 - case Keywords.ContextConnection: return ContextConnection; - case Keywords.CurrentLanguage: return CurrentLanguage; - case Keywords.DataSource: return DataSource; - case Keywords.Encrypt: return Encrypt; - case Keywords.Enlist: return Enlist; - case Keywords.FailoverPartner: return FailoverPartner; - case Keywords.InitialCatalog: return InitialCatalog; - case Keywords.IntegratedSecurity: return IntegratedSecurity; - case Keywords.LoadBalanceTimeout: return LoadBalanceTimeout; - case Keywords.MultipleActiveResultSets: return MultipleActiveResultSets; - case Keywords.MaxPoolSize: return MaxPoolSize; - case Keywords.MinPoolSize: return MinPoolSize; - case Keywords.MultiSubnetFailover: return MultiSubnetFailover; -// case Keywords.NamedConnection: return NamedConnection; - case Keywords.NetworkLibrary: return NetworkLibrary; - case Keywords.PacketSize: return PacketSize; - case Keywords.Password: return Password; - case Keywords.PersistSecurityInfo: return PersistSecurityInfo; - case Keywords.Pooling: return Pooling; - case Keywords.Replication: return Replication; - case Keywords.TransactionBinding: return TransactionBinding; - case Keywords.TrustServerCertificate: return TrustServerCertificate; - case Keywords.TypeSystemVersion: return TypeSystemVersion; - case Keywords.UserID: return UserID; - case Keywords.UserInstance: return UserInstance; - case Keywords.WorkstationID: return WorkstationID; - case Keywords.ConnectRetryCount: return ConnectRetryCount; - case Keywords.ConnectRetryInterval: return ConnectRetryInterval; - + case Keywords.ContextConnection: return ContextConnection; + case Keywords.CurrentLanguage: return CurrentLanguage; + case Keywords.DataSource: return DataSource; + case Keywords.Encrypt: return Encrypt; + case Keywords.Enlist: return Enlist; + case Keywords.FailoverPartner: return FailoverPartner; + case Keywords.InitialCatalog: return InitialCatalog; + case Keywords.IntegratedSecurity: return IntegratedSecurity; + case Keywords.LoadBalanceTimeout: return LoadBalanceTimeout; + case Keywords.MultipleActiveResultSets: return MultipleActiveResultSets; + case Keywords.MaxPoolSize: return MaxPoolSize; + case Keywords.MinPoolSize: return MinPoolSize; + case Keywords.MultiSubnetFailover: return MultiSubnetFailover; + case Keywords.TransparentNetworkIPResolution: return TransparentNetworkIPResolution; +// case Keywords.NamedConnection: return NamedConnection; + case Keywords.NetworkLibrary: return NetworkLibrary; + case Keywords.PacketSize: return PacketSize; + case Keywords.Password: return Password; + case Keywords.PersistSecurityInfo: return PersistSecurityInfo; + case Keywords.Pooling: return Pooling; + case Keywords.Replication: return Replication; + case Keywords.TransactionBinding: return TransactionBinding; + case Keywords.TrustServerCertificate: return TrustServerCertificate; + case Keywords.TypeSystemVersion: return TypeSystemVersion; + case Keywords.UserID: return UserID; + case Keywords.UserInstance: return UserInstance; + case Keywords.WorkstationID: return WorkstationID; + case Keywords.ConnectRetryCount: return ConnectRetryCount; + case Keywords.ConnectRetryInterval: return ConnectRetryInterval; + case Keywords.Authentication: return Authentication; + case Keywords.ColumnEncryptionSetting: return ColumnEncryptionSetting; default: Debug.Assert(false, "unexpected keyword"); throw ADP.KeywordNotSupported(_validKeywords[(int)index]); @@ -924,6 +1009,9 @@ namespace System.Data.SqlClient { case Keywords.AttachDBFilename: _attachDBFilename = DbConnectionStringDefaults.AttachDBFilename; break; + case Keywords.Authentication: + _authentication = DbConnectionStringDefaults.Authentication; + break; case Keywords.ConnectTimeout: _connectTimeout = DbConnectionStringDefaults.ConnectTimeout; break; @@ -969,6 +1057,9 @@ namespace System.Data.SqlClient { case Keywords.MultiSubnetFailover: _multiSubnetFailover = DbConnectionStringDefaults.MultiSubnetFailover; break; + case Keywords.TransparentNetworkIPResolution: + _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; + break; // case Keywords.NamedConnection: // _namedConnection = DbConnectionStringDefaults.NamedConnection; // break; @@ -1014,6 +1105,9 @@ namespace System.Data.SqlClient { case Keywords.WorkstationID: _workstationID = DbConnectionStringDefaults.WorkstationID; break; + case Keywords.ColumnEncryptionSetting: + _columnEncryptionSetting = DbConnectionStringDefaults.ColumnEncryptionSetting; + break; default: Debug.Assert(false, "unexpected keyword"); throw ADP.KeywordNotSupported(_validKeywords[(int)index]); @@ -1031,9 +1125,17 @@ namespace System.Data.SqlClient { base[keyword] = value; } private void SetApplicationIntentValue(ApplicationIntent value) { - Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "invalid value"); + Debug.Assert(DbConnectionStringBuilderUtil.IsValidApplicationIntentValue(value), "Invalid value for ApplicationIntent"); base[DbConnectionStringKeywords.ApplicationIntent] = DbConnectionStringBuilderUtil.ApplicationIntentToString(value); } + private void SetAuthenticationValue(SqlAuthenticationMethod value) { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidAuthenticationTypeValue(value), "Invalid value for AuthenticationType"); + base[DbConnectionStringKeywords.Authentication] = DbConnectionStringBuilderUtil.AuthenticationTypeToString(value); + } + private void SetColumnEncryptionSettingValue(SqlConnectionColumnEncryptionSetting value) { + Debug.Assert(DbConnectionStringBuilderUtil.IsValidColumnEncryptionSetting(value), "Invalid value for SqlConnectionColumnEncryptionSetting"); + base[DbConnectionStringKeywords.ColumnEncryptionSetting] = DbConnectionStringBuilderUtil.ColumnEncryptionSettingToString(value); + } public override bool ShouldSerialize(string keyword) { ADP.CheckArgumentNull(keyword, "keyword"); diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlDataReader.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/SqlDataReader.cs.REMOVED.git-id index c25d0438b8..7760fb7e8e 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlDataReader.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlDataReader.cs.REMOVED.git-id @@ -1 +1 @@ -ad91abda6282cb0d9187f875d0e7e995cc25c965 \ No newline at end of file +8e04c42254201997009d8e392d25ddbcad7d4f57 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlDelegatedTransaction.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlDelegatedTransaction.cs index 44fad3c95d..60edc0e400 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlDelegatedTransaction.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlDelegatedTransaction.cs @@ -11,6 +11,7 @@ namespace System.Data.SqlClient { using System.Data.Common; using System.Data.SqlClient; using System.Diagnostics; + using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Threading; @@ -19,6 +20,7 @@ namespace System.Data.SqlClient { sealed internal class SqlDelegatedTransaction : SysTx.IPromotableSinglePhaseNotification { private static int _objectTypeCount; private readonly int _objectID = Interlocked.Increment(ref _objectTypeCount); + private const int _globalTransactionsTokenVersionSizeInBytes = 4; // the size of the version in the PromotedDTCToken for Global Transactions internal int ObjectID { get { return _objectID; @@ -163,6 +165,20 @@ namespace System.Data.SqlClient { connection.ExecuteTransaction(SqlInternalConnection.TransactionRequest.Promote, null, IsolationLevel.Unspecified, _internalTransaction, true); returnValue = _connection.PromotedDTCToken; + + // For Global Transactions, we need to set the Transaction Id since we use a Non-MSDTC Promoter type. + if(_connection.IsGlobalTransaction) { + if (SysTxForGlobalTransactions.SetDistributedTransactionIdentifier == null) { + throw SQL.UnsupportedSysTxForGlobalTransactions(); + } + + if(!_connection.IsGlobalTransactionsEnabledForServer) { + throw SQL.GlobalTransactionsNotEnabled(); + } + + SysTxForGlobalTransactions.SetDistributedTransactionIdentifier.Invoke(_atomicTransaction, new object[] { this, GetGlobalTxnIdentifierFromToken() }); + } + promoteException = null; } catch (SqlException e) { @@ -453,5 +469,12 @@ namespace System.Data.SqlClient { } } + // Get the server-side Global Transaction Id from the PromotedDTCToken + // Skip first 4 bytes since they contain the version + private Guid GetGlobalTxnIdentifierFromToken() { + byte[] txnGuid = new byte[16]; + Array.Copy(_connection.PromotedDTCToken, _globalTransactionsTokenVersionSizeInBytes /* Skip the version */, txnGuid, 0, txnGuid.Length); + return new Guid(txnGuid); + } } } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlInfoMessageEventHandler.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlInfoMessageEventHandler.cs index c299cee510..d6c63875a8 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlInfoMessageEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlInfoMessageEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// blained +// laled //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnection.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnection.cs index 105f443236..6221416a11 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnection.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnection.cs @@ -30,7 +30,11 @@ namespace System.Data.SqlClient private bool _isEnlistedInTransaction; // is the server-side connection enlisted? true while we're enlisted, reset only after we send a null... private byte[] _promotedDTCToken; // token returned by the server when we promote transaction private byte[] _whereAbouts; // cache the whereabouts (DTC Address) for exporting - + + private bool _isGlobalTransaction = false; // Whether this is a Global Transaction (Non-MSDTC, Azure SQL DB Transaction) + private bool _isGlobalTransactionEnabledForServer = false; // Whether Global Transactions are enabled for this Azure SQL DB Server + private static readonly Guid _globalTransactionTMID = new Guid("1c742caf-6680-40ea-9c26-6b6846079764"); // ID of the Non-MSDTC, Azure SQL DB Transaction Manager + // if connection is not open: null // if connection is open: currently active database internal string CurrentDatabase { get; set; } @@ -147,7 +151,25 @@ namespace System.Data.SqlClient _promotedDTCToken = value; } } - + + internal bool IsGlobalTransaction { + get { + return _isGlobalTransaction; + } + set { + _isGlobalTransaction = value; + } + } + + internal bool IsGlobalTransactionsEnabledForServer { + get { + return _isGlobalTransactionEnabledForServer; + } + set { + _isGlobalTransactionEnabledForServer = value; + } + } + override public DbTransaction BeginTransaction(IsolationLevel iso) { return BeginSqlTransaction(iso, null, false); } @@ -389,8 +411,35 @@ namespace System.Data.SqlClient // our delegated transaction, and proceed to enlist // in the promoted one. - if (tx.EnlistPromotableSinglePhase(delegatedTransaction)) { - hasDelegatedTransaction = true; + // NOTE: Global Transactions is an Azure SQL DB only + // feature where the Transaction Manager (TM) is not + // MS-DTC. Sys.Tx added APIs to support Non MS-DTC + // promoter types/TM in .NET 4.6.1. Following directions + // from .NETFX shiproom, to avoid a "hard-dependency" + // (compile time) on Sys.Tx, we use reflection to invoke + // the new APIs. Further, the _isGlobalTransaction flag + // indicates that this is an Azure SQL DB Transaction + // that could be promoted to a Global Transaction (it's + // always false for on-prem Sql Server). The Promote() + // call in SqlDelegatedTransaction makes sure that the + // right Sys.Tx.dll is loaded and that Global Transactions + // are actually allowed for this Azure SQL DB. + + if (_isGlobalTransaction) { + if (SysTxForGlobalTransactions.EnlistPromotableSinglePhase == null) { + // This could be a local Azure SQL DB transaction. + hasDelegatedTransaction = tx.EnlistPromotableSinglePhase(delegatedTransaction); + } + else { + hasDelegatedTransaction = (bool)SysTxForGlobalTransactions.EnlistPromotableSinglePhase.Invoke(tx, new object[] { delegatedTransaction, _globalTransactionTMID }); + } + } + else { + // This is an MS-DTC distributed transaction + hasDelegatedTransaction = tx.EnlistPromotableSinglePhase(delegatedTransaction); + } + + if (hasDelegatedTransaction) { this.DelegatedTransaction = delegatedTransaction; @@ -438,16 +487,25 @@ namespace System.Data.SqlClient byte[] cookie = null; - if (null == _whereAbouts) { - byte[] dtcAddress = GetDTCAddress(); + if (_isGlobalTransaction) { + if (SysTxForGlobalTransactions.GetPromotedToken == null) { + throw SQL.UnsupportedSysTxForGlobalTransactions(); + } - if (null == dtcAddress) { - throw SQL.CannotGetDTCAddress(); - } - _whereAbouts = dtcAddress; + cookie = (byte[])SysTxForGlobalTransactions.GetPromotedToken.Invoke(tx, null); + } + else { + if (null == _whereAbouts) { + byte[] dtcAddress = GetDTCAddress(); + + if (null == dtcAddress) { + throw SQL.CannotGetDTCAddress(); + } + _whereAbouts = dtcAddress; + } + + cookie = GetTransactionCookie(tx, _whereAbouts); } - - cookie = GetTransactionCookie(tx, _whereAbouts); // send cookie to server to finish enlistment PropagateTransactionCookie(cookie); diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs deleted file mode 100644 index 82e3138fd7..0000000000 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs +++ /dev/null @@ -1,2009 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Copyright (c) Microsoft Corporation. All rights reserved. -// -// [....] -// [....] -//------------------------------------------------------------------------------ - -namespace System.Data.SqlClient -{ - using System; - using System.Collections.Generic; - using System.Data; - using System.Data.Common; - using System.Data.ProviderBase; - using System.Diagnostics; - using System.Globalization; - using System.Reflection; - using System.Runtime.CompilerServices; - using System.Runtime.ConstrainedExecution; - using System.Runtime.InteropServices; - using System.Security; - using System.Security.Permissions; - using System.Text; - using System.Threading; - using SysTx = System.Transactions; - using System.Diagnostics.CodeAnalysis; - using System.Threading.Tasks; - - - internal class SessionStateRecord { - internal bool _recoverable; - internal UInt32 _version; - internal Int32 _dataLength; - internal byte[] _data; - } - - internal class SessionData { - internal const int _maxNumberOfSessionStates = 256; - internal UInt32 _tdsVersion; - internal bool _encrypted; - - internal string _database; - internal SqlCollation _collation; - internal string _language; - - internal string _initialDatabase; - internal SqlCollation _initialCollation; - internal string _initialLanguage; - - internal byte _unrecoverableStatesCount = 0; - internal Dictionary> _resolvedAliases; - -#if DEBUG - internal bool _debugReconnectDataApplied; -#endif - - internal SessionStateRecord[] _delta = new SessionStateRecord[_maxNumberOfSessionStates]; - internal bool _deltaDirty = false; - internal byte[][] _initialState = new byte[_maxNumberOfSessionStates][]; - - public SessionData(SessionData recoveryData) { - _initialDatabase = recoveryData._initialDatabase; - _initialCollation = recoveryData._initialCollation; - _initialLanguage = recoveryData._initialLanguage; - _resolvedAliases = recoveryData._resolvedAliases; - - for (int i = 0; i < _maxNumberOfSessionStates; i++) { - if (recoveryData._initialState[i] != null) { - _initialState[i] = (byte[])recoveryData._initialState[i].Clone(); - } - } - } - - public SessionData() { - _resolvedAliases = new Dictionary>(2); - } - - public void Reset() { - _database = null; - _collation = null; - _language = null; - if (_deltaDirty) { - _delta = new SessionStateRecord[_maxNumberOfSessionStates]; - _deltaDirty = false; - } - _unrecoverableStatesCount = 0; - } - - [Conditional("DEBUG")] - public void AssertUnrecoverableStateCountIsCorrect() { - byte unrecoverableCount = 0; - foreach (var state in _delta) { - if (state != null && !state._recoverable) - unrecoverableCount++; - } - Debug.Assert(unrecoverableCount == _unrecoverableStatesCount, "Unrecoverable count does not match"); - } - } - - sealed internal class SqlInternalConnectionTds : SqlInternalConnection, IDisposable { - // CONNECTION AND STATE VARIABLES - private readonly SqlConnectionPoolGroupProviderInfo _poolGroupProviderInfo; // will only be null when called for ChangePassword, or creating SSE User Instance - private TdsParser _parser; - private SqlLoginAck _loginAck; - private SqlCredential _credential; - - // Connection Resiliency - private bool _sessionRecoveryRequested; - internal bool _sessionRecoveryAcknowledged; - internal SessionData _currentSessionData; // internal for use from TdsParser only, otehr should use CurrentSessionData property that will fix database and language - private SessionData _recoverySessionData; - - internal SessionData CurrentSessionData { - get { - if (_currentSessionData != null) { - _currentSessionData._database = CurrentDatabase; - _currentSessionData._language = _currentLanguage; - } - return _currentSessionData; - } - } - - // FOR POOLING - private bool _fConnectionOpen = false; - - // FOR CONNECTION RESET MANAGEMENT - private bool _fResetConnection; - private string _originalDatabase; - private string _currentFailoverPartner; // only set by ENV change from server - private string _originalLanguage; - private string _currentLanguage; - private int _currentPacketSize; - private int _asyncCommandCount; // number of async Begins minus number of async Ends. - - // FOR SSE - private string _instanceName = String.Empty; - - // FOR NOTIFICATIONS - private DbConnectionPoolIdentity _identity; // Used to lookup info for notification matching Start(). - - // FOR SYNCHRONIZATION IN TdsParser - // How to use these locks: - // 1. Whenever writing to the connection (with the exception of Cancellation) the _parserLock MUST be taken - // 2. _parserLock will also be taken during close (to prevent closing in the middle of a write) - // 3. Whenever you have the _parserLock and are calling a method that would cause the connection to close if it failed (with the exception of any writing method), you MUST set ThreadHasParserLockForClose to true - // * This is to prevent the connection deadlocking with itself (since you already have the _parserLock, and Closing the connection will attempt to re-take that lock) - // * It is safe to set ThreadHasParserLockForClose to true when writing as well, but it is unneccesary - // * If you have a method that takes _parserLock, it is a good idea check ThreadHasParserLockForClose first (if you don't expect _parserLock to be taken by something higher on the stack, then you should at least assert that it is false) - // 4. ThreadHasParserLockForClose is thread-specific - this means that you must set it to false before returning a Task, and set it back to true in the continuation - // 5. ThreadHasParserLockForClose should only be modified if you currently own the _parserLock - // 6. Reading ThreadHasParserLockForClose is thread-safe - internal class SyncAsyncLock - { - SemaphoreSlim semaphore = new SemaphoreSlim(1); - - internal void Wait(bool canReleaseFromAnyThread) - { - Monitor.Enter(semaphore); // semaphore is used as lock object, no relation to SemaphoreSlim.Wait/Release methods - if (canReleaseFromAnyThread || semaphore.CurrentCount==0) { - semaphore.Wait(); - if (canReleaseFromAnyThread) { - Monitor.Exit(semaphore); - } - else { - semaphore.Release(); - } - } - } - - internal void Wait(bool canReleaseFromAnyThread, int timeout, ref bool lockTaken) { - lockTaken = false; - bool hasMonitor = false; - try { - Monitor.TryEnter(semaphore, timeout, ref hasMonitor); // semaphore is used as lock object, no relation to SemaphoreSlim.Wait/Release methods - if (hasMonitor) { - if ((canReleaseFromAnyThread) || (semaphore.CurrentCount == 0)) { - if (semaphore.Wait(timeout)) { - if (canReleaseFromAnyThread) { - Monitor.Exit(semaphore); - hasMonitor = false; - } - else { - semaphore.Release(); - } - lockTaken = true; - } - } - else { - lockTaken = true; - } - } - } - finally - { - if ((!lockTaken) && (hasMonitor)) { - Monitor.Exit(semaphore); - } - } - } - - internal void Release() - { - if (semaphore.CurrentCount==0) { // semaphore methods were used for locking - semaphore.Release(); - } - else { - Monitor.Exit(semaphore); - } - } - - - internal bool CanBeReleasedFromAnyThread { - get { - return semaphore.CurrentCount==0; - } - } - - // Necessary but not sufficient condition for thread to have lock (since sempahore may be obtained by any thread) - internal bool ThreadMayHaveLock() { - return Monitor.IsEntered(semaphore) || semaphore.CurrentCount == 0; - } - } - - - internal SyncAsyncLock _parserLock = new SyncAsyncLock(); - private int _threadIdOwningParserLock = -1; - - private SqlConnectionTimeoutErrorInternal timeoutErrorInternal; - - internal SqlConnectionTimeoutErrorInternal TimeoutErrorInternal - { - get { return timeoutErrorInternal; } - } - - // OTHER STATE VARIABLES AND REFERENCES - - internal Guid _clientConnectionId = Guid.Empty; - - // Routing information (ROR) - RoutingInfo _routingInfo = null; - private Guid _originalClientConnectionId = Guid.Empty; - private string _routingDestination = null; - - // although the new password is generally not used it must be passed to the c'tor - // the new Login7 packet will always write out the new password (or a length of zero and no bytes if not present) - // - internal SqlInternalConnectionTds( - DbConnectionPoolIdentity identity, - SqlConnectionString connectionOptions, - SqlCredential credential, - object providerInfo, - string newPassword, - SecureString newSecurePassword, - bool redirectedUserInstance, - SqlConnectionString userConnectionOptions = null, // NOTE: userConnectionOptions may be different to connectionOptions if the connection string has been expanded (see SqlConnectionString.Expand) - SessionData reconnectSessionData = null) : base(connectionOptions) { - -#if DEBUG - if (reconnectSessionData != null) { - reconnectSessionData._debugReconnectDataApplied = true; - } - try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath - if (userConnectionOptions != null) { - // As mentioned above, userConnectionOptions may be different to connectionOptions, so we need to demand on the correct connection string - userConnectionOptions.DemandPermission(); - } - else { - connectionOptions.DemandPermission(); - } - } - catch(System.Security.SecurityException) { - System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath"); - throw; - } -#endif - Debug.Assert(reconnectSessionData == null || connectionOptions.ConnectRetryCount > 0, "Reconnect data supplied with CR turned off"); - - if (connectionOptions.ConnectRetryCount > 0) { - _recoverySessionData = reconnectSessionData; - if (reconnectSessionData == null) { - _currentSessionData = new SessionData(); - } - else { - _currentSessionData = new SessionData(_recoverySessionData); - _originalDatabase = _recoverySessionData._initialDatabase; - _originalLanguage = _recoverySessionData._initialLanguage; - } - } - - if (connectionOptions.UserInstance && InOutOfProcHelper.InProc) { - throw SQL.UserInstanceNotAvailableInProc(); - } - - _identity = identity; - Debug.Assert(newSecurePassword != null || newPassword != null, "cannot have both new secure change password and string based change password to be null"); - Debug.Assert(credential == null || (String.IsNullOrEmpty(connectionOptions.UserID) && String.IsNullOrEmpty(connectionOptions.Password)), "cannot mix the new secure password system and the connection string based password"); - - Debug.Assert(credential == null || !connectionOptions.IntegratedSecurity, "Cannot use SqlCredential and Integrated Security"); - Debug.Assert(credential == null || !connectionOptions.ContextConnection, "Cannot use SqlCredential with context connection"); - - _poolGroupProviderInfo = (SqlConnectionPoolGroupProviderInfo)providerInfo; - _fResetConnection = connectionOptions.ConnectionReset; - if (_fResetConnection && _recoverySessionData == null) { - _originalDatabase = connectionOptions.InitialCatalog; - _originalLanguage = connectionOptions.CurrentLanguage; - } - - timeoutErrorInternal = new SqlConnectionTimeoutErrorInternal(); - _credential = credential; - - _parserLock.Wait(canReleaseFromAnyThread:false); - ThreadHasParserLockForClose = true; // In case of error, let ourselves know that we already own the parser lock - RuntimeHelpers.PrepareConstrainedRegions(); - try { -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - - RuntimeHelpers.PrepareConstrainedRegions(); - try { - tdsReliabilitySection.Start(); -#else - { -#endif //DEBUG - var timeout = TimeoutTimer.StartSecondsTimeout(connectionOptions.ConnectTimeout); - OpenLoginEnlist(timeout, connectionOptions, credential, newPassword, newSecurePassword, redirectedUserInstance); - } -#if DEBUG - finally { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - } - catch (System.OutOfMemoryException) { - DoomThisConnection(); - throw; - } - catch (System.StackOverflowException) { - DoomThisConnection(); - throw; - } - catch (System.Threading.ThreadAbortException) { - DoomThisConnection(); - throw; - } - finally { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - } - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, constructed new TDS internal connection\n", ObjectID); - } - } - - internal Guid ClientConnectionId { - get { - return _clientConnectionId; - } - } - - internal Guid OriginalClientConnectionId { - get { - return _originalClientConnectionId; - } - } - - internal string RoutingDestination { - get { - return _routingDestination; - } - } - - override internal SqlInternalTransaction CurrentTransaction { - get { - return _parser.CurrentTransaction; - } - } - - override internal SqlInternalTransaction AvailableInternalTransaction { - get { - return _parser._fResetConnection ? null : CurrentTransaction; - } - } - - - override internal SqlInternalTransaction PendingTransaction { - get { - return _parser.PendingTransaction; - } - } - - internal DbConnectionPoolIdentity Identity { - get { - return _identity; - } - } - - internal string InstanceName { - get { - return _instanceName; - } - } - - override internal bool IsLockedForBulkCopy { - get { - return (!Parser.MARSOn && Parser._physicalStateObj.BcpLock); - } - } - - override protected internal bool IsNonPoolableTransactionRoot { - get { - return IsTransactionRoot && (!IsKatmaiOrNewer || null == Pool); - } - } - - override internal bool IsShiloh { - get { - return _loginAck.isVersion8; - } - } - - override internal bool IsYukonOrNewer { - get { - return _parser.IsYukonOrNewer; - } - } - - override internal bool IsKatmaiOrNewer { - get { - return _parser.IsKatmaiOrNewer; - } - } - - internal int PacketSize { - get { - return _currentPacketSize; - } - } - - internal TdsParser Parser { - get { - return _parser; - } - } - - internal string ServerProvidedFailOverPartner { - get { - return _currentFailoverPartner; - } - } - - internal SqlConnectionPoolGroupProviderInfo PoolGroupProviderInfo { - get { - return _poolGroupProviderInfo; - } - } - - override protected bool ReadyToPrepareTransaction { - get { - // - bool result = (null == FindLiveReader(null)); // can't prepare with a live data reader... - return result; - } - } - - override public string ServerVersion { - get { - return(String.Format((IFormatProvider)null, "{0:00}.{1:00}.{2:0000}", _loginAck.majorVersion, - (short) _loginAck.minorVersion, _loginAck.buildNum)); - } - } - - /// - /// Get boolean that specifies whether an enlisted transaction can be unbound from - /// the connection when that transaction completes. - /// - /// - /// This override always returns false. - /// - /// - /// The SqlInternalConnectionTds.CheckEnlistedTransactionBinding method handles implicit unbinding for disposed transactions. - /// - protected override bool UnbindOnTransactionCompletion - { - get - { - return false; - } - } - - - //////////////////////////////////////////////////////////////////////////////////////// - // GENERAL METHODS - //////////////////////////////////////////////////////////////////////////////////////// - [SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters")] // copied from Triaged.cs - override protected void ChangeDatabaseInternal(string database) { - // MDAC 73598 - add brackets around database - database = SqlConnection.FixupDatabaseTransactionName(database); - Threading.Tasks.Task executeTask = _parser.TdsExecuteSQLBatch("use " + database, ConnectionOptions.ConnectTimeout, null, _parser._physicalStateObj, sync: true); - Debug.Assert(executeTask == null, "Shouldn't get a task when doing sync writes"); - _parser.Run(RunBehavior.UntilDone, null, null, null, _parser._physicalStateObj); - } - - override public void Dispose() { - if (Bid.AdvancedOn) { - Bid.Trace(" %d# disposing\n", base.ObjectID); - } - try { - TdsParser parser = Interlocked.Exchange(ref _parser, null); // guard against multiple concurrent dispose calls -- Delegated Transactions might cause this. - - Debug.Assert(parser != null && _fConnectionOpen || parser == null && !_fConnectionOpen, "Unexpected state on dispose"); - if (null != parser) { - parser.Disconnect(); - } - } - finally { // UNDONE: MDAC 77928 - // close will always close, even if exception is thrown - // remember to null out any object references - _loginAck = null; - _fConnectionOpen = false; // mark internal connection as closed - } - base.Dispose(); - } - - override internal void ValidateConnectionForExecute(SqlCommand command) { - TdsParser parser = _parser; - if ((parser == null) || (parser.State == TdsParserState.Broken) || (parser.State == TdsParserState.Closed)) { - throw ADP.ClosedConnectionError(); - } - else { - SqlDataReader reader = null; - if (parser.MARSOn) { - if (null != command) { // command can't have datareader already associated with it - reader = FindLiveReader(command); - } - } - else { // single execution/datareader per connection - if (_asyncCommandCount > 0) { - throw SQL.MARSUnspportedOnConnection(); - } - - reader = FindLiveReader(null); - } - if (null != reader) { - // if MARS is on, then a datareader associated with the command exists - // or if MARS is off, then a datareader exists - throw ADP.OpenReaderExists(); // MDAC 66411 - } - else if (!parser.MARSOn && parser._physicalStateObj._pendingData) { - parser.DrainData(parser._physicalStateObj); - } - Debug.Assert(!parser._physicalStateObj._pendingData, "Should not have a busy physicalStateObject at this point!"); - - parser.RollbackOrphanedAPITransactions(); - } - } - - /// - /// Validate the enlisted transaction state, taking into consideration the ambient transaction and transaction unbinding mode. - /// If there is no enlisted transaction, this method is a nop. - /// - /// - /// - /// This method must be called while holding a lock on the SqlInternalConnection instance, - /// to ensure we don't accidentally execute after the transaction has completed on a different thread, - /// causing us to unwittingly execute in auto-commit mode. - /// - /// - /// - /// When using Explicit transaction unbinding, - /// verify that the enlisted transaction is active and equal to the current ambient transaction. - /// - /// - /// - /// When using Implicit transaction unbinding, - /// verify that the enlisted transaction is active. - /// If it is not active, and the transaction object has been diposed, unbind from the transaction. - /// If it is not active and not disposed, throw an exception. - /// - /// - internal void CheckEnlistedTransactionBinding() - { - // If we are enlisted in a transaction, check that transaction is active. - // When using explicit transaction unbinding, also verify that the enlisted transaction is the current transaction. - SysTx.Transaction enlistedTransaction = EnlistedTransaction; - - if (enlistedTransaction != null) - { - bool requireExplicitTransactionUnbind = ConnectionOptions.TransactionBinding == SqlConnectionString.TransactionBindingEnum.ExplicitUnbind; - - if (requireExplicitTransactionUnbind) - { - SysTx.Transaction currentTransaction = SysTx.Transaction.Current; - - if (SysTx.TransactionStatus.Active != enlistedTransaction.TransactionInformation.Status || !enlistedTransaction.Equals(currentTransaction)) - { - throw ADP.TransactionConnectionMismatch(); - } - } - else // implicit transaction unbind - { - if (SysTx.TransactionStatus.Active != enlistedTransaction.TransactionInformation.Status) - { - if (EnlistedTransactionDisposed) - { - DetachTransaction(enlistedTransaction, true); - } - else - { - throw ADP.TransactionCompletedButNotDisposed(); - } - } - } - } - } - - internal override bool IsConnectionAlive(bool throwOnException) - { - bool isAlive = false; -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - - RuntimeHelpers.PrepareConstrainedRegions(); - try - { - tdsReliabilitySection.Start(); -#endif //DEBUG - - isAlive = _parser._physicalStateObj.IsConnectionAlive(throwOnException); - -#if DEBUG - } - finally - { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - return isAlive; - } - - //////////////////////////////////////////////////////////////////////////////////////// - // POOLING METHODS - //////////////////////////////////////////////////////////////////////////////////////// - - override protected void Activate(SysTx.Transaction transaction) { - FailoverPermissionDemand(); // Demand for unspecified failover pooled connections - - // When we're required to automatically enlist in transactions and - // there is one we enlist in it. On the other hand, if there isn't a - // transaction and we are currently enlisted in one, then we - // unenlist from it. - // - // Regardless of whether we're required to automatically enlist, - // when there is not a current transaction, we cannot leave the - // connection enlisted in a transaction. - if (null != transaction){ - if (ConnectionOptions.Enlist) { - Enlist(transaction); - } - } - else { - Enlist(null); - } - } - - override protected void InternalDeactivate() { - // When we're deactivated, the user must have called End on all - // the async commands, or we don't know that we're in a state that - // we can recover from. We doom the connection in this case, to - // prevent odd cases when we go to the wire. - if (0 != _asyncCommandCount) { - DoomThisConnection(); - } - - // If we're deactivating with a delegated transaction, we - // should not be cleaning up the parser just yet, that will - // cause our transaction to be rolled back and the connection - // to be reset. We'll get called again once the delegated - // transaction is completed and we can do it all then. - if (!IsNonPoolableTransactionRoot) { - Debug.Assert(null != _parser || IsConnectionDoomed, "Deactivating a disposed connection?"); - if (_parser != null) { - - _parser.Deactivate(IsConnectionDoomed); - - if (!IsConnectionDoomed) { - ResetConnection(); - } - } - } - } - - [SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters")] // copied from Triaged.cs - private void ResetConnection() { - // For implicit pooled connections, if connection reset behavior is specified, - // reset the database and language properties back to default. It is important - // to do this on activate so that the hashtable is correct before SqlConnection - // obtains a clone. - - Debug.Assert(!HasLocalTransactionFromAPI, "Upon ResetConnection SqlInternalConnectionTds has a currently ongoing local transaction."); - Debug.Assert(!_parser._physicalStateObj._pendingData, "Upon ResetConnection SqlInternalConnectionTds has pending data."); - - if (_fResetConnection) { - // Ensure we are either going against shiloh, or we are not enlisted in a - // distributed transaction - otherwise don't reset! - if (IsShiloh) { - // Prepare the parser for the connection reset - the next time a trip - // to the server is made. - _parser.PrepareResetConnection(IsTransactionRoot && !IsNonPoolableTransactionRoot); - } - else if (!IsEnlistedInTransaction) { - // If not Shiloh, we are going against Sphinx. On Sphinx, we - // may only reset if not enlisted in a distributed transaction. - try { - // execute sp - Threading.Tasks.Task executeTask = _parser.TdsExecuteSQLBatch("sp_reset_connection", 30, null, _parser._physicalStateObj, sync: true); - Debug.Assert(executeTask == null, "Shouldn't get a task when doing sync writes"); - _parser.Run(RunBehavior.UntilDone, null, null, null, _parser._physicalStateObj); - } - catch (Exception e) { - // - if (!ADP.IsCatchableExceptionType(e)) { - throw; - } - - DoomThisConnection(); - ADP.TraceExceptionWithoutRethrow(e); - } - } - - // Reset hashtable values, since calling reset will not send us env_changes. - CurrentDatabase = _originalDatabase; - _currentLanguage = _originalLanguage; - } - } - - internal void DecrementAsyncCount() { - Interlocked.Decrement(ref _asyncCommandCount); - } - - internal void IncrementAsyncCount() { - Interlocked.Increment(ref _asyncCommandCount); - } - - - //////////////////////////////////////////////////////////////////////////////////////// - // LOCAL TRANSACTION METHODS - //////////////////////////////////////////////////////////////////////////////////////// - - override internal void DisconnectTransaction(SqlInternalTransaction internalTransaction) { - TdsParser parser = Parser; - - if (null != parser) { - parser.DisconnectTransaction(internalTransaction); - } - } - - internal void ExecuteTransaction(TransactionRequest transactionRequest, string name, IsolationLevel iso) { - ExecuteTransaction(transactionRequest, name, iso, null, false); - } - - override internal void ExecuteTransaction(TransactionRequest transactionRequest, string name, IsolationLevel iso, SqlInternalTransaction internalTransaction, bool isDelegateControlRequest) { - if (IsConnectionDoomed) { // doomed means we can't do anything else... - if (transactionRequest == TransactionRequest.Rollback - || transactionRequest == TransactionRequest.IfRollback) { - return; - } - throw SQL.ConnectionDoomed(); - } - - if (transactionRequest == TransactionRequest.Commit - || transactionRequest == TransactionRequest.Rollback - || transactionRequest == TransactionRequest.IfRollback) { - if (!Parser.MARSOn && Parser._physicalStateObj.BcpLock) { - throw SQL.ConnectionLockedForBcpEvent(); - } - } - - string transactionName = (null == name) ? String.Empty : name; - - if (!_parser.IsYukonOrNewer) { - ExecuteTransactionPreYukon(transactionRequest, transactionName, iso, internalTransaction); - } - else { - ExecuteTransactionYukon(transactionRequest, transactionName, iso, internalTransaction, isDelegateControlRequest); - } - } - - // This function will not handle idle connection resiliency, as older servers will not support it - internal void ExecuteTransactionPreYukon( - TransactionRequest transactionRequest, - string transactionName, - IsolationLevel iso, - SqlInternalTransaction internalTransaction) { - StringBuilder sqlBatch = new StringBuilder(); - - switch (iso) { - case IsolationLevel.Unspecified: - break; - case IsolationLevel.ReadCommitted: - sqlBatch.Append(TdsEnums.TRANS_READ_COMMITTED); - sqlBatch.Append(";"); - break; - case IsolationLevel.ReadUncommitted: - sqlBatch.Append(TdsEnums.TRANS_READ_UNCOMMITTED); - sqlBatch.Append(";"); - break; - case IsolationLevel.RepeatableRead: - sqlBatch.Append(TdsEnums.TRANS_REPEATABLE_READ); - sqlBatch.Append(";"); - break; - case IsolationLevel.Serializable: - sqlBatch.Append(TdsEnums.TRANS_SERIALIZABLE); - sqlBatch.Append(";"); - break; - case IsolationLevel.Snapshot: - throw SQL.SnapshotNotSupported(IsolationLevel.Snapshot); - - case IsolationLevel.Chaos: - throw SQL.NotSupportedIsolationLevel(iso); - - default: - throw ADP.InvalidIsolationLevel(iso); - } - - if (!ADP.IsEmpty(transactionName)) { - transactionName = " " + SqlConnection.FixupDatabaseTransactionName(transactionName); - } - - switch (transactionRequest) { - case TransactionRequest.Begin: - sqlBatch.Append(TdsEnums.TRANS_BEGIN); - sqlBatch.Append(transactionName); - break; - case TransactionRequest.Promote: - Debug.Assert(false, "Promote called with transaction name or on pre-Yukon!"); - break; - case TransactionRequest.Commit: - sqlBatch.Append(TdsEnums.TRANS_COMMIT); - sqlBatch.Append(transactionName); - break; - case TransactionRequest.Rollback: - sqlBatch.Append(TdsEnums.TRANS_ROLLBACK); - sqlBatch.Append(transactionName); - break; - case TransactionRequest.IfRollback: - sqlBatch.Append(TdsEnums.TRANS_IF_ROLLBACK); - sqlBatch.Append(transactionName); - break; - case TransactionRequest.Save: - sqlBatch.Append(TdsEnums.TRANS_SAVE); - sqlBatch.Append(transactionName); - break; - default: - Debug.Assert(false, "Unknown transaction type"); - break; - } - - Threading.Tasks.Task executeTask = _parser.TdsExecuteSQLBatch(sqlBatch.ToString(), ConnectionOptions.ConnectTimeout, null, _parser._physicalStateObj, sync: true); - Debug.Assert(executeTask == null, "Shouldn't get a task when doing sync writes"); - _parser.Run(RunBehavior.UntilDone, null, null, null, _parser._physicalStateObj); - - // Prior to Yukon, we didn't have any transaction tokens to manage, - // or any feedback to know when one was created, so we just presume - // that successful execution of the request caused the transaction - // to be created, and we set that on the parser. - if (TransactionRequest.Begin == transactionRequest) { - Debug.Assert(null != internalTransaction, "Begin Transaction request without internal transaction"); - _parser.CurrentTransaction = internalTransaction; - } - } - - - internal void ExecuteTransactionYukon( - TransactionRequest transactionRequest, - string transactionName, - IsolationLevel iso, - SqlInternalTransaction internalTransaction, - bool isDelegateControlRequest) { - TdsEnums.TransactionManagerRequestType requestType = TdsEnums.TransactionManagerRequestType.Begin; - TdsEnums.TransactionManagerIsolationLevel isoLevel = TdsEnums.TransactionManagerIsolationLevel.ReadCommitted; - - switch (iso) { - case IsolationLevel.Unspecified: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.Unspecified; - break; - case IsolationLevel.ReadCommitted: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.ReadCommitted; - break; - case IsolationLevel.ReadUncommitted: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.ReadUncommitted; - break; - case IsolationLevel.RepeatableRead: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.RepeatableRead; - break; - case IsolationLevel.Serializable: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.Serializable; - break; - case IsolationLevel.Snapshot: - isoLevel = TdsEnums.TransactionManagerIsolationLevel.Snapshot; - break; - case IsolationLevel.Chaos: - throw SQL.NotSupportedIsolationLevel(iso); - default: - throw ADP.InvalidIsolationLevel(iso); - } - - TdsParserStateObject stateObj = _parser._physicalStateObj; - TdsParser parser = _parser; - bool mustPutSession = false; - bool releaseConnectionLock = false; - - Debug.Assert(!ThreadHasParserLockForClose || _parserLock.ThreadMayHaveLock(), "Thread claims to have parser lock, but lock is not taken"); - if (!ThreadHasParserLockForClose) { - _parserLock.Wait(canReleaseFromAnyThread:false); - ThreadHasParserLockForClose = true; // In case of error, let the connection know that we already own the parser lock - releaseConnectionLock = true; - } - try { - switch (transactionRequest) { - case TransactionRequest.Begin: - requestType = TdsEnums.TransactionManagerRequestType.Begin; - break; - case TransactionRequest.Promote: - requestType = TdsEnums.TransactionManagerRequestType.Promote; - break; - case TransactionRequest.Commit: - requestType = TdsEnums.TransactionManagerRequestType.Commit; - break; - case TransactionRequest.IfRollback: - // Map IfRollback to Rollback since with Yukon and beyond we should never need - // the if since the server will inform us when transactions have completed - // as a result of an error on the server. - case TransactionRequest.Rollback: - requestType = TdsEnums.TransactionManagerRequestType.Rollback; - break; - case TransactionRequest.Save: - requestType = TdsEnums.TransactionManagerRequestType.Save; - break; - default: - Debug.Assert(false, "Unknown transaction type"); - break; - } - - // only restore if connection lock has been taken within the function - if (internalTransaction != null && internalTransaction.RestoreBrokenConnection && releaseConnectionLock) { - Task reconnectTask = internalTransaction.Parent.Connection.ValidateAndReconnect(() => { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - releaseConnectionLock = false; - }, 0); - if (reconnectTask != null) { - AsyncHelper.WaitForCompletion(reconnectTask, 0); // there is no specific timeout for BeginTransaction, uses ConnectTimeout - internalTransaction.ConnectionHasBeenRestored = true; - return; - } - } - - - - // SQLBUDT #20010853 - Promote, Commit and Rollback requests for - // delegated transactions often happen while there is an open result - // set, so we need to handle them by using a different MARS session, - // otherwise we'll write on the physical state objects while someone - // else is using it. When we don't have MARS enabled, we need to - // lock the physical state object to syncronize it's use at least - // until we increment the open results count. Once it's been - // incremented the delegated transaction requests will fail, so they - // won't stomp on anything. - // - // We need to keep this lock through the duration of the TM reqeuest - // so that we won't hijack a different request's data stream and a - // different request won't hijack ours, so we have a lock here on - // an object that the ExecTMReq will also lock, but since we're on - // the same thread, the lock is a no-op. - - if (null != internalTransaction && internalTransaction.IsDelegated) { - if (_parser.MARSOn) { - stateObj = _parser.GetSession(this); - mustPutSession = true; - } - else if (internalTransaction.OpenResultsCount != 0) { - throw SQL.CannotCompleteDelegatedTransactionWithOpenResults(this); - } - } - - // SQLBU #406778 - _parser may be nulled out during TdsExecuteTrannsactionManagerRequest. - // Only use local variable after this call. - _parser.TdsExecuteTransactionManagerRequest(null, requestType, transactionName, isoLevel, - ConnectionOptions.ConnectTimeout, internalTransaction, stateObj, isDelegateControlRequest); - } - finally { - if (mustPutSession) { - parser.PutSession(stateObj); - } - - if (releaseConnectionLock) { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - } - } - } - - //////////////////////////////////////////////////////////////////////////////////////// - // DISTRIBUTED TRANSACTION METHODS - //////////////////////////////////////////////////////////////////////////////////////// - - override internal void DelegatedTransactionEnded() { - // - base.DelegatedTransactionEnded(); - } - - override protected byte[] GetDTCAddress() { - byte[] dtcAddress = _parser.GetDTCAddress(ConnectionOptions.ConnectTimeout, _parser.GetSession(this)); - Debug.Assert(null != dtcAddress, "null dtcAddress?"); - return dtcAddress; - } - - override protected void PropagateTransactionCookie(byte[] cookie) { - _parser.PropagateDistributedTransaction(cookie, ConnectionOptions.ConnectTimeout, _parser._physicalStateObj); - } - - //////////////////////////////////////////////////////////////////////////////////////// - // LOGIN-RELATED METHODS - //////////////////////////////////////////////////////////////////////////////////////// - - private void CompleteLogin(bool enlistOK) { - _parser.Run(RunBehavior.UntilDone, null, null, null, _parser._physicalStateObj); - - if (_routingInfo == null) { // ROR should not affect state of connection recovery - if (!_sessionRecoveryAcknowledged) { - _currentSessionData = null; - if (_recoverySessionData != null) { - throw SQL.CR_NoCRAckAtReconnection(this); - } - } - if (_currentSessionData != null && _recoverySessionData==null) { - _currentSessionData._initialDatabase = CurrentDatabase; - _currentSessionData._initialCollation = _currentSessionData._collation; - _currentSessionData._initialLanguage = _currentLanguage; - } - bool isEncrypted = _parser.EncryptionOptions == EncryptionOptions.ON; - if (_recoverySessionData != null) { - if (_recoverySessionData._encrypted != isEncrypted) { - throw SQL.CR_EncryptionChanged(this); - } - } - if (_currentSessionData != null) { - _currentSessionData._encrypted = isEncrypted; - } - _recoverySessionData = null; - } - - Debug.Assert(SniContext.Snix_Login == Parser._physicalStateObj.SniContext, String.Format((IFormatProvider)null, "SniContext should be Snix_Login; actual Value: {0}", Parser._physicalStateObj.SniContext)); - _parser._physicalStateObj.SniContext = SniContext.Snix_EnableMars; - _parser.EnableMars(); - - _fConnectionOpen = true; // mark connection as open - - if (Bid.AdvancedOn) { - Bid.Trace(" Post-Login Phase: Server connection obtained.\n"); - } - - // for non-pooled connections, enlist in a distributed transaction - // if present - and user specified to enlist - if(enlistOK && ConnectionOptions.Enlist) { - _parser._physicalStateObj.SniContext = SniContext.Snix_AutoEnlist; - SysTx.Transaction tx = ADP.GetCurrentTransaction(); - Enlist(tx); - } - _parser._physicalStateObj.SniContext=SniContext.Snix_Login; - } - - private void Login(ServerInfo server, TimeoutTimer timeout, string newPassword, SecureString newSecurePassword) { - // create a new login record - SqlLogin login = new SqlLogin(); - - // gather all the settings the user set in the connection string or - // properties and do the login - CurrentDatabase = server.ResolvedDatabaseName; - _currentPacketSize = ConnectionOptions.PacketSize; - _currentLanguage = ConnectionOptions.CurrentLanguage; - - int timeoutInSeconds = 0; - - // If a timeout tick value is specified, compute the timeout based - // upon the amount of time left in seconds. - if (!timeout.IsInfinite) - { - long t = timeout.MillisecondsRemaining/1000; - if ((long)Int32.MaxValue > t) - { - timeoutInSeconds = (int)t; - } - } - - login.timeout = timeoutInSeconds; - login.userInstance = ConnectionOptions.UserInstance; - login.hostName = ConnectionOptions.ObtainWorkstationId(); - login.userName = ConnectionOptions.UserID; - login.password = ConnectionOptions.Password; - login.applicationName = ConnectionOptions.ApplicationName; - - login.language = _currentLanguage; - if (!login.userInstance) { // Do not send attachdbfilename or database to SSE primary instance - login.database = CurrentDatabase;; - login.attachDBFilename = ConnectionOptions.AttachDBFilename; - } - - // VSTS#795621 - Ensure ServerName is Sent During TdsLogin To Enable Sql Azure Connectivity. - // Using server.UserServerName (versus ConnectionOptions.DataSource) since TdsLogin requires - // serverName to always be non-null. - login.serverName = server.UserServerName; - - login.useReplication = ConnectionOptions.Replication; - login.useSSPI = ConnectionOptions.IntegratedSecurity; - login.packetSize = _currentPacketSize; - login.newPassword = newPassword; - login.readOnlyIntent = ConnectionOptions.ApplicationIntent == ApplicationIntent.ReadOnly; - login.credential = _credential; - if (newSecurePassword != null) { - login.newSecurePassword = newSecurePassword; - } - - TdsEnums.FeatureExtension requestedFeatures = TdsEnums.FeatureExtension.None; - if (ConnectionOptions.ConnectRetryCount>0) { - requestedFeatures |= TdsEnums.FeatureExtension.SessionRecovery; - _sessionRecoveryRequested = true; - } - - _parser.TdsLogin(login, requestedFeatures, _recoverySessionData); - } - - private void LoginFailure() { - Bid.Trace(" %d#\n", ObjectID); - - // If the parser was allocated and we failed, then we must have failed on - // either the Connect or Login, either way we should call Disconnect. - // Disconnect can be called if the connection is already closed - becomes - // no-op, so no issues there. - if (_parser != null) { - - _parser.Disconnect(); - } - // - } - - private void OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, - string newPassword, SecureString newSecurePassword, bool redirectedUserInstance) { - bool useFailoverPartner; // should we use primary or secondary first - ServerInfo dataSource = new ServerInfo(connectionOptions); - string failoverPartner; - - if (null != PoolGroupProviderInfo) { - useFailoverPartner = PoolGroupProviderInfo.UseFailoverPartner; - failoverPartner = PoolGroupProviderInfo.FailoverPartner; - } - else { - // Only ChangePassword or SSE User Instance comes through this code path. - useFailoverPartner = false; - failoverPartner = ConnectionOptions.FailoverPartner; - } - - timeoutErrorInternal.SetInternalSourceType(useFailoverPartner ? SqlConnectionInternalSourceType.Failover : SqlConnectionInternalSourceType.Principle); - - bool hasFailoverPartner = !ADP.IsEmpty(failoverPartner); - - // Open the connection and Login - try { - timeoutErrorInternal.SetAndBeginPhase(SqlConnectionTimeoutErrorPhase.PreLoginBegin); - if (hasFailoverPartner) { - timeoutErrorInternal.SetFailoverScenario(true); // this is a failover scenario - LoginWithFailover( - useFailoverPartner, - dataSource, - failoverPartner, - newPassword, - newSecurePassword, - redirectedUserInstance, - connectionOptions, - credential, - timeout); - } - else { - timeoutErrorInternal.SetFailoverScenario(false); // not a failover scenario - LoginNoFailover(dataSource, newPassword, newSecurePassword, redirectedUserInstance, - connectionOptions, credential, timeout); - } - timeoutErrorInternal.EndPhase(SqlConnectionTimeoutErrorPhase.PostLogin); - } - catch (Exception e) { - // - if (ADP.IsCatchableExceptionType(e)) { - LoginFailure(); - } - throw; - } - timeoutErrorInternal.SetAllCompleteMarker(); - -#if DEBUG - _parser._physicalStateObj.InvalidateDebugOnlyCopyOfSniContext(); -#endif - } - - // Is the given Sql error one that should prevent retrying - // to connect. - private bool IsDoNotRetryConnectError(SqlException exc) { - - return (TdsEnums.LOGON_FAILED == exc.Number) // actual logon failed, i.e. bad password - || (TdsEnums.PASSWORD_EXPIRED == exc.Number) // actual logon failed, i.e. password isExpired - || (TdsEnums.IMPERSONATION_FAILED == exc.Number) // Insuficient privelege for named pipe, among others - || exc._doNotReconnect; // Exception explicitly supressed reconnection attempts - } - - // Attempt to login to a host that does not have a failover partner - // - // Will repeatedly attempt to connect, but back off between each attempt so as not to clog the network. - // Back off period increases for first few failures: 100ms, 200ms, 400ms, 800ms, then 1000ms for subsequent attempts - // - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // DEVNOTE: The logic in this method is paralleled by the logic in LoginWithFailover. - // Changes to either one should be examined to see if they need to be reflected in the other - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - private void LoginNoFailover(ServerInfo serverInfo, string newPassword, SecureString newSecurePassword, bool redirectedUserInstance, - SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) { - - Debug.Assert(object.ReferenceEquals(connectionOptions, this.ConnectionOptions), "ConnectionOptions argument and property must be the same"); // consider removing the argument - int routingAttempts = 0; - ServerInfo originalServerInfo = serverInfo; // serverInfo may end up pointing to new object due to routing, original object is used to set CurrentDatasource - - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, host=%ls\n", ObjectID, serverInfo.UserServerName); - } - int sleepInterval = 100; //milliseconds to sleep (back off) between attempts. - - ResolveExtendedServerName(serverInfo, !redirectedUserInstance, connectionOptions); - - long timeoutUnitInterval = 0; - - if (connectionOptions.MultiSubnetFailover) { - // Determine unit interval - if (timeout.IsInfinite) { - timeoutUnitInterval = checked((long)(ADP.FailoverTimeoutStep * (1000L * ADP.DefaultConnectionTimeout))); - } - else { - timeoutUnitInterval = checked((long)(ADP.FailoverTimeoutStep * timeout.MillisecondsRemaining)); - } - } - // Only three ways out of this loop: - // 1) Successfully connected - // 2) Parser threw exception while main timer was expired - // 3) Parser threw logon failure-related exception - // 4) Parser threw exception in post-initial connect code, - // such as pre-login handshake or during actual logon. (parser state != Closed) - // - // Of these methods, only #1 exits normally. This preserves the call stack on the exception - // back into the parser for the error cases. - int attemptNumber = 0; - TimeoutTimer intervalTimer = null; - while(true) { - - if (connectionOptions.MultiSubnetFailover) { - attemptNumber++; - // Set timeout for this attempt, but don't exceed original timer - long nextTimeoutInterval = checked(timeoutUnitInterval * attemptNumber); - long milliseconds = timeout.MillisecondsRemaining; - if (nextTimeoutInterval > milliseconds) { - nextTimeoutInterval = milliseconds; - } - intervalTimer = TimeoutTimer.StartMillisecondsTimeout(nextTimeoutInterval); - } - - // Re-allocate parser each time to make sure state is known - // RFC 50002652 - if parser was created by previous attempt, dispose it to properly close the socket, if created - if (_parser != null) - _parser.Disconnect(); - - _parser = new TdsParser(ConnectionOptions.MARS, ConnectionOptions.Asynchronous); - Debug.Assert(SniContext.Undefined== Parser._physicalStateObj.SniContext, String.Format((IFormatProvider)null, "SniContext should be Undefined; actual Value: {0}", Parser._physicalStateObj.SniContext)); - - try { - // - - - AttemptOneLogin( serverInfo, - newPassword, - newSecurePassword, - !connectionOptions.MultiSubnetFailover, // ignore timeout for SniOpen call unless MSF - connectionOptions.MultiSubnetFailover ? intervalTimer : timeout); - - if (connectionOptions.MultiSubnetFailover && null != ServerProvidedFailOverPartner) { - // connection succeeded: trigger exception if server sends failover partner and MultiSubnetFailover is used - throw SQL.MultiSubnetFailoverWithFailoverPartner(serverProvidedFailoverPartner: true, internalConnection: this); - } - - if (_routingInfo != null) { - Bid.Trace(" Routed to %ls", serverInfo.ExtendedServerName); - - if (routingAttempts > 0) { - throw SQL.ROR_RecursiveRoutingNotSupported(this); - } - - if (timeout.IsExpired) { - throw SQL.ROR_TimeoutAfterRoutingInfo(this); - } - - serverInfo = new ServerInfo(ConnectionOptions, _routingInfo, serverInfo.ResolvedServerName); - timeoutErrorInternal.SetInternalSourceType(SqlConnectionInternalSourceType.RoutingDestination); - _originalClientConnectionId = _clientConnectionId; - _routingDestination = serverInfo.UserServerName; - - // restore properties that could be changed by the environment tokens - _currentPacketSize = ConnectionOptions.PacketSize; - _currentLanguage = _originalLanguage = ConnectionOptions.CurrentLanguage; - CurrentDatabase = _originalDatabase = ConnectionOptions.InitialCatalog; - _currentFailoverPartner = null; - _instanceName = String.Empty; - - routingAttempts++; - - continue; // repeat the loop, but skip code reserved for failed connections (after the catch) - } - else { - break; // leave the while loop -- we've successfully connected - } - } - catch (SqlException sqlex) { - if (null == _parser - || TdsParserState.Closed != _parser.State - || IsDoNotRetryConnectError(sqlex) - || timeout.IsExpired) { // no more time to try again - throw; // Caller will call LoginFailure() - } - - // Check sleep interval to make sure we won't exceed the timeout - // Do this in the catch block so we can re-throw the current exception - if (timeout.MillisecondsRemaining <= sleepInterval) { - throw; - } - - // - } - - // We only get here when we failed to connect, but are going to re-try - - // Switch to failover logic if the server provided a partner - if (null != ServerProvidedFailOverPartner) { - if (connectionOptions.MultiSubnetFailover) { - // connection failed: do not allow failover to server-provided failover partner if MultiSubnetFailover is set - throw SQL.MultiSubnetFailoverWithFailoverPartner(serverProvidedFailoverPartner: true, internalConnection: this); - } - Debug.Assert(ConnectionOptions.ApplicationIntent != ApplicationIntent.ReadOnly, "FAILOVER+AppIntent=RO: Should already fail (at LOGSHIPNODE in OnEnvChange)"); - - timeoutErrorInternal.ResetAndRestartPhase(); - timeoutErrorInternal.SetAndBeginPhase(SqlConnectionTimeoutErrorPhase.PreLoginBegin); - timeoutErrorInternal.SetInternalSourceType(SqlConnectionInternalSourceType.Failover); - timeoutErrorInternal.SetFailoverScenario(true); // this is a failover scenario - LoginWithFailover( - true, // start by using failover partner, since we already failed to connect to the primary - serverInfo, - ServerProvidedFailOverPartner, - newPassword, - newSecurePassword, - redirectedUserInstance, - connectionOptions, - credential, - timeout); - return; // LoginWithFailover successfully connected and handled entire connection setup - } - - // Sleep for a bit to prevent clogging the network with requests, - // then update sleep interval for next iteration (max 1 second interval) - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, sleeping %d{milisec}\n", ObjectID, sleepInterval); - } - Thread.Sleep(sleepInterval); - sleepInterval = (sleepInterval < 500) ? sleepInterval * 2 : 1000; - } - - if (null != PoolGroupProviderInfo) { - // We must wait for CompleteLogin to finish for to have the - // env change from the server to know its designated failover - // partner; save this information in _currentFailoverPartner. - PoolGroupProviderInfo.FailoverCheck(this, false, connectionOptions, ServerProvidedFailOverPartner); - } - CurrentDataSource = originalServerInfo.UserServerName; - } - - // Attempt to login to a host that has a failover partner - // - // Connection & timeout sequence is - // First target, timeout = interval * 1 - // second target, timeout = interval * 1 - // sleep for 100ms - // First target, timeout = interval * 2 - // Second target, timeout = interval * 2 - // sleep for 200ms - // First Target, timeout = interval * 3 - // etc. - // - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // DEVNOTE: The logic in this method is paralleled by the logic in LoginNoFailover. - // Changes to either one should be examined to see if they need to be reflected in the other - // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - private void LoginWithFailover( - bool useFailoverHost, - ServerInfo primaryServerInfo, - string failoverHost, - string newPassword, - SecureString newSecurePassword, - bool redirectedUserInstance, - SqlConnectionString connectionOptions, - SqlCredential credential, - TimeoutTimer timeout - ) { - - Debug.Assert(!connectionOptions.MultiSubnetFailover, "MultiSubnetFailover should not be set if failover partner is used"); - - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, useFailover=%d{bool}, primary=", ObjectID, useFailoverHost); - Bid.PutStr(primaryServerInfo.UserServerName); - Bid.PutStr(", failover="); - Bid.PutStr(failoverHost); - Bid.PutStr("\n"); - } - int sleepInterval = 100; //milliseconds to sleep (back off) between attempts. - long timeoutUnitInterval; - - string protocol = ConnectionOptions.NetworkLibrary; - ServerInfo failoverServerInfo = new ServerInfo(connectionOptions, failoverHost); - - ResolveExtendedServerName(primaryServerInfo, !redirectedUserInstance, connectionOptions); - if (null == ServerProvidedFailOverPartner) {// No point in resolving the failover partner when we're going to override it below - // Don't resolve aliases if failover == primary // - ResolveExtendedServerName(failoverServerInfo, !redirectedUserInstance && failoverHost != primaryServerInfo.UserServerName, connectionOptions); - } - - // Determine unit interval - if (timeout.IsInfinite) { - timeoutUnitInterval = checked((long) ADP.FailoverTimeoutStep * ADP.TimerFromSeconds(ADP.DefaultConnectionTimeout)); - } - else { - timeoutUnitInterval = checked((long) (ADP.FailoverTimeoutStep * timeout.MillisecondsRemaining)); - } - - // Initialize loop variables - bool failoverDemandDone = false; // have we demanded for partner information yet (as necessary)? - int attemptNumber = 0; - - // Only three ways out of this loop: - // 1) Successfully connected - // 2) Parser threw exception while main timer was expired - // 3) Parser threw logon failure-related exception (LOGON_FAILED, PASSWORD_EXPIRED, etc) - // - // Of these methods, only #1 exits normally. This preserves the call stack on the exception - // back into the parser for the error cases. - while (true) { - // Set timeout for this attempt, but don't exceed original timer - long nextTimeoutInterval = checked(timeoutUnitInterval * ((attemptNumber / 2) + 1)); - long milliseconds = timeout.MillisecondsRemaining; - if (nextTimeoutInterval > milliseconds) { - nextTimeoutInterval = milliseconds; - } - - TimeoutTimer intervalTimer = TimeoutTimer.StartMillisecondsTimeout(nextTimeoutInterval); - - // Re-allocate parser each time to make sure state is known - // RFC 50002652 - if parser was created by previous attempt, dispose it to properly close the socket, if created - if (_parser != null) - _parser.Disconnect(); - - _parser = new TdsParser(ConnectionOptions.MARS, ConnectionOptions.Asynchronous); - Debug.Assert(SniContext.Undefined== Parser._physicalStateObj.SniContext, String.Format((IFormatProvider)null, "SniContext should be Undefined; actual Value: {0}", Parser._physicalStateObj.SniContext)); - - ServerInfo currentServerInfo; - if (useFailoverHost) { - if (!failoverDemandDone) { - FailoverPermissionDemand(); - failoverDemandDone = true; - } - - // Primary server may give us a different failover partner than the connection string indicates. Update it - if (null != ServerProvidedFailOverPartner && failoverServerInfo.ResolvedServerName != ServerProvidedFailOverPartner) { - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, new failover partner=%ls\n", ObjectID, ServerProvidedFailOverPartner); - } - failoverServerInfo.SetDerivedNames(protocol, ServerProvidedFailOverPartner); - } - currentServerInfo = failoverServerInfo; - timeoutErrorInternal.SetInternalSourceType(SqlConnectionInternalSourceType.Failover); - } - else { - currentServerInfo = primaryServerInfo; - timeoutErrorInternal.SetInternalSourceType(SqlConnectionInternalSourceType.Principle); - } - - try { - // Attempt login. Use timerInterval for attempt timeout unless infinite timeout was requested. - AttemptOneLogin( - currentServerInfo, - newPassword, - newSecurePassword, - false, // Use timeout in SniOpen - intervalTimer, - withFailover:true - ); - - if (_routingInfo != null) { - // We are in login with failover scenation and server sent routing information - // If it is read-only routing - we did not supply AppIntent=RO (it should be checked before) - // If it is something else, not known yet (future server) - this client is not designed to support this. - // In any case, server should not have sent the routing info. - Bid.Trace(" Routed to %ls", _routingInfo.ServerName); - throw SQL.ROR_UnexpectedRoutingInfo(this); - } - - break; // leave the while loop -- we've successfully connected - } - catch (SqlException sqlex) { - if (IsDoNotRetryConnectError(sqlex) - || timeout.IsExpired) - { // no more time to try again - throw; // Caller will call LoginFailure() - } - - if (IsConnectionDoomed) { - throw; - } - - if (1 == attemptNumber % 2) { - // Check sleep interval to make sure we won't exceed the original timeout - // Do this in the catch block so we can re-throw the current exception - if (timeout.MillisecondsRemaining <= sleepInterval) { - throw; - } - } - - // - } - - // We only get here when we failed to connect, but are going to re-try - - // After trying to connect to both servers fails, sleep for a bit to prevent clogging - // the network with requests, then update sleep interval for next iteration (max 1 second interval) - if (1 == attemptNumber % 2) { - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, sleeping %d{milisec}\n", ObjectID, sleepInterval); - } - Thread.Sleep(sleepInterval); - sleepInterval = (sleepInterval < 500) ? sleepInterval * 2 : 1000; - } - - // Update attempt number and target host - attemptNumber++; - useFailoverHost = !useFailoverHost; - } - - // If we get here, connection/login succeeded! Just a few more checks & record-keeping - - // if connected to failover host, but said host doesn't have DbMirroring set up, throw an error - if (useFailoverHost && null == ServerProvidedFailOverPartner) { - throw SQL.InvalidPartnerConfiguration(failoverHost, CurrentDatabase); - } - - if (null != PoolGroupProviderInfo) { - // We must wait for CompleteLogin to finish for to have the - // env change from the server to know its designated failover - // partner; save this information in _currentFailoverPartner. - PoolGroupProviderInfo.FailoverCheck(this, useFailoverHost, connectionOptions, ServerProvidedFailOverPartner); - } - CurrentDataSource = (useFailoverHost ? failoverHost : primaryServerInfo.UserServerName); - } - - private void ResolveExtendedServerName(ServerInfo serverInfo, bool aliasLookup, SqlConnectionString options) { - if (serverInfo.ExtendedServerName == null) { - string host = serverInfo.UserServerName; - string protocol = serverInfo.UserProtocol; - - if (aliasLookup) { // We skip this for UserInstances... - // Perform registry lookup to see if host is an alias. It will appropriately set host and protocol, if an Alias. - // Check if it was already resolved, during CR reconnection _currentSessionData values will be copied from - // _reconnectSessonData of the previous connection - if (_currentSessionData != null && !string.IsNullOrEmpty(host)) { - Tuple hostPortPair; - if (_currentSessionData._resolvedAliases.TryGetValue(host, out hostPortPair)) { - host = hostPortPair.Item1; - protocol = hostPortPair.Item2; - } - else { - TdsParserStaticMethods.AliasRegistryLookup(ref host, ref protocol); - _currentSessionData._resolvedAliases.Add(serverInfo.UserServerName, new Tuple(host, protocol)); - } - } - else { - TdsParserStaticMethods.AliasRegistryLookup(ref host, ref protocol); - } - - // - if (options.EnforceLocalHost) { - // verify LocalHost for |DataDirectory| usage - SqlConnectionString.VerifyLocalHostAndFixup(ref host, true, true /*fix-up to "."*/); - } - } - - serverInfo.SetDerivedNames(protocol, host); - } - } - - // Common code path for making one attempt to establish a connection and log in to server. - private void AttemptOneLogin(ServerInfo serverInfo, string newPassword, SecureString newSecurePassword, bool ignoreSniOpenTimeout, TimeoutTimer timeout, bool withFailover = false) { - if (Bid.AdvancedOn) { - Bid.Trace(" %d#, timout=%I64d{msec}, server=", ObjectID, timeout.MillisecondsRemaining); - Bid.PutStr(serverInfo.ExtendedServerName); - Bid.Trace("\n"); - } - - _routingInfo = null; // forget routing information - - _parser._physicalStateObj.SniContext = SniContext.Snix_Connect; - - _parser.Connect(serverInfo, - this, - ignoreSniOpenTimeout, - timeout.LegacyTimerExpire, - ConnectionOptions.Encrypt, - ConnectionOptions.TrustServerCertificate, - ConnectionOptions.IntegratedSecurity, - withFailover); - - timeoutErrorInternal.EndPhase(SqlConnectionTimeoutErrorPhase.ConsumePreLoginHandshake); - timeoutErrorInternal.SetAndBeginPhase(SqlConnectionTimeoutErrorPhase.LoginBegin); - - _parser._physicalStateObj.SniContext = SniContext.Snix_Login; - this.Login(serverInfo, timeout, newPassword, newSecurePassword); - - timeoutErrorInternal.EndPhase(SqlConnectionTimeoutErrorPhase.ProcessConnectionAuth); - timeoutErrorInternal.SetAndBeginPhase(SqlConnectionTimeoutErrorPhase.PostLogin); - - CompleteLogin(!ConnectionOptions.Pooling); - - timeoutErrorInternal.EndPhase(SqlConnectionTimeoutErrorPhase.PostLogin); - } - - - internal void FailoverPermissionDemand() { - if (null != PoolGroupProviderInfo) { - PoolGroupProviderInfo.FailoverPermissionDemand(); - } - } - - //////////////////////////////////////////////////////////////////////////////////////// - // PREPARED COMMAND METHODS - //////////////////////////////////////////////////////////////////////////////////////// - - protected override object ObtainAdditionalLocksForClose() { - bool obtainParserLock = !ThreadHasParserLockForClose; - Debug.Assert(obtainParserLock || _parserLock.ThreadMayHaveLock(), "Thread claims to have lock, but lock is not taken"); - if (obtainParserLock) { - _parserLock.Wait(canReleaseFromAnyThread: false); - ThreadHasParserLockForClose = true; - } - return obtainParserLock; - } - - protected override void ReleaseAdditionalLocksForClose(object lockToken) { - Debug.Assert(lockToken is bool, "Lock token should be boolean"); - if ((bool)lockToken) { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - } - } - - // called by SqlConnection.RepairConnection which is a relatevly expensive way of repair inner connection - // prior to execution of request, used from EnlistTransaction, EnlistDistributedTransaction and ChangeDatabase - internal bool GetSessionAndReconnectIfNeeded(SqlConnection parent, int timeout = 0) { - - Debug.Assert(!ThreadHasParserLockForClose, "Cannot call this method if caller has parser lock"); - if (ThreadHasParserLockForClose) { - return false; // we cannot restore if we cannot release lock - } - - _parserLock.Wait(canReleaseFromAnyThread: false); - ThreadHasParserLockForClose = true; // In case of error, let the connection know that we already own the parser lock - bool releaseConnectionLock = true; - - try { - RuntimeHelpers.PrepareConstrainedRegions(); - try { -#if DEBUG - TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); - RuntimeHelpers.PrepareConstrainedRegions(); - try { - tdsReliabilitySection.Start(); -#endif //DEBUG - Task reconnectTask = parent.ValidateAndReconnect(() => { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - releaseConnectionLock = false; - }, timeout); - if (reconnectTask != null) { - AsyncHelper.WaitForCompletion(reconnectTask, timeout); - return true; - } - return false; -#if DEBUG - } - finally { - tdsReliabilitySection.Stop(); - } -#endif //DEBUG - } - catch (System.OutOfMemoryException) { - DoomThisConnection(); - throw; - } - catch (System.StackOverflowException) { - DoomThisConnection(); - throw; - } - catch (System.Threading.ThreadAbortException) { - DoomThisConnection(); - throw; - } - } - finally { - if (releaseConnectionLock) { - ThreadHasParserLockForClose = false; - _parserLock.Release(); - } - } - } - - //////////////////////////////////////////////////////////////////////////////////////// - // PARSER CALLBACKS - //////////////////////////////////////////////////////////////////////////////////////// - - internal void BreakConnection() { - var connection = Connection; - Bid.Trace(" %d#, Breaking connection.\n", ObjectID); - DoomThisConnection(); // Mark connection as unusable, so it will be destroyed - if (null != connection) { - connection.Close(); - } - } - - internal bool IgnoreEnvChange { // true if we are only draining environment change tokens, used by TdsParser - get { - return _routingInfo != null; // connection was routed, ignore rest of env change - } - } - - internal void OnEnvChange(SqlEnvChange rec) { - Debug.Assert(!IgnoreEnvChange,"This function should not be called if IgnoreEnvChange is set!"); - switch (rec.type) { - case TdsEnums.ENV_DATABASE: - // If connection is not open and recovery is not in progresss, store the server value as the original. - if (!_fConnectionOpen && _recoverySessionData == null) { - _originalDatabase = rec.newValue; - } - - CurrentDatabase = rec.newValue; - break; - - case TdsEnums.ENV_LANG: - // If connection is not open and recovery is not in progresss, store the server value as the original. - if (!_fConnectionOpen && _recoverySessionData == null) { - _originalLanguage = rec.newValue; - } - - _currentLanguage = rec.newValue; // TODO: finish this. - break; - - case TdsEnums.ENV_PACKETSIZE: - _currentPacketSize = Int32.Parse(rec.newValue, CultureInfo.InvariantCulture); - break; - - case TdsEnums.ENV_COLLATION: - if (_currentSessionData != null) { - _currentSessionData._collation = rec.newCollation; - } - break; - - case TdsEnums.ENV_CHARSET: - case TdsEnums.ENV_LOCALEID: - case TdsEnums.ENV_COMPFLAGS: - case TdsEnums.ENV_BEGINTRAN: - case TdsEnums.ENV_COMMITTRAN: - case TdsEnums.ENV_ROLLBACKTRAN: - case TdsEnums.ENV_ENLISTDTC: - case TdsEnums.ENV_DEFECTDTC: - // only used on parser - break; - - case TdsEnums.ENV_LOGSHIPNODE: - if (ConnectionOptions.ApplicationIntent == ApplicationIntent.ReadOnly) { - throw SQL.ROR_FailoverNotSupportedServer(this); - } - _currentFailoverPartner = rec.newValue; - break; - - case TdsEnums.ENV_PROMOTETRANSACTION: - PromotedDTCToken = rec.newBinValue; - break; - - case TdsEnums.ENV_TRANSACTIONENDED: - break; - - case TdsEnums.ENV_TRANSACTIONMANAGERADDRESS: - // For now we skip these Yukon only env change notifications - break; - - case TdsEnums.ENV_SPRESETCONNECTIONACK: - // connection is being reset - if (_currentSessionData != null) { - _currentSessionData.Reset(); - } - break; - - case TdsEnums.ENV_USERINSTANCE: - _instanceName = rec.newValue; - break; - - case TdsEnums.ENV_ROUTING: - if (string.IsNullOrEmpty(rec.newRoutingInfo.ServerName) || rec.newRoutingInfo.Protocol != 0 || rec.newRoutingInfo.Port == 0) { - throw SQL.ROR_InvalidRoutingInfo(this); - } - _routingInfo = rec.newRoutingInfo; - break; - - default: - Debug.Assert(false, "Missed token in EnvChange!"); - break; - } - } - - internal void OnLoginAck(SqlLoginAck rec) { - _loginAck = rec; - // - if (_recoverySessionData != null) { - if (_recoverySessionData._tdsVersion != rec.tdsVersion) { - throw SQL.CR_TDSVersionNotPreserved(this); - } - } - if (_currentSessionData != null) { - _currentSessionData._tdsVersion = rec.tdsVersion; - } - } - - internal void OnFeatureExtAck(int featureId, byte[] data) { - if (_routingInfo != null) { - return; - } - switch (featureId) { - case TdsEnums.FEATUREEXT_SRECOVERY: { - // Session recovery not requested - if (!_sessionRecoveryRequested) { - throw SQL.ParsingError(); - } - _sessionRecoveryAcknowledged = true; - -#if DEBUG - foreach (var s in _currentSessionData._delta) { - Debug.Assert(s==null, "Delta should be null at this point"); - } -#endif - Debug.Assert(_currentSessionData._unrecoverableStatesCount == 0, "Unrecoverable states count should be 0"); - - int i = 0; - while (i < data.Length) { - byte stateId = data[i]; i++; - int len; - byte bLen = data[i]; i++; - if (bLen == 0xFF) { - len = BitConverter.ToInt32(data, i); i += 4; - } - else { - len = bLen; - } - byte[] stateData = new byte[len]; - Buffer.BlockCopy(data, i, stateData, 0, len); i += len; - if (_recoverySessionData == null) { - _currentSessionData._initialState[stateId] = stateData; - } - else { - _currentSessionData._delta[stateId] = new SessionStateRecord { _data = stateData, _dataLength = len, _recoverable = true, _version = 0 }; - _currentSessionData._deltaDirty = true; - } - } - break; - } - default: { - // Unknown feature ack - throw SQL.ParsingError(); - } - } - } - - //////////////////////////////////////////////////////////////////////////////////////// - // Helper methods for Locks - //////////////////////////////////////////////////////////////////////////////////////// - - // Indicates if the current thread claims to hold the parser lock - internal bool ThreadHasParserLockForClose { - get { - return _threadIdOwningParserLock == Thread.CurrentThread.ManagedThreadId; - } - set { - Debug.Assert(_parserLock.ThreadMayHaveLock(), "Should not modify ThreadHasParserLockForClose without taking the lock first"); - Debug.Assert(_threadIdOwningParserLock == -1 || _threadIdOwningParserLock == Thread.CurrentThread.ManagedThreadId, "Another thread already claims to own the parser lock"); - - if (value) { - // If setting to true, then the thread owning the lock is the current thread - _threadIdOwningParserLock = Thread.CurrentThread.ManagedThreadId; - } - else if (_threadIdOwningParserLock == Thread.CurrentThread.ManagedThreadId) { - // If setting to false and currently owns the lock, then no-one owns the lock - _threadIdOwningParserLock = -1; - } - // else This thread didn't own the parser lock and doesn't claim to own it, so do nothing - } - } - - internal override bool TryReplaceConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource retry, DbConnectionOptions userOptions) { - return base.TryOpenConnectionInternal(outerConnection, connectionFactory, retry, userOptions); - } - } - - internal sealed class ServerInfo { - internal string ExtendedServerName { get; private set; } // the resolved servername with protocol - internal string ResolvedServerName { get; private set; } // the resolved servername only - internal string ResolvedDatabaseName { get; private set; } // name of target database after resolution - internal string UserProtocol { get; private set; } // the user specified protocol - - // The original user-supplied server name from the connection string. - // If connection string has no Data Source, the value is set to string.Empty. - // In case of routing, will be changed to routing destination - internal string UserServerName - { - get - { - return m_userServerName; - } - private set - { - m_userServerName = value; - } - } private string m_userServerName; - - internal readonly string PreRoutingServerName; - - // Initialize server info from connection options, - internal ServerInfo(SqlConnectionString userOptions) : this(userOptions, userOptions.DataSource) {} - - // Initialize server info from connection options, but override DataSource with given server name - internal ServerInfo (SqlConnectionString userOptions, string serverName) { - //----------------- - // Preconditions - Debug.Assert(null != userOptions); - - //----------------- - //Method body - - Debug.Assert(serverName != null, "server name should never be null"); - UserServerName = (serverName ?? string.Empty); // ensure user server name is not null - - UserProtocol = userOptions.NetworkLibrary; - ResolvedDatabaseName = userOptions.InitialCatalog; - PreRoutingServerName = null; - } - - - // Initialize server info from connection options, but override DataSource with given server name - internal ServerInfo(SqlConnectionString userOptions, RoutingInfo routing, string preRoutingServerName) { - //----------------- - // Preconditions - Debug.Assert(null != userOptions && null!=routing); - - //----------------- - //Method body - Debug.Assert(routing.ServerName != null, "server name should never be null"); - if (routing == null || routing.ServerName == null) { - UserServerName = string.Empty; // ensure user server name is not null - } - else { - UserServerName = string.Format(CultureInfo.InvariantCulture, "{0},{1}", routing.ServerName, routing.Port); - } - PreRoutingServerName = preRoutingServerName; - UserProtocol = TdsEnums.TCP; - SetDerivedNames(UserProtocol, UserServerName); - ResolvedDatabaseName = userOptions.InitialCatalog; - } - - internal void SetDerivedNames(string protocol, string serverName) { - // The following concatenates the specified netlib network protocol to the host string, if netlib is not null - // and the flag is on. This allows the user to specify the network protocol for the connection - but only - // when using the Dbnetlib dll. If the protocol is not specified, the netlib will - // try all protocols in the order listed in the Client Network Utility. Connect will - // then fail if all protocols fail. - if (!ADP.IsEmpty(protocol)) { - ExtendedServerName = protocol + ":" + serverName; - } - else { - ExtendedServerName = serverName; - } - ResolvedServerName = serverName; - } - } -} - diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs.REMOVED.git-id new file mode 100644 index 0000000000..760d57829a --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlInternalConnectionTds.cs.REMOVED.git-id @@ -0,0 +1 @@ +c07b195ac1ba68e64a6342f0c03bbc6e4bc32456 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationInfo.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationInfo.cs index 97826a6c96..bb13ddb37c 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationInfo.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationInfo.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// mithomas +// blained +// ramp //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationSource.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationSource.cs index 6fa06cf29e..cc787d352f 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationSource.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationSource.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// mithomas +// blained +// ramp //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationType.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationType.cs index 17f31f43c0..6cf8747e9a 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationType.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlNotificationType.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// mithomas +// blained +// ramp //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlParameter.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlParameter.cs index 66614199c4..9b238a4706 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlParameter.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlParameter.cs @@ -84,6 +84,48 @@ namespace System.Data.SqlClient { private bool _coercedValueIsDataFeed; private int _actualSize = -1; + /// + /// Column Encryption Cipher Related Metadata. + /// + private SqlCipherMetadata _columnEncryptionCipherMetadata; + + /// + /// Get or set the encryption related metadata of this SqlParameter. + /// Should be set to a non-null value only once. + /// + internal SqlCipherMetadata CipherMetadata { + get { + return _columnEncryptionCipherMetadata; + } + + set { + Debug.Assert(_columnEncryptionCipherMetadata == null || value == null, + "_columnEncryptionCipherMetadata should be set to a non-null value only once."); + + _columnEncryptionCipherMetadata = value; + } + } + + /// + /// Indicates if the parameter encryption metadata received by sp_describe_parameter_encryption. + /// For unencrypted parameters, the encryption metadata should still be sent (and will indicate + /// that no encryption is needed). + /// + internal bool HasReceivedMetadata { get; set; } + + /// + /// Returns the normalization rule version number as a byte + /// + internal byte NormalizationRuleVersion { + get { + if (_columnEncryptionCipherMetadata != null) { + return _columnEncryptionCipherMetadata.NormalizationRuleVersion; + } + + return 0x00; + } + } + public SqlParameter() : base() { } @@ -231,6 +273,16 @@ namespace System.Data.SqlClient { } } + [ + DefaultValue(false), + ResCategoryAttribute(Res.DataCategory_Data), + ResDescriptionAttribute(Res.TCE_SqlParameter_ForceColumnEncryption), + ] + public bool ForceColumnEncryption { + get; + set; + } + override public DbType DbType { get { return GetMetaTypeOnly().DbType; @@ -309,6 +361,22 @@ namespace System.Data.SqlClient { } } + /// + /// Get SMI Metadata to write out type_info stream. + /// + /// + internal MSS.SmiParameterMetaData GetMetadataForTypeInfo() { + ParameterPeekAheadValue peekAhead = null; + + if (_internalMetaType == null) { + _internalMetaType = GetMetaTypeOnly(); + } + + return MetaDataForSmi(out peekAhead); + } + + // IMPORTANT DEVNOTE: This method is being used for parameter encryption functionality, to get the type_info TDS object from SqlParameter. + // Please consider impact to that when changing this method. Refer to the callers of SqlParameter.GetMetadataForTypeInfo(). internal MSS.SmiParameterMetaData MetaDataForSmi(out ParameterPeekAheadValue peekAhead) { peekAhead = null; MetaType mt = ValidateTypeLengths( true /* Yukon or newer */ ); @@ -448,7 +516,7 @@ namespace System.Data.SqlClient { internal bool ParamaterIsSqlType { get { return _isSqlParameterSqlType; - } + } set { _isSqlParameterSqlType = value; } @@ -998,6 +1066,7 @@ namespace System.Data.SqlClient { destination._coercedValueIsDataFeed = _coercedValueIsDataFeed; destination._coercedValueIsSqlType = _coercedValueIsSqlType; destination._actualSize = _actualSize; + destination.ForceColumnEncryption = ForceColumnEncryption; } internal byte GetActualPrecision() { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatedEventHandler.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatedEventHandler.cs index 832883eccb..b047910e73 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatedEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatedEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// blained +// laled //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatingEventHandler.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatingEventHandler.cs index ad38aaf49a..cffa552e77 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatingEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlRowUpdatingEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// blained +// laled //------------------------------------------------------------------------------ namespace System.Data.SqlClient { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlSecurityUtility.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlSecurityUtility.cs new file mode 100644 index 0000000000..a4b18c5252 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlSecurityUtility.cs @@ -0,0 +1,263 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// balnee +// krishnib +//------------------------------------------------------------------------------ +namespace System.Data.SqlClient +{ + using System; + using System.Diagnostics; + using System.Reflection; + using System.Security; + using System.Security.Cryptography; + using System.Text; + + internal static class SqlSecurityUtility { + + /// + /// Computes a keyed hash of a given text and returns. It fills the buffer "hash" with computed hash value. + /// + /// Plain text bytes whose hash has to be computed. + /// key used for the HMAC + /// Output buffer where the computed hash value is stored. If its less that 64 bytes, the hash is truncated + /// HMAC value + internal static void GetHMACWithSHA256(byte[] plainText, byte[] key, byte[] hash) { + const int MaxSHA256HashBytes = 32; + + Debug.Assert(key != null && plainText != null); + Debug.Assert(hash.Length != 0 && hash.Length <= MaxSHA256HashBytes); + + using (HMACSHA256 hmac = new HMACSHA256(key)) { + byte[] computedHash = hmac.ComputeHash(plainText); + + // Truncate the hash if needed + Buffer.BlockCopy (computedHash, 0, hash, 0, hash.Length); + } + } + + /// + /// Computes SHA256 hash of a given input + /// + /// input byte array which needs to be hashed + /// Returns SHA256 hash in a string form + internal static string GetSHA256Hash(byte[] input) { + Debug.Assert(input != null); + + using (SHA256 sha256 = SHA256Cng.Create()) { + byte[] hashValue = sha256.ComputeHash(input); + return GetHexString(hashValue); + } + } + + /// + /// Generates cryptographicall random bytes + /// + /// No of cryptographically random bytes to be generated + /// A byte array containing cryptographically generated random bytes + internal static void GenerateRandomBytes(byte[] randomBytes) { + // Generate random bytes cryptographically. + RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider(); + rngCsp.GetBytes(randomBytes); + } + + /// + /// Compares two byte arrays and returns true if all bytes are equal + /// + /// input buffer + /// another buffer to be compared against + /// returns true if both the arrays have the same byte values else returns false + internal static bool CompareBytes(byte[] buffer1, byte[] buffer2, int buffer2Index, int lengthToCompare) { + if (null == buffer1 || null == buffer2) { + return false; + } + + Debug.Assert (buffer2Index > -1 && buffer2Index < buffer2.Length, "invalid index");// bounds on buffer2Index + if ((buffer2.Length -buffer2Index) < lengthToCompare) { + return false; + } + + for (int index = 0; index < buffer1.Length && index < lengthToCompare; ++index) { + if (buffer1[index] != buffer2[buffer2Index + index]) { + return false; + } + } + + return true; + } + + /// + /// Gets hex representation of byte array. + /// input byte array + /// + internal static string GetHexString(byte[] input) { + Debug.Assert(input != null); + + StringBuilder str = new StringBuilder(); + foreach (byte b in input) { + str.AppendFormat(b.ToString(@"X2")); + } + + return str.ToString(); + } + + /// + /// Returns the caller's function name in the format of [ClassName].[FunctionName] + /// + internal static string GetCurrentFunctionName() { + StackTrace stackTrace = new StackTrace(); + StackFrame stackFrame = stackTrace.GetFrame(1); + MethodBase methodBase = stackFrame.GetMethod(); + return string.Format(@"{0}.{1}", methodBase.DeclaringType.Name, methodBase.Name); + } + + /// + /// Return the algorithm name mapped to an Id. + /// + /// + /// + private static string ValidateAndGetEncryptionAlgorithmName (byte cipherAlgorithmId, string cipherAlgorithmName) { + if (TdsEnums.CustomCipherAlgorithmId == cipherAlgorithmId) { + if (null == cipherAlgorithmName) { + throw SQL.NullColumnEncryptionAlgorithm(SqlClientEncryptionAlgorithmFactoryList.GetInstance().GetRegisteredCipherAlgorithmNames()); + } + + return cipherAlgorithmName; + } + else if (TdsEnums.AEAD_AES_256_CBC_HMAC_SHA256 == cipherAlgorithmId) { + return SqlAeadAes256CbcHmac256Algorithm.AlgorithmName; + } + else if (TdsEnums.AES_256_CBC == cipherAlgorithmId) { + return SqlAes256CbcAlgorithm.AlgorithmName; + } + else { + throw SQL.UnknownColumnEncryptionAlgorithmId(cipherAlgorithmId, GetRegisteredCipherAlgorithmIds()); + } + } + + /// + /// Retrieves a string with comma separated list of registered algorithm Ids (enclosed in quotes). + /// + private static string GetRegisteredCipherAlgorithmIds () { + return @"'1', '2'"; + } + + /// + /// Encrypts the plaintext. + /// + internal static byte[] EncryptWithKey (byte[] plainText, SqlCipherMetadata md, string serverName) { + Debug.Assert(serverName != null, @"serverName should not be null in EncryptWithKey."); + + // Initialize cipherAlgo if not already done. + if (!md.IsAlgorithmInitialized()) { + SqlSecurityUtility.DecryptSymmetricKey(md, serverName); + } + + Debug.Assert(md.IsAlgorithmInitialized(), "Encryption Algorithm is not initialized"); + byte[] cipherText = md.CipherAlgorithm.EncryptData(plainText); // this call succeeds or throws. + if (null == cipherText || 0 == cipherText.Length) { + SQL.NullCipherText(); + } + + return cipherText; + } + + /// + /// Gets a string with first/last 10 bytes in the buff (useful for exception handling). + /// + internal static string GetBytesAsString(byte[] buff, bool fLast, int countOfBytes) { + int count = (buff.Length > countOfBytes) ? countOfBytes : buff.Length; + int startIndex = 0; + if (fLast) { + startIndex = buff.Length - count; + Debug.Assert(startIndex >= 0); + } + + return BitConverter.ToString(buff, startIndex, count); + } + + /// + /// Decrypts the ciphertext. + /// + internal static byte[] DecryptWithKey(byte[] cipherText, SqlCipherMetadata md, string serverName) { + Debug.Assert(serverName != null, @"serverName should not be null in DecryptWithKey."); + + // Initialize cipherAlgo if not already done. + if (!md.IsAlgorithmInitialized()) { + SqlSecurityUtility.DecryptSymmetricKey(md, serverName); + } + + Debug.Assert(md.IsAlgorithmInitialized(), "Decryption Algorithm is not initialized"); + try { + byte[] plainText = md.CipherAlgorithm.DecryptData(cipherText); // this call succeeds or throws. + if (null == plainText) { + throw SQL.NullPlainText (); + } + + return plainText; + } + catch (Exception e) { + // compute the strings to pass + string keyStr = GetBytesAsString(md.EncryptionKeyInfo.Value.encryptedKey, fLast:true, countOfBytes:10); + string valStr = GetBytesAsString(cipherText, fLast:false, countOfBytes:10); + throw SQL.ThrowDecryptionFailed(keyStr, valStr, e); + } + } + + /// + /// Decrypts the symmetric key and saves it in metadata. In addition, intializes + /// the SqlClientEncryptionAlgorithm for rapid decryption. + /// + internal static void DecryptSymmetricKey(SqlCipherMetadata md, string serverName) { + Debug.Assert(serverName != null, @"serverName should not be null in DecryptSymmetricKey."); + Debug.Assert(md != null, "md should not be null in DecryptSymmetricKey."); + Debug.Assert(md.EncryptionInfo.HasValue, "md.EncryptionInfo should not be null in DecryptSymmetricKey."); + Debug.Assert(md.EncryptionInfo.Value.ColumnEncryptionKeyValues != null, "md.EncryptionInfo.ColumnEncryptionKeyValues should not be null in DecryptSymmetricKey."); + + SqlClientSymmetricKey symKey = null; + SqlEncryptionKeyInfo? encryptionkeyInfoChosen = null; + SqlSymmetricKeyCache cache = SqlSymmetricKeyCache.GetInstance(); + Exception lastException = null; + foreach (SqlEncryptionKeyInfo keyInfo in md.EncryptionInfo.Value.ColumnEncryptionKeyValues) { + try { + if (cache.GetKey(keyInfo, serverName, out symKey)) { + encryptionkeyInfoChosen = keyInfo; + break; + } + } catch (Exception e) { + lastException = e; + } + } + + if (null == symKey) { + Debug.Assert (null != lastException, "CEK decryption failed without raising exceptions"); + throw lastException; + } + + Debug.Assert(encryptionkeyInfoChosen.HasValue, "encryptionkeyInfoChosen must have a value."); + + // Given the symmetric key instantiate a SqlClientEncryptionAlgorithm object and cache it in metadata + md.CipherAlgorithm = null; + SqlClientEncryptionAlgorithm cipherAlgorithm = null; + string algorithmName = ValidateAndGetEncryptionAlgorithmName(md.CipherAlgorithmId, md.CipherAlgorithmName); // may throw + SqlClientEncryptionAlgorithmFactoryList.GetInstance().GetAlgorithm(symKey, md.EncryptionType, algorithmName, out cipherAlgorithm); // will validate algorithm name and type + Debug.Assert(cipherAlgorithm != null); + md.CipherAlgorithm = cipherAlgorithm; + md.EncryptionKeyInfo = encryptionkeyInfoChosen; + return; + } + + /// + /// Calculates the length of the Base64 string used to represent a byte[] with the specified length. + /// + /// + /// + internal static int GetBase64LengthFromByteLength(int byteLength) { + Debug.Assert(byteLength <= UInt16.MaxValue, @"Encrypted column encryption key cannot be larger than 65536 bytes"); + + // Base64 encoding uses 1 character to encode 6 bits which means 4 characters for 3 bytes and pads to 4 byte multiples. + return (int)((double)byteLength * 4 / 3) + 4; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlSymmetricKeyCache.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlSymmetricKeyCache.cs new file mode 100644 index 0000000000..fa371fb722 --- /dev/null +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlSymmetricKeyCache.cs @@ -0,0 +1,107 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// krishnib +// balnee +//------------------------------------------------------------------------------ + +namespace System.Data.SqlClient { + using System; + using System.Collections.Generic; + using System.Collections.Concurrent; + using System.Diagnostics; + using System.Globalization; + using System.Linq; + using System.Text; + + /// + /// Implements a cache of Symmetric Keys (once they are decrypted).Useful for rapidly decrypting multiple data values. + /// + sealed internal class SqlSymmetricKeyCache { + private readonly ConcurrentDictionary _cache; + private static readonly SqlSymmetricKeyCache _singletonInstance = new SqlSymmetricKeyCache(); + + + private SqlSymmetricKeyCache () { + _cache = new ConcurrentDictionary(concurrencyLevel: 4 * Environment.ProcessorCount /* default value in ConcurrentDictionary*/, capacity: 2); + } + + internal static SqlSymmetricKeyCache GetInstance () { + return _singletonInstance; + } + + /// + /// Retrieves Symmetric Key (in plaintext) given the encryption material. + /// + internal bool GetKey (SqlEncryptionKeyInfo keyInfo, string serverName, out SqlClientSymmetricKey encryptionKey) { + Debug.Assert(serverName != null, @"serverName should not be null."); + + StringBuilder cacheLookupKeyBuilder = new StringBuilder(serverName, capacity: serverName.Length + SqlSecurityUtility.GetBase64LengthFromByteLength(keyInfo.encryptedKey.Length) + keyInfo.keyStoreName.Length + 2/*separators*/); + +#if DEBUG + int capacity = cacheLookupKeyBuilder.Capacity; +#endif //DEBUG + + cacheLookupKeyBuilder.Append(":"); + cacheLookupKeyBuilder.Append(Convert.ToBase64String(keyInfo.encryptedKey)); + cacheLookupKeyBuilder.Append(":"); + cacheLookupKeyBuilder.Append(keyInfo.keyStoreName); + + string cacheLookupKey = cacheLookupKeyBuilder.ToString(); + +#if DEBUG + Debug.Assert(cacheLookupKey.Length <= capacity, "We needed to allocate a larger array"); +#endif //DEBUG + + encryptionKey = null; + + // Lookup the key in cache + if (!_cache.TryGetValue(cacheLookupKey, out encryptionKey)) { + Debug.Assert(SqlConnection.ColumnEncryptionTrustedMasterKeyPaths != null, @"SqlConnection.ColumnEncryptionTrustedMasterKeyPaths should not be null"); + + // Check against the trusted key paths + // + // Get the List corresponding to the connected server + IList trustedKeyPaths; + if (SqlConnection.ColumnEncryptionTrustedMasterKeyPaths.TryGetValue(serverName, out trustedKeyPaths)) { + // If the list is null or is empty or if the keyPath doesn't exist in the trusted key paths, then throw an exception. + if ((trustedKeyPaths == null) || (trustedKeyPaths.Count() == 0) || + // (trustedKeyPaths.Where(s => s.Equals(keyInfo.keyPath, StringComparison.InvariantCultureIgnoreCase)).Count() == 0)) { + (trustedKeyPaths.Any(s => s.Equals(keyInfo.keyPath, StringComparison.InvariantCultureIgnoreCase)) == false)) { + // throw an exception since the key path is not in the trusted key paths list for this server + throw SQL.UntrustedKeyPath(keyInfo.keyPath, serverName); + } + } + + // Key Not found, attempt to look up the provider and decrypt CEK + SqlColumnEncryptionKeyStoreProvider provider; + if (!SqlConnection.TryGetColumnEncryptionKeyStoreProvider(keyInfo.keyStoreName, out provider)) { + throw SQL.UnrecognizedKeyStoreProviderName(keyInfo.keyStoreName, + SqlConnection.GetColumnEncryptionSystemKeyStoreProviders(), + SqlConnection.GetColumnEncryptionCustomKeyStoreProviders()); + } + + // Decrypt the CEK + // We will simply bubble up the exception from the DecryptColumnEncryptionKey function. + byte[] plaintextKey; + try { + plaintextKey = provider.DecryptColumnEncryptionKey(keyInfo.keyPath, keyInfo.algorithmName, keyInfo.encryptedKey); + } + catch (Exception e) { + // Generate a new exception and throw. + string keyHex = SqlSecurityUtility.GetBytesAsString(keyInfo.encryptedKey, fLast:true, countOfBytes:10); + throw SQL.KeyDecryptionFailed (keyInfo.keyStoreName, keyHex, e); + } + + encryptionKey = new SqlClientSymmetricKey (plaintextKey); + + // In case multiple threads reach here at the same time, the first one wins. + // The allocated memory will be reclaimed by Garbage Collector. + _cache.TryAdd(cacheLookupKey, encryptionKey); + } + + return true; + } + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs b/external/referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs index 736fbb9af3..ae7086f0a0 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/SqlUtil.cs @@ -8,11 +8,13 @@ namespace System.Data.SqlClient { using System; + using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Diagnostics; using System.Globalization; + using System.Linq; using System.Reflection; using System.Runtime.Serialization.Formatters; using System.Security; @@ -259,6 +261,24 @@ namespace System.Data.SqlClient { static internal Exception UserInstanceFailoverNotCompatible() { return ADP.Argument(Res.GetString(Res.SQL_UserInstanceFailoverNotCompatible)); } + static internal Exception CredentialsNotProvided(SqlAuthenticationMethod auth) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_CredentialsNotProvided, DbConnectionStringBuilderUtil.AuthenticationTypeToString(auth))); + } + static internal Exception AuthenticationAndIntegratedSecurity() { + return ADP.Argument(Res.GetString(Res.SQL_AuthenticationAndIntegratedSecurity)); + } + static internal Exception IntegratedWithUserIDAndPassword() { + return ADP.Argument(Res.GetString(Res.SQL_IntegratedWithUserIDAndPassword)); + } + static internal Exception SettingIntegratedWithCredential() { + return ADP.InvalidOperation(Res.GetString(Res.SQL_SettingIntegratedWithCredential)); + } + static internal Exception SettingCredentialWithIntegratedArgument() { + return ADP.Argument(Res.GetString(Res.SQL_SettingCredentialWithIntegrated)); + } + static internal Exception SettingCredentialWithIntegratedInvalid() { + return ADP.InvalidOperation(Res.GetString(Res.SQL_SettingCredentialWithIntegrated)); + } static internal Exception InvalidSQLServerVersionUnknown() { return ADP.DataAdapter(Res.GetString(Res.SQL_InvalidSQLServerVersionUnknown)); } @@ -295,6 +315,9 @@ namespace System.Data.SqlClient { static internal Exception InvalidPartnerConfiguration (string server, string database) { return ADP.InvalidOperation(Res.GetString(Res.SQL_InvalidPartnerConfiguration, server, database)); } + static internal Exception BatchedUpdateColumnEncryptionSettingMismatch () { + return ADP.InvalidOperation(Res.GetString(Res.TCE_BatchedUpdateColumnEncryptionSettingMismatch, "SqlCommandColumnEncryptionSetting", "SelectCommand", "InsertCommand", "UpdateCommand", "DeleteCommand")); + } static internal Exception MARSUnspportedOnConnection() { return ADP.InvalidOperation(Res.GetString(Res.SQL_MarsUnsupportedOnConnection)); } @@ -440,9 +463,34 @@ namespace System.Data.SqlClient { static internal Exception InvalidTDSVersion() { return ADP.InvalidOperation(Res.GetString(Res.SQL_InvalidTDSVersion)); } - static internal Exception ParsingError() { - return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingError)); + static internal Exception ParsingError(ParsingErrorState state) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorWithState, ((int)state).ToString(CultureInfo.InvariantCulture))); } + static internal Exception ParsingError(ParsingErrorState state, Exception innerException) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorWithState, ((int)state).ToString(CultureInfo.InvariantCulture)), innerException); + } + static internal Exception ParsingErrorValue(ParsingErrorState state, int value) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorValue, ((int)state).ToString(CultureInfo.InvariantCulture), value)); + } + static internal Exception ParsingErrorOffset(ParsingErrorState state, int offset) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorOffset, ((int)state).ToString(CultureInfo.InvariantCulture), offset)); + } + static internal Exception ParsingErrorFeatureId(ParsingErrorState state, int featureId) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorFeatureId, ((int)state).ToString(CultureInfo.InvariantCulture), featureId)); + } + static internal Exception ParsingErrorToken(ParsingErrorState state, int token) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorToken, ((int)state).ToString(CultureInfo.InvariantCulture), token)); + } + static internal Exception ParsingErrorLength(ParsingErrorState state, int length) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorLength, ((int)state).ToString(CultureInfo.InvariantCulture), length)); + } + static internal Exception ParsingErrorStatus(ParsingErrorState state, int status) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorStatus, ((int)state).ToString(CultureInfo.InvariantCulture), status)); + } + static internal Exception ParsingErrorLibraryType(ParsingErrorState state, int libraryType) { + return ADP.InvalidOperation(Res.GetString(Res.SQL_ParsingErrorAuthLibraryType, ((int)state).ToString(CultureInfo.InvariantCulture), libraryType)); + } + static internal Exception MoneyOverflow(string moneyValue) { return ADP.Overflow(Res.GetString(Res.SQL_MoneyOverflow, moneyValue)); } @@ -475,6 +523,14 @@ namespace System.Data.SqlClient { return ADP.InvalidCast(Res.GetString(Res.SQL_StreamNotSupportOnColumnType, columnName)); } + static internal Exception StreamNotSupportOnEncryptedColumn(string columnName) { + return ADP.InvalidOperation(Res.GetString(Res.TCE_StreamNotSupportOnEncryptedColumn, columnName, "Stream")); + } + + static internal Exception SequentialAccessNotSupportedOnEncryptedColumn(string columnName) { + return ADP.InvalidOperation(Res.GetString(Res.TCE_SequentialAccessNotSupportedOnEncryptedColumn, columnName, "CommandBehavior=SequentialAccess")); + } + static internal Exception TextReaderNotSupportOnColumnType(string columnName) { return ADP.InvalidCast(Res.GetString(Res.SQL_TextReaderNotSupportOnColumnType, columnName)); } @@ -484,7 +540,7 @@ namespace System.Data.SqlClient { } static internal Exception UDTUnexpectedResult(string exceptionText){ - return ADP.TypeLoad(Res.GetString(Res.SQLUDT_Unexpected,exceptionText)); + return ADP.TypeLoad(Res.GetString(Res.SQLUDT_Unexpected,exceptionText)); } @@ -728,6 +784,444 @@ namespace System.Data.SqlClient { return ADP.InvalidOperation(Res.GetString(Res.SQL_BulkLoadPendingOperation)); } + // + // TCE - Certificate Store Provider Errors. + // + static internal Exception InvalidKeyEncryptionAlgorithm(string encryptionAlgorithm, string validEncryptionAlgorithm, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidKeyEncryptionAlgorithmSysErr, encryptionAlgorithm, validEncryptionAlgorithm), TdsEnums.TCE_PARAM_ENCRYPTION_ALGORITHM); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidKeyEncryptionAlgorithm, encryptionAlgorithm, validEncryptionAlgorithm), TdsEnums.TCE_PARAM_ENCRYPTION_ALGORITHM); + } + } + + static internal Exception NullKeyEncryptionAlgorithm(bool isSystemOp) { + if (isSystemOp) { + return ADP.ArgumentNull (TdsEnums.TCE_PARAM_ENCRYPTION_ALGORITHM, Res.GetString(Res.TCE_NullKeyEncryptionAlgorithmSysErr)); + } + else { + return ADP.ArgumentNull (TdsEnums.TCE_PARAM_ENCRYPTION_ALGORITHM, Res.GetString(Res.TCE_NullKeyEncryptionAlgorithm)); + } + } + + static internal Exception EmptyColumnEncryptionKey() { + return ADP.Argument(Res.GetString(Res.TCE_EmptyColumnEncryptionKey), TdsEnums.TCE_PARAM_COLUMNENCRYPTION_KEY); + } + + static internal Exception NullColumnEncryptionKey() { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_COLUMNENCRYPTION_KEY, Res.GetString(Res.TCE_NullColumnEncryptionKey)); + } + + static internal Exception EmptyEncryptedColumnEncryptionKey() { + return ADP.Argument(Res.GetString(Res.TCE_EmptyEncryptedColumnEncryptionKey), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception NullEncryptedColumnEncryptionKey() { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_ENCRYPTED_CEK, Res.GetString(Res.TCE_NullEncryptedColumnEncryptionKey)); + } + + static internal Exception LargeCertificatePathLength(int actualLength, int maxLength, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_LargeCertificatePathLengthSysErr, actualLength, maxLength), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_LargeCertificatePathLength, actualLength, maxLength), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception NullCertificatePath(string[] validLocations, bool isSystemOp) { + Debug.Assert(2 == validLocations.Length); + if (isSystemOp) { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCertificatePathSysErr, validLocations[0], validLocations[1], @"/")); + } + else { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCertificatePath, validLocations[0], validLocations[1], @"/")); + } + } + + static internal Exception NullCspKeyPath(bool isSystemOp) { + if (isSystemOp) { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCspPathSysErr, @"/")); + } + else { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCspPath, @"/")); + } + } + + static internal Exception NullCngKeyPath(bool isSystemOp) { + if (isSystemOp) { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCngPathSysErr, @"/")); + } + else { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_MASTERKEY_PATH, Res.GetString(Res.TCE_NullCngPath, @"/")); + } + } + + static internal Exception InvalidCertificatePath(string actualCertificatePath, string[] validLocations, bool isSystemOp) { + Debug.Assert(2 == validLocations.Length); + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificatePathSysErr, actualCertificatePath, validLocations[0], validLocations[1], @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificatePath, actualCertificatePath, validLocations[0], validLocations[1], @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCspPath(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspPathSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspPath, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCngPath(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCngPathSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCngPath, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception EmptyCspName(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCspNameSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCspName, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception EmptyCngName(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCngNameSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCngName, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception EmptyCspKeyId(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCspKeyIdSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCspKeyId, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception EmptyCngKeyId(string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCngKeyIdSysErr, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCngKeyId, masterKeyPath, @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCspName(string cspName, string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspNameSysErr, cspName, masterKeyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspName, cspName, masterKeyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCspKeyIdentifier(string keyIdentifier, string masterKeyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspKeyIdSysErr, keyIdentifier, masterKeyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCspKeyId, keyIdentifier, masterKeyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCngKey(string masterKeyPath, string cngProviderName, string keyIdentifier, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCngKeySysErr, masterKeyPath, cngProviderName, keyIdentifier), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCngKey, masterKeyPath, cngProviderName, keyIdentifier), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCertificateLocation(string certificateLocation, string certificatePath, string[] validLocations, bool isSystemOp) { + Debug.Assert(2 == validLocations.Length); + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificateLocationSysErr, certificateLocation, certificatePath, validLocations[0], validLocations[1], @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificateLocation, certificateLocation, certificatePath, validLocations[0], validLocations[1], @"/"), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidCertificateStore(string certificateStore, string certificatePath, string validCertificateStore, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificateStoreSysErr, certificateStore, certificatePath, validCertificateStore), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificateStore, certificateStore, certificatePath, validCertificateStore), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception EmptyCertificateThumbprint(string certificatePath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCertificateThumbprintSysErr, certificatePath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_EmptyCertificateThumbprint, certificatePath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception CertificateNotFound(string thumbprint, string certificateLocation, string certificateStore, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_CertificateNotFoundSysErr, thumbprint, certificateLocation, certificateStore), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_CertificateNotFound, thumbprint, certificateLocation, certificateStore), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + static internal Exception InvalidAlgorithmVersionInEncryptedCEK(byte actual, byte expected) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidAlgorithmVersionInEncryptedCEK, actual.ToString(@"X2"), expected.ToString(@"X2")), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidCiphertextLengthInEncryptedCEK(int actual, int expected, string certificateName) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCiphertextLengthInEncryptedCEK, actual, expected, certificateName), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidCiphertextLengthInEncryptedCEKCsp(int actual, int expected, string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCiphertextLengthInEncryptedCEKCsp, actual, expected, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidCiphertextLengthInEncryptedCEKCng(int actual, int expected, string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCiphertextLengthInEncryptedCEKCng, actual, expected, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidSignatureInEncryptedCEK(int actual, int expected, string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidSignatureInEncryptedCEK, actual, expected, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidSignatureInEncryptedCEKCsp(int actual, int expected, string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidSignatureInEncryptedCEKCsp, actual, expected, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidSignatureInEncryptedCEKCng(int actual, int expected, string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidSignatureInEncryptedCEKCng, actual, expected, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidCertificateSignature(string certificatePath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCertificateSignature, certificatePath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception InvalidSignature(string masterKeyPath) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidSignature, masterKeyPath), TdsEnums.TCE_PARAM_ENCRYPTED_CEK); + } + + static internal Exception CertificateWithNoPrivateKey(string keyPath, bool isSystemOp) { + if (isSystemOp) { + return ADP.Argument(Res.GetString(Res.TCE_CertificateWithNoPrivateKeySysErr, keyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + else { + return ADP.Argument(Res.GetString(Res.TCE_CertificateWithNoPrivateKey, keyPath), TdsEnums.TCE_PARAM_MASTERKEY_PATH); + } + } + + // + // TCE - Cryptographic Algorithms Error messages + // + static internal Exception NullColumnEncryptionKeySysErr() { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_ENCRYPTIONKEY,Res.GetString(Res.TCE_NullColumnEncryptionKeySysErr)); + } + + static internal Exception InvalidKeySize(string algorithmName, int actualKeylength, int expectedLength) { + return ADP.Argument(Res.GetString( + Res.TCE_InvalidKeySize, + algorithmName, + actualKeylength, + expectedLength), TdsEnums.TCE_PARAM_ENCRYPTIONKEY); + } + + static internal Exception InvalidEncryptionType(string algorithmName, SqlClientEncryptionType encryptionType, params SqlClientEncryptionType[] validEncryptionTypes) { + const string valueSeparator = @", "; + return ADP.Argument(Res.GetString( + Res.TCE_InvalidEncryptionType, + algorithmName, + encryptionType.ToString(), + string.Join(valueSeparator, validEncryptionTypes.Select((validEncryptionType => @"'" + validEncryptionType + @"'")))), TdsEnums.TCE_PARAM_ENCRYPTIONTYPE); + } + + static internal Exception NullPlainText () { + return ADP.ArgumentNull (Res.GetString(Res.TCE_NullPlainText)); + } + + static internal Exception VeryLargeCiphertext(long cipherTextLength, long maxCipherTextSize, long plainTextLength) { + return ADP.Argument(Res.GetString(Res.TCE_VeryLargeCiphertext, cipherTextLength, maxCipherTextSize, plainTextLength)); + } + + static internal Exception NullCipherText () { + return ADP.ArgumentNull (Res.GetString(Res.TCE_NullCipherText)); + } + + static internal Exception InvalidCipherTextSize(int actualSize, int minimumSize) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCipherTextSize, actualSize, minimumSize), TdsEnums.TCE_PARAM_CIPHERTEXT); + } + + static internal Exception InvalidAlgorithmVersion(byte actual, byte expected) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidAlgorithmVersion, actual.ToString(@"X2"), expected.ToString(@"X2")), TdsEnums.TCE_PARAM_CIPHERTEXT); + } + + static internal Exception InvalidAuthenticationTag() { + return ADP.Argument(Res.GetString(Res.TCE_InvalidAuthenticationTag), TdsEnums.TCE_PARAM_CIPHERTEXT); + } + + static internal Exception NullColumnEncryptionAlgorithm (string supportedAlgorithms) { + return ADP.ArgumentNull (TdsEnums.TCE_PARAM_ENCRYPTION_ALGORITHM, Res.GetString(Res.TCE_NullColumnEncryptionAlgorithm, supportedAlgorithms)); + } + + // + // TCE - Errors from sp_describe_parameter_encryption + // + static internal Exception UnexpectedDescribeParamFormat () { + return ADP.Argument (Res.GetString(Res.TCE_UnexpectedDescribeParamFormat, "sp_describe_parameter_encryption")); + } + + static internal Exception InvalidEncryptionKeyOrdinal (int ordinal, int maxOrdinal) { + return ADP.InvalidOperation(Res.GetString(Res.TCE_InvalidEncryptionKeyOrdinal, "sp_describe_parameter_encryption", ordinal, maxOrdinal)); + } + + static internal Exception ParamEncryptionMetadataMissing (string paramName, string procedureName) { + return ADP.Argument (Res.GetString(Res.TCE_ParamEncryptionMetaDataMissing, "sp_describe_parameter_encryption", paramName, procedureName)); + } + + static internal Exception ParamInvalidForceColumnEncryptionSetting (string paramName, string procedureName) { + return ADP.InvalidOperation(Res.GetString(Res.TCE_ParamInvalidForceColumnEncryptionSetting, TdsEnums.TCE_PARAM_FORCE_COLUMN_ENCRYPTION, paramName, procedureName, "SqlParameter")); + } + + static internal Exception ParamUnExpectedEncryptionMetadata (string paramName, string procedureName) { + return ADP.InvalidOperation(Res.GetString(Res.TCE_ParamUnExpectedEncryptionMetadata, paramName, procedureName, TdsEnums.TCE_PARAM_FORCE_COLUMN_ENCRYPTION, "SqlParameter")); + } + + static internal Exception ProcEncryptionMetadataMissing (string procedureName) { + return ADP.Argument (Res.GetString(Res.TCE_ProcEncryptionMetaDataMissing, "sp_describe_parameter_encryption", procedureName)); + } + + // + // TCE- Generic toplevel failures. + // + static internal Exception GetExceptionArray (string serverName, string errorMessage, Exception e) { + // Create and throw an exception array + SqlErrorCollection sqlErs = new SqlErrorCollection(); + Exception exceptionToInclude = (null != e.InnerException) ? e.InnerException : e; + sqlErs.Add (new SqlError(infoNumber:0, errorState:(byte)0x00, errorClass:(byte)TdsEnums.MIN_ERROR_CLASS, server:serverName, errorMessage:errorMessage, procedure:null, lineNumber:0)); + + if (e is SqlException) { + SqlException exThrown = (SqlException)e; + SqlErrorCollection errorList = exThrown.Errors; + for (int i =0; i < exThrown.Errors.Count; i++) { + sqlErs.Add(errorList[i]); + } + } + else { + sqlErs.Add (new SqlError(infoNumber:0, errorState:(byte)0x00, errorClass:(byte)TdsEnums.MIN_ERROR_CLASS, server:serverName, errorMessage:e.Message, procedure:null, lineNumber:0)); + } + + return SqlException.CreateException(sqlErs, "", null, exceptionToInclude); + } + + static internal Exception ParamEncryptionFailed (string paramName, string serverName, Exception e){ + return GetExceptionArray (serverName, Res.GetString(Res.TCE_ParamEncryptionFailed, paramName), e); + } + + static internal Exception ParamDecryptionFailed (string paramName, string serverName, Exception e) { + return GetExceptionArray (serverName, Res.GetString(Res.TCE_ParamDecryptionFailed, paramName), e); + } + + static internal Exception ColumnDecryptionFailed (string columnName, string serverName, Exception e) { + return GetExceptionArray (serverName, Res.GetString(Res.TCE_ColumnDecryptionFailed, columnName), e); + } + + // + // TCE- Client side query processing errors. + // + static internal Exception UnknownColumnEncryptionAlgorithm (string algorithmName, string supportedAlgorithms) { + return ADP.Argument(Res.GetString(Res.TCE_UnknownColumnEncryptionAlgorithm, algorithmName, supportedAlgorithms)); + } + + static internal Exception UnknownColumnEncryptionAlgorithmId (int algoId, string supportAlgorithmIds) { + return ADP.Argument(Res.GetString(Res.TCE_UnknownColumnEncryptionAlgorithmId, algoId, supportAlgorithmIds), TdsEnums.TCE_PARAM_CIPHER_ALGORITHM_ID); + } + + static internal Exception UnsupportedNormalizationVersion (byte version) { + return ADP.Argument(Res.GetString(Res.TCE_UnsupportedNormalizationVersion, version, "'1'", "SQL Server")); + } + + static internal Exception UnrecognizedKeyStoreProviderName(string providerName, List systemProviders, List customProviders) { + const string valueSeparator = @", "; + string systemProviderStr = string.Join (valueSeparator, systemProviders.Select(provider => @"'" + provider + @"'")); + string customProviderStr = string.Join (valueSeparator, customProviders.Select(provider => @"'" + provider + @"'")); + return ADP.Argument(Res.GetString(Res.TCE_UnrecognizedKeyStoreProviderName, providerName, systemProviderStr, customProviderStr)); + } + + static internal Exception InvalidDataTypeForEncryptedParameter(string parameterName, int actualDataType, int expectedDataType) { + return ADP.Argument(Res.GetString(Res.TCE_NullProviderValue, parameterName, actualDataType, expectedDataType)); + } +#if !MONO + static internal Exception KeyDecryptionFailed (string providerName, string keyHex, Exception e) { + if (providerName.Equals(SqlColumnEncryptionCertificateStoreProvider.ProviderName)) { + return GetExceptionArray(null, Res.GetString(Res.TCE_KeyDecryptionFailedCertStore, providerName, keyHex), e); + } + else { + return GetExceptionArray(null, Res.GetString(Res.TCE_KeyDecryptionFailed, providerName, keyHex), e); + } + } +#endif + static internal Exception UntrustedKeyPath(string keyPath, string serverName) { + return ADP.Argument(Res.GetString(Res.TCE_UntrustedKeyPath, keyPath, serverName)); + } + + static internal Exception UnsupportedDatatypeEncryption (string dataType) { + return ADP.Argument(Res.GetString(Res.TCE_UnsupportedDatatype, dataType)); + } + + static internal Exception ThrowDecryptionFailed (string keyStr, string valStr, Exception e) { + return GetExceptionArray (null, Res.GetString(Res.TCE_DecryptionFailed, keyStr, valStr), e); + } + + // + // TCE- SQL connection related error messages + // + static internal Exception TceNotSupported() { + return ADP.InvalidOperation (Res.GetString (Res.TCE_NotSupportedByServer, "SQL Server")); + } + + // + // TCE- Extensibility related error messages + // + static internal Exception CanOnlyCallOnce() { + return ADP.InvalidOperation(Res.GetString(Res.TCE_CanOnlyCallOnce)); + } + + static internal Exception NullCustomKeyStoreProviderDictionary() { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS, Res.GetString(Res.TCE_NullCustomKeyStoreProviderDictionary)); + } + + static internal Exception InvalidCustomKeyStoreProviderName(string providerName, string prefix) { + return ADP.Argument(Res.GetString(Res.TCE_InvalidCustomKeyStoreProviderName, providerName, prefix), TdsEnums.TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS); + } + + static internal Exception NullProviderValue(string providerName) { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS, Res.GetString(Res.TCE_NullProviderValue, providerName)); + } + + static internal Exception EmptyProviderName() { + return ADP.ArgumentNull(TdsEnums.TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS, Res.GetString(Res.TCE_EmptyProviderName)); + } + // // transactions. // @@ -739,6 +1233,17 @@ namespace System.Data.SqlClient { return ADP.InvalidOperation(Res.GetString(Res.SQL_OpenResultCountExceeded)); } + // + // Global Transactions. + // + static internal Exception GlobalTransactionsNotEnabled() { + return ADP.InvalidOperation(Res.GetString(Res.GT_Disabled)); + } + + static internal Exception UnsupportedSysTxForGlobalTransactions() { + return ADP.InvalidOperation(Res.GetString(Res.GT_UnsupportedSysTxVersion)); + } + static internal readonly byte[] AttentionHeader = new byte[] { TdsEnums.MT_ATTN, // Message Type TdsEnums.ST_EOM, // Status @@ -1153,4 +1658,50 @@ namespace System.Data.SqlClient { } } } + + /// + /// This class holds methods invoked on System.Transactions through reflection for Global Transactions + /// + static internal class SysTxForGlobalTransactions { + + private static readonly Lazy _enlistPromotableSinglePhase = new Lazy(() => + typeof(SysTx.Transaction).GetMethod("EnlistPromotableSinglePhase", new Type[] {typeof(SysTx.IPromotableSinglePhaseNotification), typeof(Guid)})); + + private static readonly Lazy _setDistributedTransactionIdentifier = new Lazy(() => + typeof(SysTx.Transaction).GetMethod("SetDistributedTransactionIdentifier", new Type[] { typeof(SysTx.IPromotableSinglePhaseNotification), typeof(Guid) })); + + private static readonly Lazy _getPromotedToken = new Lazy(() => + typeof(SysTx.Transaction).GetMethod("GetPromotedToken")); + + /// + /// Enlists the given IPromotableSinglePhaseNotification and Non-MSDTC Promoter type into a transaction + /// + /// The MethodInfo instance to be invoked. Null if the method doesn't exist + public static MethodInfo EnlistPromotableSinglePhase { + get { + return _enlistPromotableSinglePhase.Value; + } + } + + /// + /// Sets the given DistributedTransactionIdentifier for a Transaction instance. + /// Needs to be invoked when using a Non-MSDTC Promoter type + /// + /// The MethodInfo instance to be invoked. Null if the method doesn't exist + public static MethodInfo SetDistributedTransactionIdentifier { + get { + return _setDistributedTransactionIdentifier.Value; + } + } + + /// + /// Gets the Promoted Token for a Transaction + /// + /// The MethodInfo instance to be invoked. Null if the method doesn't exist + public static MethodInfo GetPromotedToken { + get { + return _getPromotedToken.Value; + } + } + } }//namespace diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs b/external/referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs index 6cdc17706d..319e252b21 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsEnums.cs @@ -57,6 +57,7 @@ namespace System.Data.SqlClient { // network function string contants public const string INIT_SSPI_PACKAGE = "InitSSPIPackage"; + public const string INIT_ADAL_PACKAGE = "InitADALPackage"; public const string INIT_SESSION = "InitSession"; public const string CONNECTION_GET_SVR_USER = "ConnectionGetSvrUser"; public const string GEN_CLIENT_CONTEXT = "GenClientContext"; @@ -104,7 +105,7 @@ namespace System.Data.SqlClient { public const byte MT_BINARY = 5; // Unformatted binary response data (UNUSED) public const byte MT_ATTN = 6; // Attention (break) signal public const byte MT_BULK = 7; // Bulk load data - public const byte MT_OPEN = 8; // Set up subchannel (UNUSED) + public const byte MT_FEDAUTH = 8; // Authentication token for federated authentication public const byte MT_CLOSE = 9; // Close subchannel (UNUSED) public const byte MT_ERROR = 10; // Protocol error detected public const byte MT_ACK = 11; // Protocol acknowledgement (UNUSED) @@ -156,6 +157,7 @@ namespace System.Data.SqlClient { public const byte SQLCOLMETADATA = 0x81; // Column metadata including name public const byte SQLALTMETADATA = 0x88; // Alt column metadata including name public const byte SQLSSPI = 0xed; // SSPI data + public const byte SQLFEDAUTHINFO = 0xee; // Info for client to generate fed auth token // Environment change notification streams // TYPE on TDS ENVCHANGE token stream (from sql\ntdbms\include\odsapi.h) @@ -196,13 +198,41 @@ namespace System.Data.SqlClient { // Feature Extension public const byte FEATUREEXT_TERMINATOR = 0xFF; public const byte FEATUREEXT_SRECOVERY = 0x01; + public const byte FEATUREEXT_FEDAUTH = 0x02; + public const byte FEATUREEXT_TCE = 0x04; + public const byte FEATUREEXT_GLOBALTRANSACTIONS = 0x05; [Flags] public enum FeatureExtension:uint { None=0, SessionRecovery=1, + FedAuth=2, + Tce=4, + GlobalTransactions = 8, } + public const byte FEDAUTHLIB_LIVEID = 0X00; + public const byte FEDAUTHLIB_SECURITYTOKEN = 0x01; + public const byte FEDAUTHLIB_ADAL = 0x02; + public const byte FEDAUTHLIB_RESERVED = 0X7F; + + public enum FedAuthLibrary:byte { + LiveId=FEDAUTHLIB_LIVEID, + SecurityToken=FEDAUTHLIB_SECURITYTOKEN, + ADAL=FEDAUTHLIB_ADAL, + Default=FEDAUTHLIB_RESERVED + } + + public const byte ADALWORKFLOW_ACTIVEDIRECTORYPASSWORD = 0x01; + public const byte ADALWORKFLOW_ACTIVEDIRECTORYINTEGRATED = 0x02; + + public enum ActiveDirectoryWorkflow : byte { + Password=ADALWORKFLOW_ACTIVEDIRECTORYPASSWORD, + Integrated=ADALWORKFLOW_ACTIVEDIRECTORYINTEGRATED, + } + + // The string used for username in the error message when Authentication = Active Directory Integrated with FedAuth is used, if authentication fails. + public const string NTAUTHORITYANONYMOUSLOGON = @"NT Authority\Anonymous Logon"; // Loginrec defines public const byte MAX_LOG_NAME = 30; // TDS 4.2 login rec max name length @@ -313,6 +343,7 @@ namespace System.Data.SqlClient { // second byte public const byte ClrFixedLen = 0x1; // Fixed length CLR type public const byte IsColumnSet = 0x4; // Column is an XML representation of an aggregation of other columns + public const byte IsEncrypted = 0x8; // Column is encrypted using TCE // null values public const uint VARLONGNULL = 0xffffffff; // null value for text and image types @@ -478,7 +509,7 @@ namespace System.Data.SqlClient { // RPC parameter class public const byte RPC_PARAM_BYREF = 0x1; public const byte RPC_PARAM_DEFAULT = 0x2; - public const byte RPC_PARAM_IS_LOB_COOKIE = 0x8; + public const byte RPC_PARAM_ENCRYPTED = 0x8; // SQL parameter list text public const string PARAM_OUTPUT = "output"; @@ -511,7 +542,7 @@ namespace System.Data.SqlClient { public const int LOGON_FAILED = 18456; public const int PASSWORD_EXPIRED = 18488; public const int IMPERSONATION_FAILED = 1346; - public const int P_TOKENTOOLONG = 103; + public const int P_TOKENTOOLONG = 103; // SNI\Win32 error values // NOTE: these are simply windows system error codes, not SNI specific @@ -862,10 +893,66 @@ namespace System.Data.SqlClient { 1, }; + internal const int MAX_TIME_SCALE = 7; // Maximum scale for time-related types + internal const int MAX_TIME_LENGTH = 5; // Maximum length for time + internal const int MAX_DATETIME2_LENGTH = 8; // Maximum length for datetime2 internal const int WHIDBEY_DATE_LENGTH = 10; internal static readonly int[] WHIDBEY_TIME_LENGTH = { 8, 10, 11, 12, 13, 14, 15, 16 }; internal static readonly int[] WHIDBEY_DATETIME2_LENGTH = { 19, 21, 22, 23, 24, 25, 26, 27 }; internal static readonly int[] WHIDBEY_DATETIMEOFFSET_LENGTH = {26, 28, 29, 30, 31, 32, 33, 34 }; + + internal enum FedAuthInfoId:byte { + Stsurl = 0x01, // FedAuthInfoData is token endpoint URL from which to acquire fed auth token + Spn = 0x02, // FedAuthInfoData is the SPN to use for acquiring fed auth token + } + + // TCE Related constants + internal const byte MAX_SUPPORTED_TCE_VERSION = 0x01; // max version + internal const ushort MAX_TCE_CIPHERINFO_SIZE = 2048; // max size of cipherinfo blob + internal const long MAX_TCE_CIPHERTEXT_SIZE = 2147483648; // max size of encrypted blob- currently 2GB. + internal const byte CustomCipherAlgorithmId = 0; // Id used for custom encryption algorithm. + + internal const int AES_256_CBC = 1; + internal const int AEAD_AES_256_CBC_HMAC_SHA256 = 2; + + // TCE Param names for exec handling + internal const string TCE_PARAM_CIPHERTEXT = "cipherText"; + internal const string TCE_PARAM_CIPHER_ALGORITHM_ID="cipherAlgorithmId"; + internal const string TCE_PARAM_COLUMNENCRYPTION_KEY="columnEncryptionKey"; + internal const string TCE_PARAM_ENCRYPTION_ALGORITHM="encryptionAlgorithm"; + internal const string TCE_PARAM_ENCRYPTIONTYPE = "encryptionType"; + internal const string TCE_PARAM_ENCRYPTIONKEY = "encryptionKey"; + internal const string TCE_PARAM_MASTERKEY_PATH = "masterKeyPath"; + internal const string TCE_PARAM_ENCRYPTED_CEK = "encryptedColumnEncryptionKey"; + internal const string TCE_PARAM_CLIENT_KEYSTORE_PROVIDERS="clientKeyStoreProviders"; + internal const string TCE_PARAM_FORCE_COLUMN_ENCRYPTION="ForceColumnEncryption(true)"; + } + + internal enum ParsingErrorState { + Undefined = 0, + FedAuthInfoLengthTooShortForCountOfInfoIds = 1, + FedAuthInfoLengthTooShortForData = 2, + FedAuthInfoFailedToReadCountOfInfoIds = 3, + FedAuthInfoFailedToReadTokenStream = 4, + FedAuthInfoInvalidOffset = 5, + FedAuthInfoFailedToReadData = 6, + FedAuthInfoDataNotUnicode = 7, + FedAuthInfoDoesNotContainStsurlAndSpn = 8, + FedAuthInfoNotReceived = 9, + FedAuthNotAcknowledged = 10, + FedAuthFeatureAckContainsExtraData = 11, + FedAuthFeatureAckUnknownLibraryType = 12, + UnrequestedFeatureAckReceived = 13, + UnknownFeatureAck = 14, + InvalidTdsTokenReceived = 15, + SessionStateLengthTooShort = 16, + SessionStateInvalidStatus = 17, + CorruptedTdsStream = 18, + ProcessSniPacketFailed = 19, + FedAuthRequiredPreLoginResponseInvalidValue = 20, + TceUnknownVersion = 21, + TceInvalidVersion = 22, + TceInvalidOrdinalIntoCipherInfoTable = 23, } internal enum SniContext { @@ -884,5 +971,96 @@ namespace System.Data.SqlClient { Snix_Close, Snix_SendRows, } -} + /// + /// Column Encryption Setting to be used for the SqlConnection. + /// + public enum SqlConnectionColumnEncryptionSetting { + /// + /// Disables column encryption by default on all commands on this connection. + /// + Disabled = 0, + + /// + /// Enables column encryption by default on all commands on this connection. + /// + Enabled, + } + + /// + /// Column Encryption Setting to be used for the SqlCommand. + /// + public enum SqlCommandColumnEncryptionSetting { + /// + /// if “Column Encryption Setting=Enabled” in the connection string, use Enabled. Otherwise, maps to Disabled. + /// + UseConnectionSetting = 0, + + /// + /// Enables TCE for the command. Overrides the connection level setting for this command. + /// + Enabled, + + /// + /// Parameters will not be encrypted, only the ResultSet will be decrypted. This is an optimization for queries that do not pass any encrypted input parameters. + /// Overrides the connection level setting for this command. + /// + ResultSetOnly, + + /// + /// Disables TCE for the command.Overrides the connection level setting for this command. + /// + Disabled, + } + + public enum SqlAuthenticationMethod { + NotSpecified = 0, + SqlPassword, + ActiveDirectoryPassword, + ActiveDirectoryIntegrated, + } + // This enum indicates the state of TransparentNetworkIPResolution + // The first attempt when TNIR is on should be sequential. If the first attempt failes next attempts should be parallel. + internal enum TransparentNetworkResolutionState { + DisabledMode = 0, + SequentialMode, + ParallelMode + }; + + internal class ActiveDirectoryAuthentication + { + internal const string AdoClientId = "4d079b4c-cab7-4b7c-a115-8fd51b6f8239"; + internal const string AdalGetAccessTokenFunctionName = "ADALGetAccessToken"; + internal const int GetAccessTokenSuccess = 0; + internal const int GetAccessTokenInvalidGrant = 1; + internal const int GetAccessTokenTansisentError = 2; + internal const int GetAccessTokenOtherError = 3; + } + + // Fields in the first resultset of "sp_describe_parameter_encryption". + // We expect the server to return the fields in the resultset in the same order as mentioned below. + // If the server changes the below order, then transparent parameter encryption will break. + internal enum DescribeParameterEncryptionResultSet1 { + KeyOrdinal = 0, + DbId, + KeyId, + KeyVersion, + KeyMdVersion, + EncryptedKey, + ProviderName, + KeyPath, + KeyEncryptionAlgorithm, + } + + // Fields in the second resultset of "sp_describe_parameter_encryption" + // We expect the server to return the fields in the resultset in the same order as mentioned below. + // If the server changes the below order, then transparent parameter encryption will break. + internal enum DescribeParameterEncryptionResultSet2 { + ParameterOrdinal = 0, + ParameterName, + ColumnEncryptionAlgorithm, + ColumnEncrytionType, + ColumnEncryptionKeyOrdinal, + NormalizationRuleVersion, + } +} diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsParser.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/TdsParser.cs.REMOVED.git-id index ef1193f6e4..9ea157aa72 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsParser.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsParser.cs.REMOVED.git-id @@ -1 +1 @@ -a0d429ddb1baa51b9e864102b5fc2ca3e3c9f623 \ No newline at end of file +8c2c8cc5d8764a37eb98ae612a4ea8925a6c355f \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserHelperClasses.cs b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserHelperClasses.cs index fe5d91e1be..01322f3193 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserHelperClasses.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserHelperClasses.cs @@ -19,8 +19,9 @@ namespace System.Data.SqlClient { using System.Text; using System.Threading; using System.Security; + using System.Globalization; - using Microsoft.SqlServer.Server; // for SMI metadata + using Microsoft.SqlServer.Server; // for SMI metadata internal enum CallbackType { Read = 0, @@ -47,6 +48,7 @@ namespace System.Data.SqlClient { THREADID, MARS, TRACEID, + FEDAUTHREQUIRED, NUMOPT, LASTOPT = 255 } @@ -65,6 +67,210 @@ namespace System.Data.SqlClient { Broken, } + /// + /// Struct encapsulating the data to be sent to the server as part of Federated Authentication Feature Extension. + /// + internal struct FederatedAuthenticationFeatureExtensionData + { + internal TdsEnums.FedAuthLibrary libraryType; + internal bool fedAuthRequiredPreLoginResponse; + internal SqlAuthenticationMethod authentication; + internal byte[] accessToken; + } + + /// + /// Represents a single encrypted value for a CEK. It contains the encrypted CEK, + /// the store type, name,the key path and encryption algorithm. + /// + internal struct SqlEncryptionKeyInfo { + internal byte[] encryptedKey; // the encrypted "column encryption key" + internal int databaseId; + internal int cekId; + internal int cekVersion; + internal byte[] cekMdVersion; + internal string keyPath; + internal string keyStoreName; + internal string algorithmName; + internal byte normalizationRuleVersion; + } + + /// + /// Encapsulates one entry in the CipherInfo table sent as part of Colmetadata. + /// The same CEK is encrypted multiple times with different master keys (for master key + /// rotation scenario) We need to keep all these around until we can resolve the CEK + /// using the correct master key. + /// + internal struct SqlTceCipherInfoEntry { + + /// + /// List of Column Encryption Key Information. + /// + private readonly List _columnEncryptionKeyValues; + + /// + /// Key Ordinal. + /// + private readonly int _ordinal; + + /// + /// Database ID + /// + private int _databaseId; + + /// + /// Cek ID + /// + private int _cekId; + + /// + /// Cek Version + /// + private int _cekVersion; + + /// + /// Cek MD Version + /// + private byte[] _cekMdVersion; + + /// + /// Return the ordinal. + /// + internal int Ordinal { + get { + return _ordinal; + } + } + + /// + /// Return the DatabaseID. + /// + internal int DatabaseId { + get { + return _databaseId; + } + } + + /// + /// Return the CEK ID. + /// + internal int CekId { + get { + return _cekId; + } + } + + /// + /// Return the CEK Version. + /// + internal int CekVersion { + get { + return _cekVersion; + } + } + + /// + /// Return the CEK MD Version. + /// + internal byte[] CekMdVersion { + get { + return _cekMdVersion; + } + } + + /// + /// Return the list of Column Encryption Key Values. + /// + internal List ColumnEncryptionKeyValues { + get { + return _columnEncryptionKeyValues; + } + } + + /// + /// Add an entry to the list of ColumnEncryptionKeyValues. + /// + /// + /// + /// + /// + /// + /// + /// + /// + internal void Add(byte[] encryptedKey, int databaseId, int cekId, int cekVersion, byte[] cekMdVersion, string keyPath, string keyStoreName, string algorithmName) { + + Debug.Assert(_columnEncryptionKeyValues != null, "_columnEncryptionKeyValues should already be initialized."); + + SqlEncryptionKeyInfo encryptionKey = new SqlEncryptionKeyInfo(); + encryptionKey.encryptedKey = encryptedKey; + encryptionKey.databaseId = databaseId; + encryptionKey.cekId = cekId; + encryptionKey.cekVersion = cekVersion; + encryptionKey.cekMdVersion = cekMdVersion; + encryptionKey.keyPath = keyPath; + encryptionKey.keyStoreName = keyStoreName; + encryptionKey.algorithmName = algorithmName; + _columnEncryptionKeyValues.Add(encryptionKey); + + if (0 == _databaseId) { + _databaseId = databaseId; + _cekId = cekId; + _cekVersion = cekVersion; + _cekMdVersion = cekMdVersion; + } + else { + Debug.Assert(_databaseId == databaseId); + Debug.Assert(_cekId == cekId); + Debug.Assert(_cekVersion == cekVersion); + Debug.Assert (_cekMdVersion != null && cekMdVersion != null && _cekMdVersion.Length == _cekMdVersion.Length); + } + } + + /// + /// Constructor. + /// + /// + internal SqlTceCipherInfoEntry(int ordinal = 0) : this() { + _ordinal = ordinal; + _databaseId = 0; + _cekId = 0; + _cekVersion = 0; + _cekMdVersion = null; + _columnEncryptionKeyValues = new List(); + } + } + + /// + /// Represents a table with various CEKs used in a resultset. Each entry corresponds to one (unique) CEK. The CEK + /// may have been encrypted using multiple master keys (giving us multiple CEK values). All these values form one single + /// entry in this table. + /// + internal struct SqlTceCipherInfoTable { + private readonly SqlTceCipherInfoEntry [] keyList; + + internal SqlTceCipherInfoTable (int tabSize) { + Debug.Assert (0 < tabSize, "Invalid Table Size"); + keyList = new SqlTceCipherInfoEntry[tabSize]; + } + + internal SqlTceCipherInfoEntry this [int index] { + get { + Debug.Assert (index < keyList.Length, "Invalid index specified."); + return keyList[index]; + } + set { + Debug.Assert (index < keyList.Length, "Invalid index specified."); + keyList[index] = value; + } + } + + internal int Size { + get { + return keyList.Length; + } + } + } + sealed internal class SqlCollation { // First 20 bits of info field represent the lcid, bits 21-25 are compare options private const uint IgnoreCase = 1 << 20; // bit 21 - IgnoreCase @@ -230,6 +436,7 @@ namespace System.Data.SqlClient { } sealed internal class SqlLogin { + internal SqlAuthenticationMethod authentication = SqlAuthenticationMethod.NotSpecified; // Authentication type internal int timeout; // login timeout internal bool userInstance = false; // user instance internal string hostName = ""; // client machine name @@ -258,6 +465,20 @@ namespace System.Data.SqlClient { internal UInt32 tdsVersion; } + sealed internal class SqlFedAuthInfo { + internal string spn; + internal string stsurl; + public override string ToString() { + return String.Format(CultureInfo.InvariantCulture, "STSURL: {0}, SPN: {1}", stsurl ?? String.Empty, spn ?? String.Empty); + } + } + + sealed internal class SqlFedAuthToken { + internal UInt32 dataLen; + internal byte[] accessToken; + internal long expirationFileTime; + } + sealed internal class _SqlMetaData : SqlMetaDataPriv, ICloneable { internal string column; @@ -337,9 +558,11 @@ namespace System.Data.SqlClient { internal int[] indexMap; internal int visibleColumns; internal DataTable schemaTable; - private readonly _SqlMetaData[] metaDataArray; + internal readonly SqlTceCipherInfoTable? cekTable; // table of "column encryption keys" used for this metadataset + internal readonly _SqlMetaData[] metaDataArray; - internal _SqlMetaDataSet(int count) { + internal _SqlMetaDataSet(int count, SqlTceCipherInfoTable? cipherTable) { + cekTable = cipherTable; metaDataArray = new _SqlMetaData[count]; for(int i = 0; i < metaDataArray.Length; ++i) { metaDataArray[i] = new _SqlMetaData(i); @@ -428,6 +651,170 @@ namespace System.Data.SqlClient { } } + /// + /// Represents Encryption related information of the cipher data. + /// + internal class SqlCipherMetadata { + + /// + /// Cipher Info Entry. + /// + private SqlTceCipherInfoEntry? _sqlTceCipherInfoEntry; + + /// + /// Encryption Algorithm Id. + /// + private readonly byte _cipherAlgorithmId; + + /// + /// Encryption Algorithm Name. + /// + private readonly string _cipherAlgorithmName; + + /// + /// Encryption Type. + /// + private readonly byte _encryptionType; + + /// + /// Normalization Rule Version. + /// + private readonly byte _normalizationRuleVersion; + + /// + /// Encryption Algorithm Handle. + /// + private SqlClientEncryptionAlgorithm _sqlClientEncryptionAlgorithm; + + /// + /// Sql Encryption Key Info. + /// + private SqlEncryptionKeyInfo? _sqlEncryptionKeyInfo; + + /// + /// Ordinal (into the Cek Table). + /// + private readonly ushort _ordinal; + + /// + /// Return the Encryption Info Entry. + /// + internal SqlTceCipherInfoEntry? EncryptionInfo { + get { + return _sqlTceCipherInfoEntry; + } + set { + Debug.Assert(!_sqlTceCipherInfoEntry.HasValue, "We can only set the EncryptionInfo once."); + _sqlTceCipherInfoEntry = value; + } + } + + /// + /// Return the cipher's encryption algorithm id. + /// + internal byte CipherAlgorithmId { + get { + return _cipherAlgorithmId; + } + } + + /// + /// Return the cipher's encryption algorithm name (could be null). + /// + internal string CipherAlgorithmName { + get { + return _cipherAlgorithmName; + } + } + + /// + /// Return EncryptionType (Deterministic, Randomized, etc.) + /// + internal byte EncryptionType { + get { + return _encryptionType; + } + } + + /// + /// Return normalization rule version. + /// + internal byte NormalizationRuleVersion { + get { + return _normalizationRuleVersion; + } + } + + /// + /// Return the cipher encyrption algorithm handle. + /// + internal SqlClientEncryptionAlgorithm CipherAlgorithm { + get { + return _sqlClientEncryptionAlgorithm; + } + set { + Debug.Assert(_sqlClientEncryptionAlgorithm == null, "_sqlClientEncryptionAlgorithm should not be set more than once."); + _sqlClientEncryptionAlgorithm = value; + } + } + + /// + /// Return Encryption Key Info. + /// + internal SqlEncryptionKeyInfo? EncryptionKeyInfo { + get { + return _sqlEncryptionKeyInfo; + } + + set { + Debug.Assert(!_sqlEncryptionKeyInfo.HasValue, "_sqlEncryptionKeyInfo should not be set more than once."); + _sqlEncryptionKeyInfo = value; + } + } + + /// + /// Return Ordinal into Cek Table. + /// + internal ushort CekTableOrdinal { + get { + return _ordinal; + } + } + + /// + /// Constructor. + /// + /// + /// + /// + /// + /// + internal SqlCipherMetadata (SqlTceCipherInfoEntry? sqlTceCipherInfoEntry, + ushort ordinal, + byte cipherAlgorithmId, + string cipherAlgorithmName, + byte encryptionType, + byte normalizationRuleVersion) { + Debug.Assert(!sqlTceCipherInfoEntry.Equals(default(SqlTceCipherInfoEntry)), "sqlTceCipherInfoEntry should not be un-initialized."); + + _sqlTceCipherInfoEntry = sqlTceCipherInfoEntry; + _ordinal = ordinal; + _cipherAlgorithmId = cipherAlgorithmId; + _cipherAlgorithmName = cipherAlgorithmName; + _encryptionType = encryptionType; + _normalizationRuleVersion = normalizationRuleVersion; + _sqlEncryptionKeyInfo = null; + } + + /// + /// Do we have an handle to the cipher encryption algorithm already ? + /// + /// + internal bool IsAlgorithmInitialized() { + return (null != _sqlClientEncryptionAlgorithm) ? true : false; + } + } + internal class SqlMetaDataPriv { internal SqlDbType type; // SqlDbType enum value internal byte tdsType; // underlying tds type @@ -462,6 +849,9 @@ namespace System.Data.SqlClient { internal string structuredTypeName; internal IList structuredFields; + internal bool isEncrypted; // TCE encrypted? + internal SqlMetaDataPriv baseTI; // for encrypted columns, represents the TYPE_INFO for plaintext value + internal SqlCipherMetadata cipherMD; // Cipher related metadata for encrypted columns. internal SqlMetaDataPriv() { } @@ -493,6 +883,157 @@ namespace System.Data.SqlClient { this.structuredTypeName = original.structuredTypeName; this.structuredFields = original.structuredFields; } + + /// + /// Is the algorithm handle for the cipher encryption initialized ? + /// + /// + internal bool IsAlgorithmInitialized() { + if (null != cipherMD) { + return cipherMD.IsAlgorithmInitialized(); + } + + return false; + } + + /// + /// Returns the normalization rule version byte. + /// + /// + internal byte NormalizationRuleVersion { + get { + if (null != cipherMD){ + return cipherMD.NormalizationRuleVersion; + } + + return 0x00; + } + } + } + + /// + /// Class encapsulating additional information when sending encrypted input parameters. + /// + sealed internal class SqlColumnEncryptionInputParameterInfo + { + /// + /// Metadata of the parameter to write the TYPE_INFO of the unencrypted column data type. + /// + private readonly SmiParameterMetaData _smiParameterMetadata; + + /// + /// Column encryption related metadata. + /// + private readonly SqlCipherMetadata _cipherMetadata; + + /// + /// Serialized format for a subset of members. + /// Does not include _smiParameterMetadata's serialization. + /// + private readonly byte[] _serializedWireFormat; + + /// + /// Return the SMI Parameter Metadata. + /// + internal SmiParameterMetaData ParameterMetadata { + get { + return _smiParameterMetadata; + } + } + + /// + /// Return the serialized format for some members. + /// This is pre-calculated and cached since members are immutable. + /// Does not include _smiParameterMetadata's serialization. + /// + internal byte[] SerializedWireFormat + { + get { + return _serializedWireFormat; + } + } + + /// + /// Constructor. + /// + /// + /// + internal SqlColumnEncryptionInputParameterInfo(SmiParameterMetaData smiParameterMetadata, SqlCipherMetadata cipherMetadata) { + Debug.Assert(smiParameterMetadata != null, "smiParameterMetadata should not be null."); + Debug.Assert(cipherMetadata != null, "cipherMetadata should not be null"); + Debug.Assert(cipherMetadata.EncryptionKeyInfo.HasValue, "cipherMetadata.EncryptionKeyInfo.HasValue should be true."); + + _smiParameterMetadata = smiParameterMetadata; + _cipherMetadata = cipherMetadata; + _serializedWireFormat = SerializeToWriteFormat(); + } + + /// + /// Serializes some data members to wire format. + /// + private byte[] SerializeToWriteFormat() { + int totalLength = 0; + + // CipherAlgorithmId. + totalLength += sizeof(byte); + + // Encryption Type. + totalLength += sizeof(byte); + + // Database id of the encryption key. + totalLength += sizeof(int); + + // Id of the encryption key. + totalLength += sizeof(int); + + // Version of the encryption key. + totalLength += sizeof(int); + + // Metadata version of the encryption key. + totalLength += _cipherMetadata.EncryptionKeyInfo.Value.cekMdVersion.Length; + + // Normalization Rule Version. + totalLength += sizeof(byte); + + byte[] serializedWireFormat = new byte[totalLength]; + + // No:of bytes consumed till now. Running variable. + int consumedBytes = 0; + + // 1 - Write Cipher Algorithm Id. + serializedWireFormat[consumedBytes++] = _cipherMetadata.CipherAlgorithmId; + + // 2 - Write Encryption Type. + serializedWireFormat[consumedBytes++] = _cipherMetadata.EncryptionType; + + // 3 - Write the database id of the encryption key. + SerializeIntIntoBuffer(_cipherMetadata.EncryptionKeyInfo.Value.databaseId, serializedWireFormat, ref consumedBytes); + + // 4 - Write the id of the encryption key. + SerializeIntIntoBuffer(_cipherMetadata.EncryptionKeyInfo.Value.cekId, serializedWireFormat, ref consumedBytes); + + // 5 - Write the version of the encryption key. + SerializeIntIntoBuffer(_cipherMetadata.EncryptionKeyInfo.Value.cekVersion, serializedWireFormat, ref consumedBytes); + + // 6 - Write the metadata version of the encryption key. + Buffer.BlockCopy(_cipherMetadata.EncryptionKeyInfo.Value.cekMdVersion, 0, serializedWireFormat, consumedBytes, _cipherMetadata.EncryptionKeyInfo.Value.cekMdVersion.Length); + consumedBytes += _cipherMetadata.EncryptionKeyInfo.Value.cekMdVersion.Length; + + // 7 - Write Normalization Rule Version. + serializedWireFormat[consumedBytes++] = _cipherMetadata.NormalizationRuleVersion; + + return serializedWireFormat; + } + + /// + /// Serializes an int into the provided buffer and offset. + /// + private void SerializeIntIntoBuffer(int value, byte[] buffer, ref int offset) { + buffer[offset++] = (byte)(value & 0xff); + buffer[offset++] = (byte)((value >> 8) & 0xff); + buffer[offset++] = (byte)((value >> 16) & 0xff); + buffer[offset++] = (byte)((value >> 24) & 0xff); + } } sealed internal class _SqlRPC { @@ -513,6 +1054,16 @@ namespace System.Data.SqlClient { internal int warningsIndexStart; internal int warningsIndexEnd; internal SqlErrorCollection warnings; + internal bool needsFetchParameterEncryptionMetadata; + internal string GetCommandTextOrRpcName() { + if (TdsEnums.RPC_PROCID_EXECUTESQL == ProcID) { + // Param 0 is the actual sql executing + return (string)parameters[0].Value; + } + else { + return rpcName; + } + } } sealed internal class SqlReturnValue : SqlMetaDataPriv { diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserSafeHandles.cs b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserSafeHandles.cs index 1bc1b7398a..73286f199c 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserSafeHandles.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserSafeHandles.cs @@ -132,7 +132,9 @@ namespace System.Data.SqlClient { out byte[] instanceName, bool flushCache, bool fSync, - bool fParallel) + bool fParallel, + TransparentNetworkResolutionState transparentNetworkResolutionState, + int totalTimeout) : base(IntPtr.Zero, true) { RuntimeHelpers.PrepareConstrainedRegions(); @@ -146,8 +148,9 @@ namespace System.Data.SqlClient { timeout = Timeout.Infinite; // -1 == native SNIOPEN_TIMEOUT_VALUE / INFINITE } + int transparentNetworkResolutionStateNo = (int)transparentNetworkResolutionState; _status = SNINativeMethodWrapper.SNIOpenSyncEx(myInfo, serverName, ref base.handle, - spnBuffer, instanceName, flushCache, fSync, timeout, fParallel); + spnBuffer, instanceName, flushCache, fSync, timeout, fParallel, transparentNetworkResolutionStateNo, totalTimeout); } } diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStateObject.cs.REMOVED.git-id b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStateObject.cs.REMOVED.git-id index 26649f8c71..398bcc020f 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStateObject.cs.REMOVED.git-id +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStateObject.cs.REMOVED.git-id @@ -1 +1 @@ -81941166389c513b090acce6ba0d46a415057127 \ No newline at end of file +75e2a4b30c85da8f852bfbb12892cd57078088b4 \ No newline at end of file diff --git a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs index 3b85484e02..187a187d0b 100644 --- a/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs +++ b/external/referencesource/System.Data/System/Data/SqlClient/TdsParserStaticMethods.cs @@ -113,7 +113,11 @@ namespace System.Data.SqlClient { [ResourceExposure(ResourceScope.None)] // SxS: we use this method for TDS login only [ResourceConsumption(ResourceScope.Process, ResourceScope.Process)] static internal int GetCurrentProcessIdForTdsLoginOnly() { +#if MOBILE + return 0; +#else return SafeNativeMethods.GetCurrentProcessId(); +#endif } diff --git a/external/referencesource/System.Data/System/Data/SqlDbType.cs b/external/referencesource/System.Data/System/Data/SqlDbType.cs index fc3149c61a..30322f22ff 100644 --- a/external/referencesource/System.Data/System/Data/SqlDbType.cs +++ b/external/referencesource/System.Data/System/Data/SqlDbType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// blained +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/StateChangeEventHandler.cs b/external/referencesource/System.Data/System/Data/StateChangeEventHandler.cs index 7ded8507eb..2b415be9ac 100644 --- a/external/referencesource/System.Data/System/Data/StateChangeEventHandler.cs +++ b/external/referencesource/System.Data/System/Data/StateChangeEventHandler.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/StatementType.cs b/external/referencesource/System.Data/System/Data/StatementType.cs index b4cbc814c2..b4bc1ebb98 100644 --- a/external/referencesource/System.Data/System/Data/StatementType.cs +++ b/external/referencesource/System.Data/System/Data/StatementType.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/UpdateRowSource.cs b/external/referencesource/System.Data/System/Data/UpdateRowSource.cs index a063670bb3..639a0408ff 100644 --- a/external/referencesource/System.Data/System/Data/UpdateRowSource.cs +++ b/external/referencesource/System.Data/System/Data/UpdateRowSource.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/XmlContent.cs b/external/referencesource/System.Data/System/Data/XmlContent.cs index 76e4e04cd1..8cd2614b8c 100644 --- a/external/referencesource/System.Data/System/Data/XmlContent.cs +++ b/external/referencesource/System.Data/System/Data/XmlContent.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/XmlReadMode.cs b/external/referencesource/System.Data/System/Data/XmlReadMode.cs index 9b6c96ea7c..c0ad084bea 100644 --- a/external/referencesource/System.Data/System/Data/XmlReadMode.cs +++ b/external/referencesource/System.Data/System/Data/XmlReadMode.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/XmlWriteMode.cs b/external/referencesource/System.Data/System/Data/XmlWriteMode.cs index a14680cc77..c0cb4620fc 100644 --- a/external/referencesource/System.Data/System/Data/XmlWriteMode.cs +++ b/external/referencesource/System.Data/System/Data/XmlWriteMode.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// jasonzhu //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/dbtype.cs b/external/referencesource/System.Data/System/Data/dbtype.cs index 5e336ce251..61d06f0e66 100644 --- a/external/referencesource/System.Data/System/Data/dbtype.cs +++ b/external/referencesource/System.Data/System/Data/dbtype.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/Data/updatestatus.cs b/external/referencesource/System.Data/System/Data/updatestatus.cs index 7bd09483a6..509e14b415 100644 --- a/external/referencesource/System.Data/System/Data/updatestatus.cs +++ b/external/referencesource/System.Data/System/Data/updatestatus.cs @@ -2,8 +2,8 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] +// markash +// laled //------------------------------------------------------------------------------ namespace System.Data { diff --git a/external/referencesource/System.Data/System/NewXml/IXmlDataVirtualNode.cs b/external/referencesource/System.Data/System/NewXml/IXmlDataVirtualNode.cs index 35d05f1bb5..6dbed4e6d7 100644 --- a/external/referencesource/System.Data/System/NewXml/IXmlDataVirtualNode.cs +++ b/external/referencesource/System.Data/System/NewXml/IXmlDataVirtualNode.cs @@ -2,9 +2,9 @@ // // Copyright (c) Microsoft Corporation. All rights reserved. // -// [....] -// [....] -// [....] +// amirhmy +// markash +// danield //------------------------------------------------------------------------------ namespace System.Xml { diff --git a/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/AppContextDefaultValues.cs b/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/AppContextDefaultValues.cs new file mode 100644 index 0000000000..8a130a0f34 --- /dev/null +++ b/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/AppContextDefaultValues.cs @@ -0,0 +1,169 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== +using System; +using System.Collections.Generic; + +namespace System +{ + internal static partial class AppContextDefaultValues + { + public static void PopulateDefaultValues() + { + string platformIdentifier, profile; + int version; + + ParseTargetFrameworkName(out platformIdentifier, out profile, out version); + + // Call into each library to populate their default switches + PopulateDefaultValuesPartial(platformIdentifier, profile, version); + } + + /// + /// We have this separate method for getting the parsed elements out of the TargetFrameworkName so we can + /// more easily support this on other platforms. + /// + private static void ParseTargetFrameworkName(out string identifier, out string profile, out int version) + { + string targetFrameworkMoniker = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName; + + // If we don't have a TFM then we should default to the 4.0 behavior where all quirks are turned on. + if (!TryParseFrameworkName(targetFrameworkMoniker, out identifier, out version, out profile)) + { +#if FEATURE_CORECLR + if (CompatibilitySwitches.UseLatestBehaviorWhenTFMNotSpecified) + { + // If we want to use the latest behavior it is enough to set the value of the switch to string.Empty. + // When the get to the caller of this method (PopulateDefaultValuesPartial) we are going to use the + // identifier we just set to decide which switches to turn on. By having an empty string as the + // identifier we are simply saying -- don't turn on any switches, and we are going to get the latest + // behavior for all the switches + identifier = string.Empty; + } + else +#endif + { + identifier = ".NETFramework"; + version = 40000; + profile = string.Empty; + } + } + } + + // This code was a constructor copied from the FrameworkName class, which is located in System.dll. + // Parses strings in the following format: ", Version=[v|V], Profile=" + // - The identifier and version is required, profile is optional + // - Only three components are allowed. + // - The version string must be in the System.Version format; an optional "v" or "V" prefix is allowed + private static bool TryParseFrameworkName(String frameworkName, out String identifier, out int version, out String profile) + { + // For parsing a target Framework moniker, from the FrameworkName class + const char c_componentSeparator = ','; + const char c_keyValueSeparator = '='; + const char c_versionValuePrefix = 'v'; + const String c_versionKey = "Version"; + const String c_profileKey = "Profile"; + + identifier = profile = string.Empty; + version = 0; + + if (frameworkName == null || frameworkName.Length == 0) + { + return false; + } + + String[] components = frameworkName.Split(c_componentSeparator); + version = 0; + + // Identifer and Version are required, Profile is optional. + if (components.Length < 2 || components.Length > 3) + { + return false; + } + + // + // 1) Parse the "Identifier", which must come first. Trim any whitespace + // + identifier = components[0].Trim(); + + if (identifier.Length == 0) + { + return false; + } + + bool versionFound = false; + profile = null; + + // + // The required "Version" and optional "Profile" component can be in any order + // + for (int i = 1; i < components.Length; i++) + { + // Get the key/value pair separated by '=' + string[] keyValuePair = components[i].Split(c_keyValueSeparator); + + if (keyValuePair.Length != 2) + { + return false; + } + + // Get the key and value, trimming any whitespace + string key = keyValuePair[0].Trim(); + string value = keyValuePair[1].Trim(); + + // + // 2) Parse the required "Version" key value + // + if (key.Equals(c_versionKey, StringComparison.OrdinalIgnoreCase)) + { + versionFound = true; + + // Allow the version to include a 'v' or 'V' prefix... + if (value.Length > 0 && (value[0] == c_versionValuePrefix || value[0] == 'V')) + { + value = value.Substring(1); + } + Version realVersion = new Version(value); + // The version class will represent some unset values as -1 internally (instead of 0). + version = realVersion.Major * 10000; + if (realVersion.Minor > 0) + version += realVersion.Minor * 100; + if (realVersion.Build > 0) + version += realVersion.Build; + } + // + // 3) Parse the optional "Profile" key value + // + else if (key.Equals(c_profileKey, StringComparison.OrdinalIgnoreCase)) + { + if (!String.IsNullOrEmpty(value)) + { + profile = value; + } + } + else + { + return false; + } + } + + if (!versionFound) + { + return false; + } + + return true; + } + + // This is a partial method. Platforms (such as Desktop) can provide an implementation of it that will read override value + // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls + // to it from the code + static partial void TryGetSwitchOverridePartial(string switchName, ref bool overrideFound, ref bool overrideValue); + + /// This is a partial method. This method is responsible for populating the default values based on a TFM. + /// It is partial because each library should define this method in their code to contain their defaults. + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version); + } +} diff --git a/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/LocalAppContext.cs b/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/LocalAppContext.cs new file mode 100644 index 0000000000..f05b599ed3 --- /dev/null +++ b/external/referencesource/System.IdentityModel/InternalApis/Clr/inc/LocalAppContext.cs @@ -0,0 +1,128 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== + +// NOTE: This file should not be included in mscorlib. This should only be included in FX libraries that need to provide switches +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace System +{ + internal static partial class LocalAppContext + { + private delegate bool TryGetSwitchDelegate(string switchName, out bool value); + + private static TryGetSwitchDelegate TryGetSwitchFromCentralAppContext; + private static bool s_canForwardCalls; + + private static Dictionary s_switchMap = new Dictionary(); + private static readonly object s_syncLock = new object(); + + private static bool DisableCaching { get; set; } + + static LocalAppContext() + { + // Try to setup the callback into the central AppContext + s_canForwardCalls = SetupDelegate(); + + // Populate the default values of the local app context + AppContextDefaultValues.PopulateDefaultValues(); + + // Cache the value of the switch that help with testing + DisableCaching = IsSwitchEnabled(@"TestSwitch.LocalAppContext.DisableCaching"); + } + + public static bool IsSwitchEnabled(string switchName) + { + if (s_canForwardCalls) + { + bool isEnabledCentrally; + if (TryGetSwitchFromCentralAppContext(switchName, out isEnabledCentrally)) + { + // we found the switch, so return whatever value it has + return isEnabledCentrally; + } + // if we could not get the value from the central authority, try the local storage. + } + + return IsSwitchEnabledLocal(switchName); + } + + private static bool IsSwitchEnabledLocal(string switchName) + { + // read the value from the set of local defaults + bool isEnabled, isPresent; + lock (s_switchMap) + { + isPresent = s_switchMap.TryGetValue(switchName, out isEnabled); + } + + // If the value is in the set of local switches, reutrn the value + if (isPresent) + { + return isEnabled; + } + + // if we could not find the switch name, we should return 'false' + // This will preserve the concept of switches been 'off' unless explicitly set to 'on' + return false; + } + + private static bool SetupDelegate() + { + Type appContextType = typeof(object).Assembly.GetType("System.AppContext"); + if (appContextType == null) + return false; + + MethodInfo method = appContextType.GetMethod( + "TryGetSwitch", // the method name + BindingFlags.Static | BindingFlags.Public, // binding flags + null, // use the default binder + new Type[] { typeof(string), typeof(bool).MakeByRefType() }, + null); // parameterModifiers - this is ignored by the default binder + if (method == null) + return false; + + // Create delegate if we found the method. + TryGetSwitchFromCentralAppContext = (TryGetSwitchDelegate)Delegate.CreateDelegate(typeof(TryGetSwitchDelegate), method); + + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static bool GetCachedSwitchValue(string switchName, ref int switchValue) + { + if (switchValue < 0) return false; + if (switchValue > 0) return true; + + return GetCachedSwitchValueInternal(switchName, ref switchValue); + } + + private static bool GetCachedSwitchValueInternal(string switchName, ref int switchValue) + { + if (LocalAppContext.DisableCaching) + { + return LocalAppContext.IsSwitchEnabled(switchName); + } + + bool isEnabled = LocalAppContext.IsSwitchEnabled(switchName); + switchValue = isEnabled ? 1 /*true*/ : -1 /*false*/; + return isEnabled; + } + + /// + /// This method is going to be called from the AppContextDefaultValues class when setting up the + /// default values for the switches. !!!! This method is called during the static constructor so it does not + /// take a lock !!!! If you are planning to use this outside of that, please ensure proper locking. + /// + internal static void DefineSwitchDefault(string switchName, bool initialValue) + { + s_switchMap[switchName] = initialValue; + } + } +} diff --git a/external/referencesource/System.IdentityModel/System/AppContextDefaultValues.cs b/external/referencesource/System.IdentityModel/System/AppContextDefaultValues.cs new file mode 100644 index 0000000000..e879cb1e24 --- /dev/null +++ b/external/referencesource/System.IdentityModel/System/AppContextDefaultValues.cs @@ -0,0 +1,39 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ +namespace System +{ + using System.IdentityModel; + + internal static partial class AppContextDefaultValues + { + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version) + { + // When defining a new switch you should add it to the last known version. + // For instance, if you are adding a switch in .NET 4.6 (the release after 4.5.2) you should define your switch + // like this: + // if (version <= 40502) ... + // This ensures that all previous versions of that platform (up-to 4.5.2) will get the old behavior by default + // NOTE: When adding a default value for a switch please make sure that the default value is added to ALL of the existing platforms! + // NOTE: When adding a new if statement for the version please ensure that ALL previous switches are enabled (ie. don't use else if) + switch (platformIdentifier) + { + case ".NETCore": + case ".NETFramework": + { + if (version <= 40502) + { + LocalAppContextSwitches.SetDefaultsLessOrEqual_452(); + } + + if (version <= 40600) + { + LocalAppContextSwitches.SetDefaultsLessOrEqual_46(); + } + + break; + } + } + } + } +} diff --git a/external/referencesource/System.IdentityModel/System/IdentityModel/Claims/X509CertificateClaimSet.cs b/external/referencesource/System.IdentityModel/System/IdentityModel/Claims/X509CertificateClaimSet.cs index 69d2304a9d..4113bd328c 100644 --- a/external/referencesource/System.IdentityModel/System/IdentityModel/Claims/X509CertificateClaimSet.cs +++ b/external/referencesource/System.IdentityModel/System/IdentityModel/Claims/X509CertificateClaimSet.cs @@ -172,9 +172,24 @@ namespace System.IdentityModel.Claims if (!string.IsNullOrEmpty(value)) claims.Add(Claim.CreateX500DistinguishedNameClaim(this.certificate.SubjectName)); - value = this.certificate.GetNameInfo(X509NameType.DnsName, false); - if (!string.IsNullOrEmpty(value)) - claims.Add(Claim.CreateDnsClaim(value)); + // App context switch for disabling support for multiple dns entries in a SAN certificate + if (LocalAppContextSwitches.DisableMultipleDNSEntriesInSANCertificate) + { + // old behavior, default for <= 4.6 + value = this.certificate.GetNameInfo(X509NameType.DnsName, false); + if (!string.IsNullOrEmpty(value)) + claims.Add(Claim.CreateDnsClaim(value)); + } + else + { + // new behavior as this is the default long term behavior + // Since a SAN can have multiple DNS entries + string[] entries = GetDnsFromExtensions(this.certificate); + for (int i = 0; i < entries.Length; ++i) + { + claims.Add(Claim.CreateDnsClaim(entries[i])); + } + } value = this.certificate.GetNameInfo(X509NameType.SimpleName, false); if (!string.IsNullOrEmpty(value)) @@ -243,10 +258,24 @@ namespace System.IdentityModel.Claims { if (right == null || Rights.PossessProperty.Equals(right)) { - string value = this.certificate.GetNameInfo(X509NameType.DnsName, false); - if (!string.IsNullOrEmpty(value)) + // App context switch for disabling support for multiple dns entries in a SAN certificate + if (LocalAppContextSwitches.DisableMultipleDNSEntriesInSANCertificate) { - yield return Claim.CreateDnsClaim(value); + // old behavior, default for <= 4.6 + string value = this.certificate.GetNameInfo(X509NameType.DnsName, false); + if (!string.IsNullOrEmpty(value)) + { + yield return Claim.CreateDnsClaim(value); + } + } + else + { + // new behavior since this is the default long term behavior + string[] entries = GetDnsFromExtensions(certificate); + for (int i = 0; i < entries.Length; ++i) + { + yield return Claim.CreateDnsClaim(entries[i]); + } } } } @@ -270,6 +299,33 @@ namespace System.IdentityModel.Claims } } + // Fixing Bug 795660: SAN having multiple DNS entries + private static string[] GetDnsFromExtensions(X509Certificate2 cert) + { + foreach (X509Extension ext in cert.Extensions) + { + // Extension is SAN or SAN2 + if (ext.Oid.Value == "2.5.29.7" || ext.Oid.Value == "2.5.29.17") + { + string asnString = ext.Format(true); + if (string.IsNullOrEmpty(asnString)) + { + return new string[0]; + } + + string[] rawDnsEntries = asnString.Split(new string[1] { "\n" }, StringSplitOptions.RemoveEmptyEntries); + string[] dnsEntries = new string[rawDnsEntries.Length]; + for (int i = 0; i < rawDnsEntries.Length; ++i) + { + int equalSignIndex = rawDnsEntries[i].IndexOf('='); + dnsEntries[i] = rawDnsEntries[i].Substring(equalSignIndex + 1).Trim(); + } + return dnsEntries; + } + } + return new string[0]; + } + public override IEnumerator GetEnumerator() { ThrowIfDisposed(); @@ -347,7 +403,7 @@ namespace System.IdentityModel.Claims { ThrowIfDisposed(); if (this.name == null) - { + { // // DCR 48092: PrincipalPermission authorization using certificates could cause Elevation of Privilege. // because there could be duplicate subject name. In order to be more unique, we use SubjectName + Thumbprint diff --git a/external/referencesource/System.IdentityModel/System/IdentityModel/IdentityModelStrings.cs b/external/referencesource/System.IdentityModel/System/IdentityModel/IdentityModelStrings.cs index 1f1fbd6678..42cd0993c2 100644 --- a/external/referencesource/System.IdentityModel/System/IdentityModel/IdentityModelStrings.cs +++ b/external/referencesource/System.IdentityModel/System/IdentityModel/IdentityModelStrings.cs @@ -9,4 +9,4 @@ namespace System.IdentityModel public abstract int Count { get; } public abstract string this[int index] { get; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.IdentityModel/System/IdentityModel/LocalAppContextSwitches.cs b/external/referencesource/System.IdentityModel/System/IdentityModel/LocalAppContextSwitches.cs new file mode 100644 index 0000000000..f18ab5dd58 --- /dev/null +++ b/external/referencesource/System.IdentityModel/System/IdentityModel/LocalAppContextSwitches.cs @@ -0,0 +1,52 @@ +//------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +//------------------------------------------------------------ + +namespace System.IdentityModel +{ + using System; + using System.Runtime.CompilerServices; + + // When adding a quirk, name it such that false is new behavior and true is old behavior. + // You are opting IN to old behavior. The new behavior is default. + // For example, we want to enable the functionality to explicitly add a connection close header + // in 4.6 and above. So we set DisableExplicitConnectionCloseHeader to true if running 4.5.2 or less. + internal static class LocalAppContextSwitches + { + private const string EnableCachedEmptyDefaultAuthorizationContextString = "Switch.System.IdentityModel.EnableCachedEmptyDefaultAuthorizationContext"; + private const string DisableMultipleDNSEntriesInSANCertificateString = "Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate"; + + private static int enableCachedEmptyDefaultAuthorizationContext; + private static int disableMultipleDNSEntriesInSANCertificate; + + public static bool EnableCachedEmptyDefaultAuthorizationContext + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return LocalAppContext.GetCachedSwitchValue(EnableCachedEmptyDefaultAuthorizationContextString, ref enableCachedEmptyDefaultAuthorizationContext); + } + } + + public static bool DisableMultipleDNSEntriesInSANCertificate + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return LocalAppContext.GetCachedSwitchValue(DisableMultipleDNSEntriesInSANCertificateString, ref disableMultipleDNSEntriesInSANCertificate); + } + } + + public static void SetDefaultsLessOrEqual_452() + { + // Define the switches that should be true for 4.5.2 or less, false for 4.6+. + LocalAppContext.DefineSwitchDefault(EnableCachedEmptyDefaultAuthorizationContextString, true); + } + + public static void SetDefaultsLessOrEqual_46() + { + // Define the switches that should be true for 4.6 or less, false for 4.6.1+. + LocalAppContext.DefineSwitchDefault(DisableMultipleDNSEntriesInSANCertificateString, true); + } + } +} diff --git a/external/referencesource/System.IdentityModel/System/IdentityModel/Policy/DefaultAuthorizationContext.cs b/external/referencesource/System.IdentityModel/System/IdentityModel/Policy/DefaultAuthorizationContext.cs index 119f2cee42..1226ad3469 100644 --- a/external/referencesource/System.IdentityModel/System/IdentityModel/Policy/DefaultAuthorizationContext.cs +++ b/external/referencesource/System.IdentityModel/System/IdentityModel/Policy/DefaultAuthorizationContext.cs @@ -27,19 +27,26 @@ namespace System.IdentityModel.Policy { get { - if (empty == null) - empty = new DefaultAuthorizationContext(new DefaultEvaluationContext()); - return empty; + if (LocalAppContextSwitches.EnableCachedEmptyDefaultAuthorizationContext) + { + if (empty == null) + empty = new DefaultAuthorizationContext(new DefaultEvaluationContext()); + return empty; + } + else + { + return new DefaultAuthorizationContext(new DefaultEvaluationContext()); + } } } public override string Id { - get + get { if (this.id == null) this.id = SecurityUniqueId.Create(); - return this.id.Value; + return this.id.Value; } } diff --git a/external/referencesource/System.IdentityModel/System/IdentityModel/SignedXml.cs b/external/referencesource/System.IdentityModel/System/IdentityModel/SignedXml.cs index e6e3578126..1836928288 100644 --- a/external/referencesource/System.IdentityModel/System/IdentityModel/SignedXml.cs +++ b/external/referencesource/System.IdentityModel/System/IdentityModel/SignedXml.cs @@ -155,6 +155,11 @@ namespace System.IdentityModel this.Signature.SignedInfo.EnsureDigestValidity(id, resolvedXmlSource); } + public bool EnsureDigestValidityIfIdMatches(string id, object resolvedXmlSource) + { + return this.Signature.SignedInfo.EnsureDigestValidityIfIdMatches(id, resolvedXmlSource); + } + public byte[] GetSignatureValue() { return this.Signature.GetSignatureBytes(); @@ -1226,7 +1231,7 @@ namespace System.IdentityModel { this.transformChain.ReadFrom(reader, transformFactory, dictionaryManager, ShouldPreserveComments(this.Uri)); } - + this.digestMethodElement.ReadFrom(reader, dictionaryManager); this.digestValueElement.ReadFrom(reader, dictionaryManager); diff --git a/external/referencesource/System.Net/net/PeerToPeer/Collaboration/CollaborationEnumTypes.cs b/external/referencesource/System.Net/net/PeerToPeer/Collaboration/CollaborationEnumTypes.cs index 12a3944042..5ddcc547da 100644 --- a/external/referencesource/System.Net/net/PeerToPeer/Collaboration/CollaborationEnumTypes.cs +++ b/external/referencesource/System.Net/net/PeerToPeer/Collaboration/CollaborationEnumTypes.cs @@ -70,4 +70,4 @@ namespace System.Net.PeerToPeer.Collaboration PeopleNearMeChanged = 10, RequestStatusChanged = 11 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Numerics/BaselineExcludes.lst.cs b/external/referencesource/System.Numerics/BaselineExcludes.lst.cs index 463e5b5ed7..45ca30fde5 100644 --- a/external/referencesource/System.Numerics/BaselineExcludes.lst.cs +++ b/external/referencesource/System.Numerics/BaselineExcludes.lst.cs @@ -1,7 +1,7 @@ using System.Diagnostics.CodeAnalysis; -[module: SuppressMessage("Microsoft.Naming","CA1704:IdentifiersShouldBeSpelledCorrectly", Scope="namespace", Target="System.Numerics", Justification="[....] - by design")] -[module: SuppressMessage("Microsoft.Naming","CA1704:IdentifiersShouldBeSpelledCorrectly", Scope="assembly", Target="System.Numerics", Justification="[....] - by design")] +[module: SuppressMessage("Microsoft.Naming","CA1704:IdentifiersShouldBeSpelledCorrectly", Scope="namespace", Target="System.Numerics", Justification="jfree - by design")] +[module: SuppressMessage("Microsoft.Naming","CA1704:IdentifiersShouldBeSpelledCorrectly", Scope="assembly", Target="System.Numerics", Justification="jfree - by design")] [module: SuppressMessage("Microsoft.Performance","CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "System.SR.GetObject(System.String):System.Object")] [module: SuppressMessage("Microsoft.Performance","CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "System.Numerics.BigInteger.ObjectInvariant():System.Void")] diff --git a/external/referencesource/System.Numerics/System/Numerics/Complex.cs b/external/referencesource/System.Numerics/System/Numerics/Complex.cs index c1c4e1acbd..42c854dcbf 100644 --- a/external/referencesource/System.Numerics/System/Numerics/Complex.cs +++ b/external/referencesource/System.Numerics/System/Numerics/Complex.cs @@ -300,6 +300,10 @@ namespace System.Numerics { } public static Complex Asin(Complex value) /* Arcsin */ { + if ((value.m_imaginary == 0 && value.m_real < 0) || value.m_imaginary > 0) + { + return -Asin(-value); + } return (-ImaginaryOne) * Log(ImaginaryOne * value + Sqrt(One - value * value)); } @@ -318,6 +322,10 @@ namespace System.Numerics { } public static Complex Acos(Complex value) /* Arccos */ { + if ((value.m_imaginary == 0 && value.m_real > 0) || value.m_imaginary < 0) + { + return System.Math.PI - Acos(-value); + } return (-ImaginaryOne) * Log(value + ImaginaryOne*Sqrt(One - (value * value))); } diff --git a/external/referencesource/System.Numerics/System/Numerics/HashCodeHelper.cs b/external/referencesource/System.Numerics/System/Numerics/HashCodeHelper.cs new file mode 100644 index 0000000000..5eeeeca7dc --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/HashCodeHelper.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace System.Numerics +{ + internal static class HashCodeHelper + { + /// + /// Combines two hash codes, useful for combining hash codes of individual vector elements + /// + internal static int CombineHashCodes(int h1, int h2) + { + return (((h1 << 5) + h1) ^ h2); + } + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/JITIntrinsicAttribute.cs b/external/referencesource/System.Numerics/System/Numerics/JITIntrinsicAttribute.cs new file mode 100644 index 0000000000..251789871a --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/JITIntrinsicAttribute.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace System.Numerics +{ + /// + /// An attribute that can be attached to JIT Intrinsic methods/properties + /// + [AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Property)] + internal class JitIntrinsicAttribute : Attribute + { + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Matrix3x2.cs b/external/referencesource/System.Numerics/System/Numerics/Matrix3x2.cs new file mode 100644 index 0000000000..7ee9b44602 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Matrix3x2.cs @@ -0,0 +1,809 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; + +namespace System.Numerics +{ + /// + /// A structure encapsulating a 3x2 matrix. + /// + public struct Matrix3x2 : IEquatable + { + #region Public Fields + /// + /// The first element of the first row + /// + public float M11; + /// + /// The second element of the first row + /// + public float M12; + /// + /// The first element of the second row + /// + public float M21; + /// + /// The second element of the second row + /// + public float M22; + /// + /// The first element of the third row + /// + public float M31; + /// + /// The second element of the third row + /// + public float M32; + #endregion Public Fields + + private static readonly Matrix3x2 _identity = new Matrix3x2 + ( + 1f, 0f, + 0f, 1f, + 0f, 0f + ); + + /// + /// Returns the multiplicative identity matrix. + /// + public static Matrix3x2 Identity + { + get { return _identity; } + } + + /// + /// Returns whether the matrix is the identity matrix. + /// + public bool IsIdentity + { + get + { + return M11 == 1f && M22 == 1f && // Check diagonal element first for early out. + M12 == 0f && + M21 == 0f && + M31 == 0f && M32 == 0f; + } + } + + /// + /// Gets or sets the translation component of this matrix. + /// + public Vector2 Translation + { + get + { + return new Vector2(M31, M32); + } + + set + { + M31 = value.X; + M32 = value.Y; + } + } + + /// + /// Constructs a Matrix3x2 from the given components. + /// + public Matrix3x2(float m11, float m12, + float m21, float m22, + float m31, float m32) + { + this.M11 = m11; + this.M12 = m12; + this.M21 = m21; + this.M22 = m22; + this.M31 = m31; + this.M32 = m32; + } + + /// + /// Creates a translation matrix from the given vector. + /// + /// The translation position. + /// A translation matrix. + public static Matrix3x2 CreateTranslation(Vector2 position) + { + Matrix3x2 result; + + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + + result.M31 = position.X; + result.M32 = position.Y; + + return result; + } + + /// + /// Creates a translation matrix from the given X and Y components. + /// + /// The X position. + /// The Y position. + /// A translation matrix. + public static Matrix3x2 CreateTranslation(float xPosition, float yPosition) + { + Matrix3x2 result; + + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + + result.M31 = xPosition; + result.M32 = yPosition; + + return result; + } + + /// + /// Creates a scale matrix from the given X and Y components. + /// + /// Value to scale by on the X-axis. + /// Value to scale by on the Y-axis. + /// A scaling matrix. + public static Matrix3x2 CreateScale(float xScale, float yScale) + { + Matrix3x2 result; + + result.M11 = xScale; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = yScale; + result.M31 = 0.0f; + result.M32 = 0.0f; + + return result; + } + + /// + /// Creates a scale matrix that is offset by a given center point. + /// + /// Value to scale by on the X-axis. + /// Value to scale by on the Y-axis. + /// The center point. + /// A scaling matrix. + public static Matrix3x2 CreateScale(float xScale, float yScale, Vector2 centerPoint) + { + Matrix3x2 result; + + float tx = centerPoint.X * (1 - xScale); + float ty = centerPoint.Y * (1 - yScale); + + result.M11 = xScale; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = yScale; + result.M31 = tx; + result.M32 = ty; + + return result; + } + + /// + /// Creates a scale matrix from the given vector scale. + /// + /// The scale to use. + /// A scaling matrix. + public static Matrix3x2 CreateScale(Vector2 scales) + { + Matrix3x2 result; + + result.M11 = scales.X; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = scales.Y; + result.M31 = 0.0f; + result.M32 = 0.0f; + + return result; + } + + /// + /// Creates a scale matrix from the given vector scale with an offset from the given center point. + /// + /// The scale to use. + /// The center offset. + /// A scaling matrix. + public static Matrix3x2 CreateScale(Vector2 scales, Vector2 centerPoint) + { + Matrix3x2 result; + + float tx = centerPoint.X * (1 - scales.X); + float ty = centerPoint.Y * (1 - scales.Y); + + result.M11 = scales.X; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = scales.Y; + result.M31 = tx; + result.M32 = ty; + + return result; + } + + /// + /// Creates a scale matrix that scales uniformly with the given scale. + /// + /// The uniform scale to use. + /// A scaling matrix. + public static Matrix3x2 CreateScale(float scale) + { + Matrix3x2 result; + + result.M11 = scale; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = scale; + result.M31 = 0.0f; + result.M32 = 0.0f; + + return result; + } + + /// + /// Creates a scale matrix that scales uniformly with the given scale with an offset from the given center. + /// + /// The uniform scale to use. + /// The center offset. + /// A scaling matrix. + public static Matrix3x2 CreateScale(float scale, Vector2 centerPoint) + { + Matrix3x2 result; + + float tx = centerPoint.X * (1 - scale); + float ty = centerPoint.Y * (1 - scale); + + result.M11 = scale; + result.M12 = 0.0f; + result.M21 = 0.0f; + result.M22 = scale; + result.M31 = tx; + result.M32 = ty; + + return result; + } + + /// + /// Creates a skew matrix from the given angles in radians. + /// + /// The X angle, in radians. + /// The Y angle, in radians. + /// A skew matrix. + public static Matrix3x2 CreateSkew(float radiansX, float radiansY) + { + Matrix3x2 result; + + float xTan = (float)Math.Tan(radiansX); + float yTan = (float)Math.Tan(radiansY); + + result.M11 = 1.0f; + result.M12 = yTan; + result.M21 = xTan; + result.M22 = 1.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + + return result; + } + + /// + /// Creates a skew matrix from the given angles in radians and a center point. + /// + /// The X angle, in radians. + /// The Y angle, in radians. + /// The center point. + /// A skew matrix. + public static Matrix3x2 CreateSkew(float radiansX, float radiansY, Vector2 centerPoint) + { + Matrix3x2 result; + + float xTan = (float)Math.Tan(radiansX); + float yTan = (float)Math.Tan(radiansY); + + float tx = -centerPoint.Y * xTan; + float ty = -centerPoint.X * yTan; + + result.M11 = 1.0f; + result.M12 = yTan; + result.M21 = xTan; + result.M22 = 1.0f; + result.M31 = tx; + result.M32 = ty; + + return result; + } + + /// + /// Creates a rotation matrix using the given rotation in radians. + /// + /// The amount of rotation, in radians. + /// A rotation matrix. + public static Matrix3x2 CreateRotation(float radians) + { + Matrix3x2 result; + + radians = (float)Math.IEEERemainder(radians, Math.PI * 2); + + float c, s; + + const float epsilon = 0.001f * (float)Math.PI / 180f; // 0.1% of a degree + + if (radians > -epsilon && radians < epsilon) + { + // Exact case for zero rotation. + c = 1; + s = 0; + } + else if (radians > Math.PI / 2 - epsilon && radians < Math.PI / 2 + epsilon) + { + // Exact case for 90 degree rotation. + c = 0; + s = 1; + } + else if (radians < -Math.PI + epsilon || radians > Math.PI - epsilon) + { + // Exact case for 180 degree rotation. + c = -1; + s = 0; + } + else if (radians > -Math.PI / 2 - epsilon && radians < -Math.PI / 2 + epsilon) + { + // Exact case for 270 degree rotation. + c = 0; + s = -1; + } + else + { + // Arbitrary rotation. + c = (float)Math.Cos(radians); + s = (float)Math.Sin(radians); + } + + // [ c s ] + // [ -s c ] + // [ 0 0 ] + result.M11 = c; + result.M12 = s; + result.M21 = -s; + result.M22 = c; + result.M31 = 0.0f; + result.M32 = 0.0f; + + return result; + } + + /// + /// Creates a rotation matrix using the given rotation in radians and a center point. + /// + /// The amount of rotation, in radians. + /// The center point. + /// A rotation matrix. + public static Matrix3x2 CreateRotation(float radians, Vector2 centerPoint) + { + Matrix3x2 result; + + radians = (float)Math.IEEERemainder(radians, Math.PI * 2); + + float c, s; + + const float epsilon = 0.001f * (float)Math.PI / 180f; // 0.1% of a degree + + if (radians > -epsilon && radians < epsilon) + { + // Exact case for zero rotation. + c = 1; + s = 0; + } + else if (radians > Math.PI / 2 - epsilon && radians < Math.PI / 2 + epsilon) + { + // Exact case for 90 degree rotation. + c = 0; + s = 1; + } + else if (radians < -Math.PI + epsilon || radians > Math.PI - epsilon) + { + // Exact case for 180 degree rotation. + c = -1; + s = 0; + } + else if (radians > -Math.PI / 2 - epsilon && radians < -Math.PI / 2 + epsilon) + { + // Exact case for 270 degree rotation. + c = 0; + s = -1; + } + else + { + // Arbitrary rotation. + c = (float)Math.Cos(radians); + s = (float)Math.Sin(radians); + } + + float x = centerPoint.X * (1 - c) + centerPoint.Y * s; + float y = centerPoint.Y * (1 - c) - centerPoint.X * s; + + // [ c s ] + // [ -s c ] + // [ x y ] + result.M11 = c; + result.M12 = s; + result.M21 = -s; + result.M22 = c; + result.M31 = x; + result.M32 = y; + + return result; + } + + /// + /// Calculates the determinant for this matrix. + /// The determinant is calculated by expanding the matrix with a third column whose values are (0,0,1). + /// + /// The determinant. + public float GetDeterminant() + { + // There isn't actually any such thing as a determinant for a non-square matrix, + // but this 3x2 type is really just an optimization of a 3x3 where we happen to + // know the rightmost column is always (0, 0, 1). So we expand to 3x3 format: + // + // [ M11, M12, 0 ] + // [ M21, M22, 0 ] + // [ M31, M32, 1 ] + // + // Sum the diagonal products: + // (M11 * M22 * 1) + (M12 * 0 * M31) + (0 * M21 * M32) + // + // Subtract the opposite diagonal products: + // (M31 * M22 * 0) + (M32 * 0 * M11) + (1 * M21 * M12) + // + // Collapse out the constants and oh look, this is just a 2x2 determinant! + + return (M11 * M22) - (M21 * M12); + } + + /// + /// Attempts to invert the given matrix. If the operation succeeds, the inverted matrix is stored in the result parameter. + /// + /// The source matrix. + /// The output matrix. + /// True if the operation succeeded, False otherwise. + public static bool Invert(Matrix3x2 matrix, out Matrix3x2 result) + { + float det = (matrix.M11 * matrix.M22) - (matrix.M21 * matrix.M12); + + if (Math.Abs(det) < float.Epsilon) + { + result = new Matrix3x2(float.NaN, float.NaN, float.NaN, float.NaN, float.NaN, float.NaN); + return false; + } + + float invDet = 1.0f / det; + + result.M11 = matrix.M22 * invDet; + result.M12 = -matrix.M12 * invDet; + result.M21 = -matrix.M21 * invDet; + result.M22 = matrix.M11 * invDet; + result.M31 = (matrix.M21 * matrix.M32 - matrix.M31 * matrix.M22) * invDet; + result.M32 = (matrix.M31 * matrix.M12 - matrix.M11 * matrix.M32) * invDet; + + return true; + } + + /// + /// Linearly interpolates from matrix1 to matrix2, based on the third parameter. + /// + /// The first source matrix. + /// The second source matrix. + /// The relative weighting of matrix2. + /// The interpolated matrix. + public static Matrix3x2 Lerp(Matrix3x2 matrix1, Matrix3x2 matrix2, float amount) + { + Matrix3x2 result; + + // First row + result.M11 = matrix1.M11 + (matrix2.M11 - matrix1.M11) * amount; + result.M12 = matrix1.M12 + (matrix2.M12 - matrix1.M12) * amount; + + // Second row + result.M21 = matrix1.M21 + (matrix2.M21 - matrix1.M21) * amount; + result.M22 = matrix1.M22 + (matrix2.M22 - matrix1.M22) * amount; + + // Third row + result.M31 = matrix1.M31 + (matrix2.M31 - matrix1.M31) * amount; + result.M32 = matrix1.M32 + (matrix2.M32 - matrix1.M32) * amount; + + return result; + } + + /// + /// Negates the given matrix by multiplying all values by -1. + /// + /// The source matrix. + /// The negated matrix. + public static Matrix3x2 Negate(Matrix3x2 value) + { + Matrix3x2 result; + + result.M11 = -value.M11; + result.M12 = -value.M12; + result.M21 = -value.M21; + result.M22 = -value.M22; + result.M31 = -value.M31; + result.M32 = -value.M32; + + return result; + } + + /// + /// Adds each matrix element in value1 with its corresponding element in value2. + /// + /// The first source matrix. + /// The second source matrix. + /// The matrix containing the summed values. + public static Matrix3x2 Add(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 result; + + result.M11 = value1.M11 + value2.M11; + result.M12 = value1.M12 + value2.M12; + result.M21 = value1.M21 + value2.M21; + result.M22 = value1.M22 + value2.M22; + result.M31 = value1.M31 + value2.M31; + result.M32 = value1.M32 + value2.M32; + + return result; + } + + /// + /// Subtracts each matrix element in value2 from its corresponding element in value1. + /// + /// The first source matrix. + /// The second source matrix. + /// The matrix containing the resulting values. + public static Matrix3x2 Subtract(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 result; + + result.M11 = value1.M11 - value2.M11; + result.M12 = value1.M12 - value2.M12; + result.M21 = value1.M21 - value2.M21; + result.M22 = value1.M22 - value2.M22; + result.M31 = value1.M31 - value2.M31; + result.M32 = value1.M32 - value2.M32; + + return result; + } + + /// + /// Multiplies two matrices together and returns the resulting matrix. + /// + /// The first source matrix. + /// The second source matrix. + /// The product matrix. + public static Matrix3x2 Multiply(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 result; + + // First row + result.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21; + result.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22; + + // Second row + result.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21; + result.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22; + + // Third row + result.M31 = value1.M31 * value2.M11 + value1.M32 * value2.M21 + value2.M31; + result.M32 = value1.M31 * value2.M12 + value1.M32 * value2.M22 + value2.M32; + + return result; + } + + /// + /// Scales all elements in a matrix by the given scalar factor. + /// + /// The source matrix. + /// The scaling value to use. + /// The resulting matrix. + public static Matrix3x2 Multiply(Matrix3x2 value1, float value2) + { + Matrix3x2 result; + + result.M11 = value1.M11 * value2; + result.M12 = value1.M12 * value2; + result.M21 = value1.M21 * value2; + result.M22 = value1.M22 * value2; + result.M31 = value1.M31 * value2; + result.M32 = value1.M32 * value2; + + return result; + } + + /// + /// Negates the given matrix by multiplying all values by -1. + /// + /// The source matrix. + /// The negated matrix. + public static Matrix3x2 operator -(Matrix3x2 value) + { + Matrix3x2 m; + + m.M11 = -value.M11; + m.M12 = -value.M12; + m.M21 = -value.M21; + m.M22 = -value.M22; + m.M31 = -value.M31; + m.M32 = -value.M32; + + return m; + } + + /// + /// Adds each matrix element in value1 with its corresponding element in value2. + /// + /// The first source matrix. + /// The second source matrix. + /// The matrix containing the summed values. + public static Matrix3x2 operator +(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 m; + + m.M11 = value1.M11 + value2.M11; + m.M12 = value1.M12 + value2.M12; + m.M21 = value1.M21 + value2.M21; + m.M22 = value1.M22 + value2.M22; + m.M31 = value1.M31 + value2.M31; + m.M32 = value1.M32 + value2.M32; + + return m; + } + + /// + /// Subtracts each matrix element in value2 from its corresponding element in value1. + /// + /// The first source matrix. + /// The second source matrix. + /// The matrix containing the resulting values. + public static Matrix3x2 operator -(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 m; + + m.M11 = value1.M11 - value2.M11; + m.M12 = value1.M12 - value2.M12; + m.M21 = value1.M21 - value2.M21; + m.M22 = value1.M22 - value2.M22; + m.M31 = value1.M31 - value2.M31; + m.M32 = value1.M32 - value2.M32; + + return m; + } + + /// + /// Multiplies two matrices together and returns the resulting matrix. + /// + /// The first source matrix. + /// The second source matrix. + /// The product matrix. + public static Matrix3x2 operator *(Matrix3x2 value1, Matrix3x2 value2) + { + Matrix3x2 m; + + // First row + m.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21; + m.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22; + + // Second row + m.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21; + m.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22; + + // Third row + m.M31 = value1.M31 * value2.M11 + value1.M32 * value2.M21 + value2.M31; + m.M32 = value1.M31 * value2.M12 + value1.M32 * value2.M22 + value2.M32; + + return m; + } + + /// + /// Scales all elements in a matrix by the given scalar factor. + /// + /// The source matrix. + /// The scaling value to use. + /// The resulting matrix. + public static Matrix3x2 operator *(Matrix3x2 value1, float value2) + { + Matrix3x2 m; + + m.M11 = value1.M11 * value2; + m.M12 = value1.M12 * value2; + m.M21 = value1.M21 * value2; + m.M22 = value1.M22 * value2; + m.M31 = value1.M31 * value2; + m.M32 = value1.M32 * value2; + + return m; + } + + /// + /// Returns a boolean indicating whether the given matrices are equal. + /// + /// The first source matrix. + /// The second source matrix. + /// True if the matrices are equal; False otherwise. + public static bool operator ==(Matrix3x2 value1, Matrix3x2 value2) + { + return (value1.M11 == value2.M11 && value1.M22 == value2.M22 && // Check diagonal element first for early out. + value1.M12 == value2.M12 && + value1.M21 == value2.M21 && + value1.M31 == value2.M31 && value1.M32 == value2.M32); + } + + /// + /// Returns a boolean indicating whether the given matrices are not equal. + /// + /// The first source matrix. + /// The second source matrix. + /// True if the matrices are not equal; False if they are equal. + public static bool operator !=(Matrix3x2 value1, Matrix3x2 value2) + { + return (value1.M11 != value2.M11 || value1.M12 != value2.M12 || + value1.M21 != value2.M21 || value1.M22 != value2.M22 || + value1.M31 != value2.M31 || value1.M32 != value2.M32); + } + + /// + /// Returns a boolean indicating whether the matrix is equal to the other given matrix. + /// + /// The other matrix to test equality against. + /// True if this matrix is equal to other; False otherwise. + public bool Equals(Matrix3x2 other) + { + return (M11 == other.M11 && M22 == other.M22 && // Check diagonal element first for early out. + M12 == other.M12 && + M21 == other.M21 && + M31 == other.M31 && M32 == other.M32); + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this matrix instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this matrix; False otherwise. + public override bool Equals(object obj) + { + if (obj is Matrix3x2) + { + return Equals((Matrix3x2)obj); + } + + return false; + } + + /// + /// Returns a String representing this matrix instance. + /// + /// The string representation. + public override string ToString() + { + CultureInfo ci = CultureInfo.CurrentCulture; + return String.Format(ci, "{{ {{M11:{0} M12:{1}}} {{M21:{2} M22:{3}}} {{M31:{4} M32:{5}}} }}", + M11.ToString(ci), M12.ToString(ci), + M21.ToString(ci), M22.ToString(ci), + M31.ToString(ci), M32.ToString(ci)); + } + + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + return M11.GetHashCode() + M12.GetHashCode() + + M21.GetHashCode() + M22.GetHashCode() + + M31.GetHashCode() + M32.GetHashCode(); + } + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Matrix4x4.cs b/external/referencesource/System.Numerics/System/Numerics/Matrix4x4.cs new file mode 100644 index 0000000000..473b053b98 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Matrix4x4.cs @@ -0,0 +1,2212 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; + +namespace System.Numerics +{ + /// + /// A structure encapsulating a 4x4 matrix. + /// + public struct Matrix4x4 : IEquatable + { + #region Public Fields + /// + /// Value at row 1, column 1 of the matrix. + /// + public float M11; + /// + /// Value at row 1, column 2 of the matrix. + /// + public float M12; + /// + /// Value at row 1, column 3 of the matrix. + /// + public float M13; + /// + /// Value at row 1, column 4 of the matrix. + /// + public float M14; + + /// + /// Value at row 2, column 1 of the matrix. + /// + public float M21; + /// + /// Value at row 2, column 2 of the matrix. + /// + public float M22; + /// + /// Value at row 2, column 3 of the matrix. + /// + public float M23; + /// + /// Value at row 2, column 4 of the matrix. + /// + public float M24; + + /// + /// Value at row 3, column 1 of the matrix. + /// + public float M31; + /// + /// Value at row 3, column 2 of the matrix. + /// + public float M32; + /// + /// Value at row 3, column 3 of the matrix. + /// + public float M33; + /// + /// Value at row 3, column 4 of the matrix. + /// + public float M34; + + /// + /// Value at row 4, column 1 of the matrix. + /// + public float M41; + /// + /// Value at row 4, column 2 of the matrix. + /// + public float M42; + /// + /// Value at row 4, column 3 of the matrix. + /// + public float M43; + /// + /// Value at row 4, column 4 of the matrix. + /// + public float M44; + #endregion Public Fields + + private static readonly Matrix4x4 _identity = new Matrix4x4 + ( + 1f, 0f, 0f, 0f, + 0f, 1f, 0f, 0f, + 0f, 0f, 1f, 0f, + 0f, 0f, 0f, 1f + ); + + /// + /// Returns the multiplicative identity matrix. + /// + public static Matrix4x4 Identity + { + get { return _identity; } + } + + /// + /// Returns whether the matrix is the identity matrix. + /// + public bool IsIdentity + { + get + { + return M11 == 1f && M22 == 1f && M33 == 1f && M44 == 1f && // Check diagonal element first for early out. + M12 == 0f && M13 == 0f && M14 == 0f && + M21 == 0f && M23 == 0f && M24 == 0f && + M31 == 0f && M32 == 0f && M34 == 0f && + M41 == 0f && M42 == 0f && M43 == 0f; + } + } + + /// + /// Gets or sets the translation component of this matrix. + /// + public Vector3 Translation + { + get + { + return new Vector3(M41, M42, M43); + } + set + { + M41 = value.X; + M42 = value.Y; + M43 = value.Z; + } + } + + /// + /// Constructs a Matrix4x4 from the given components. + /// + public Matrix4x4(float m11, float m12, float m13, float m14, + float m21, float m22, float m23, float m24, + float m31, float m32, float m33, float m34, + float m41, float m42, float m43, float m44) + { + this.M11 = m11; + this.M12 = m12; + this.M13 = m13; + this.M14 = m14; + + this.M21 = m21; + this.M22 = m22; + this.M23 = m23; + this.M24 = m24; + + this.M31 = m31; + this.M32 = m32; + this.M33 = m33; + this.M34 = m34; + + this.M41 = m41; + this.M42 = m42; + this.M43 = m43; + this.M44 = m44; + } + + /// + /// Constructs a Matrix4x4 from the given Matrix3x2. + /// + /// The source Matrix3x2. + public Matrix4x4(Matrix3x2 value) + { + M11 = value.M11; + M12 = value.M12; + M13 = 0f; + M14 = 0f; + M21 = value.M21; + M22 = value.M22; + M23 = 0f; + M24 = 0f; + M31 = 0f; + M32 = 0f; + M33 = 1f; + M34 = 0f; + M41 = value.M31; + M42 = value.M32; + M43 = 0f; + M44 = 1f; + } + + /// + /// Creates a spherical billboard that rotates around a specified object position. + /// + /// Position of the object the billboard will rotate around. + /// Position of the camera. + /// The up vector of the camera. + /// The forward vector of the camera. + /// The created billboard matrix + public static Matrix4x4 CreateBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 cameraUpVector, Vector3 cameraForwardVector) + { + const float epsilon = 1e-4f; + + Vector3 zaxis = new Vector3( + objectPosition.X - cameraPosition.X, + objectPosition.Y - cameraPosition.Y, + objectPosition.Z - cameraPosition.Z); + + float norm = zaxis.LengthSquared(); + + if (norm < epsilon) + { + zaxis = -cameraForwardVector; + } + else + { + zaxis = Vector3.Multiply(zaxis, 1.0f / (float)Math.Sqrt(norm)); + } + + Vector3 xaxis = Vector3.Normalize(Vector3.Cross(cameraUpVector, zaxis)); + + Vector3 yaxis = Vector3.Cross(zaxis, xaxis); + + Matrix4x4 result; + + result.M11 = xaxis.X; + result.M12 = xaxis.Y; + result.M13 = xaxis.Z; + result.M14 = 0.0f; + result.M21 = yaxis.X; + result.M22 = yaxis.Y; + result.M23 = yaxis.Z; + result.M24 = 0.0f; + result.M31 = zaxis.X; + result.M32 = zaxis.Y; + result.M33 = zaxis.Z; + result.M34 = 0.0f; + + result.M41 = objectPosition.X; + result.M42 = objectPosition.Y; + result.M43 = objectPosition.Z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a cylindrical billboard that rotates around a specified axis. + /// + /// Position of the object the billboard will rotate around. + /// Position of the camera. + /// Axis to rotate the billboard around. + /// Forward vector of the camera. + /// Forward vector of the object. + /// The created billboard matrix. + public static Matrix4x4 CreateConstrainedBillboard(Vector3 objectPosition, Vector3 cameraPosition, Vector3 rotateAxis, Vector3 cameraForwardVector, Vector3 objectForwardVector) + { + const float epsilon = 1e-4f; + const float minAngle = 1.0f - (0.1f * ((float)Math.PI / 180.0f)); // 0.1 degrees + + // Treat the case when object and camera positions are too close. + Vector3 faceDir = new Vector3( + objectPosition.X - cameraPosition.X, + objectPosition.Y - cameraPosition.Y, + objectPosition.Z - cameraPosition.Z); + + float norm = faceDir.LengthSquared(); + + if (norm < epsilon) + { + faceDir = -cameraForwardVector; + } + else + { + faceDir = Vector3.Multiply(faceDir, (1.0f / (float)Math.Sqrt(norm))); + } + + Vector3 yaxis = rotateAxis; + Vector3 xaxis; + Vector3 zaxis; + + // Treat the case when angle between faceDir and rotateAxis is too close to 0. + float dot = Vector3.Dot(rotateAxis, faceDir); + + if (Math.Abs(dot) > minAngle) + { + zaxis = objectForwardVector; + + // Make sure passed values are useful for compute. + dot = Vector3.Dot(rotateAxis, zaxis); + + if (Math.Abs(dot) > minAngle) + { + zaxis = (Math.Abs(rotateAxis.Z) > minAngle) ? new Vector3(1, 0, 0) : new Vector3(0, 0, -1); + } + + xaxis = Vector3.Normalize(Vector3.Cross(rotateAxis, zaxis)); + zaxis = Vector3.Normalize(Vector3.Cross(xaxis, rotateAxis)); + } + else + { + xaxis = Vector3.Normalize(Vector3.Cross(rotateAxis, faceDir)); + zaxis = Vector3.Normalize(Vector3.Cross(xaxis, yaxis)); + } + + Matrix4x4 result; + + result.M11 = xaxis.X; + result.M12 = xaxis.Y; + result.M13 = xaxis.Z; + result.M14 = 0.0f; + result.M21 = yaxis.X; + result.M22 = yaxis.Y; + result.M23 = yaxis.Z; + result.M24 = 0.0f; + result.M31 = zaxis.X; + result.M32 = zaxis.Y; + result.M33 = zaxis.Z; + result.M34 = 0.0f; + + result.M41 = objectPosition.X; + result.M42 = objectPosition.Y; + result.M43 = objectPosition.Z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a translation matrix. + /// + /// The amount to translate in each axis. + /// The translation matrix. + public static Matrix4x4 CreateTranslation(Vector3 position) + { + Matrix4x4 result; + + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = 1.0f; + result.M34 = 0.0f; + + result.M41 = position.X; + result.M42 = position.Y; + result.M43 = position.Z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a translation matrix. + /// + /// The amount to translate on the X-axis. + /// The amount to translate on the Y-axis. + /// The amount to translate on the Z-axis. + /// The translation matrix. + public static Matrix4x4 CreateTranslation(float xPosition, float yPosition, float zPosition) + { + Matrix4x4 result; + + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = 1.0f; + result.M34 = 0.0f; + + result.M41 = xPosition; + result.M42 = yPosition; + result.M43 = zPosition; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a scaling matrix. + /// + /// Value to scale by on the X-axis. + /// Value to scale by on the Y-axis. + /// Value to scale by on the Z-axis. + /// The scaling matrix. + public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale) + { + Matrix4x4 result; + + result.M11 = xScale; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = yScale; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = zScale; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a scaling matrix with a center point. + /// + /// Value to scale by on the X-axis. + /// Value to scale by on the Y-axis. + /// Value to scale by on the Z-axis. + /// The center point. + /// The scaling matrix. + public static Matrix4x4 CreateScale(float xScale, float yScale, float zScale, Vector3 centerPoint) + { + Matrix4x4 result; + + float tx = centerPoint.X * (1 - xScale); + float ty = centerPoint.Y * (1 - yScale); + float tz = centerPoint.Z * (1 - zScale); + + result.M11 = xScale; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = yScale; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = zScale; + result.M34 = 0.0f; + result.M41 = tx; + result.M42 = ty; + result.M43 = tz; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a scaling matrix. + /// + /// The vector containing the amount to scale by on each axis. + /// The scaling matrix. + public static Matrix4x4 CreateScale(Vector3 scales) + { + Matrix4x4 result; + + result.M11 = scales.X; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = scales.Y; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = scales.Z; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a scaling matrix with a center point. + /// + /// The vector containing the amount to scale by on each axis. + /// The center point. + /// The scaling matrix. + public static Matrix4x4 CreateScale(Vector3 scales, Vector3 centerPoint) + { + Matrix4x4 result; + + float tx = centerPoint.X * (1 - scales.X); + float ty = centerPoint.Y * (1 - scales.Y); + float tz = centerPoint.Z * (1 - scales.Z); + + result.M11 = scales.X; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = scales.Y; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = scales.Z; + result.M34 = 0.0f; + result.M41 = tx; + result.M42 = ty; + result.M43 = tz; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a uniform scaling matrix that scales equally on each axis. + /// + /// The uniform scaling factor. + /// The scaling matrix. + public static Matrix4x4 CreateScale(float scale) + { + Matrix4x4 result; + + result.M11 = scale; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = scale; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = scale; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a uniform scaling matrix that scales equally on each axis with a center point. + /// + /// The uniform scaling factor. + /// The center point. + /// The scaling matrix. + public static Matrix4x4 CreateScale(float scale, Vector3 centerPoint) + { + Matrix4x4 result; + + float tx = centerPoint.X * (1 - scale); + float ty = centerPoint.Y * (1 - scale); + float tz = centerPoint.Z * (1 - scale); + + result.M11 = scale; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = scale; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = scale; + result.M34 = 0.0f; + result.M41 = tx; + result.M42 = ty; + result.M43 = tz; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the X-axis. + /// + /// The amount, in radians, by which to rotate around the X-axis. + /// The rotation matrix. + public static Matrix4x4 CreateRotationX(float radians) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + // [ 1 0 0 0 ] + // [ 0 c s 0 ] + // [ 0 -s c 0 ] + // [ 0 0 0 1 ] + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = c; + result.M23 = s; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = -s; + result.M33 = c; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the X-axis, from a center point. + /// + /// The amount, in radians, by which to rotate around the X-axis. + /// The center point. + /// The rotation matrix. + public static Matrix4x4 CreateRotationX(float radians, Vector3 centerPoint) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + float y = centerPoint.Y * (1 - c) + centerPoint.Z * s; + float z = centerPoint.Z * (1 - c) - centerPoint.Y * s; + + // [ 1 0 0 0 ] + // [ 0 c s 0 ] + // [ 0 -s c 0 ] + // [ 0 y z 1 ] + result.M11 = 1.0f; + result.M12 = 0.0f; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = c; + result.M23 = s; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = -s; + result.M33 = c; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = y; + result.M43 = z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the Y-axis. + /// + /// The amount, in radians, by which to rotate around the Y-axis. + /// The rotation matrix. + public static Matrix4x4 CreateRotationY(float radians) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + // [ c 0 -s 0 ] + // [ 0 1 0 0 ] + // [ s 0 c 0 ] + // [ 0 0 0 1 ] + result.M11 = c; + result.M12 = 0.0f; + result.M13 = -s; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = s; + result.M32 = 0.0f; + result.M33 = c; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the Y-axis, from a center point. + /// + /// The amount, in radians, by which to rotate around the Y-axis. + /// The center point. + /// The rotation matrix. + public static Matrix4x4 CreateRotationY(float radians, Vector3 centerPoint) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + float x = centerPoint.X * (1 - c) - centerPoint.Z * s; + float z = centerPoint.Z * (1 - c) + centerPoint.X * s; + + // [ c 0 -s 0 ] + // [ 0 1 0 0 ] + // [ s 0 c 0 ] + // [ x 0 z 1 ] + result.M11 = c; + result.M12 = 0.0f; + result.M13 = -s; + result.M14 = 0.0f; + result.M21 = 0.0f; + result.M22 = 1.0f; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = s; + result.M32 = 0.0f; + result.M33 = c; + result.M34 = 0.0f; + result.M41 = x; + result.M42 = 0.0f; + result.M43 = z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the Z-axis. + /// + /// The amount, in radians, by which to rotate around the Z-axis. + /// The rotation matrix. + public static Matrix4x4 CreateRotationZ(float radians) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + // [ c s 0 0 ] + // [ -s c 0 0 ] + // [ 0 0 1 0 ] + // [ 0 0 0 1 ] + result.M11 = c; + result.M12 = s; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = -s; + result.M22 = c; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = 1.0f; + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix for rotating points around the Z-axis, from a center point. + /// + /// The amount, in radians, by which to rotate around the Z-axis. + /// The center point. + /// The rotation matrix. + public static Matrix4x4 CreateRotationZ(float radians, Vector3 centerPoint) + { + Matrix4x4 result; + + float c = (float)Math.Cos(radians); + float s = (float)Math.Sin(radians); + + float x = centerPoint.X * (1 - c) + centerPoint.Y * s; + float y = centerPoint.Y * (1 - c) - centerPoint.X * s; + + // [ c s 0 0 ] + // [ -s c 0 0 ] + // [ 0 0 1 0 ] + // [ x y 0 1 ] + result.M11 = c; + result.M12 = s; + result.M13 = 0.0f; + result.M14 = 0.0f; + result.M21 = -s; + result.M22 = c; + result.M23 = 0.0f; + result.M24 = 0.0f; + result.M31 = 0.0f; + result.M32 = 0.0f; + result.M33 = 1.0f; + result.M34 = 0.0f; + result.M41 = x; + result.M42 = y; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a matrix that rotates around an arbitrary vector. + /// + /// The axis to rotate around. + /// The angle to rotate around the given axis, in radians. + /// The rotation matrix. + public static Matrix4x4 CreateFromAxisAngle(Vector3 axis, float angle) + { + // a: angle + // x, y, z: unit vector for axis. + // + // Rotation matrix M can compute by using below equation. + // + // T T + // M = uu + (cos a)( I-uu ) + (sin a)S + // + // Where: + // + // u = ( x, y, z ) + // + // [ 0 -z y ] + // S = [ z 0 -x ] + // [ -y x 0 ] + // + // [ 1 0 0 ] + // I = [ 0 1 0 ] + // [ 0 0 1 ] + // + // + // [ xx+cosa*(1-xx) yx-cosa*yx-sina*z zx-cosa*xz+sina*y ] + // M = [ xy-cosa*yx+sina*z yy+cosa(1-yy) yz-cosa*yz-sina*x ] + // [ zx-cosa*zx-sina*y zy-cosa*zy+sina*x zz+cosa*(1-zz) ] + // + float x = axis.X, y = axis.Y, z = axis.Z; + float sa = (float)Math.Sin(angle), ca = (float)Math.Cos(angle); + float xx = x * x, yy = y * y, zz = z * z; + float xy = x * y, xz = x * z, yz = y * z; + + Matrix4x4 result; + + result.M11 = xx + ca * (1.0f - xx); + result.M12 = xy - ca * xy + sa * z; + result.M13 = xz - ca * xz - sa * y; + result.M14 = 0.0f; + result.M21 = xy - ca * xy - sa * z; + result.M22 = yy + ca * (1.0f - yy); + result.M23 = yz - ca * yz + sa * x; + result.M24 = 0.0f; + result.M31 = xz - ca * xz + sa * y; + result.M32 = yz - ca * yz - sa * x; + result.M33 = zz + ca * (1.0f - zz); + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a perspective projection matrix based on a field of view, aspect ratio, and near and far view plane distances. + /// + /// Field of view in the y direction, in radians. + /// Aspect ratio, defined as view space width divided by height. + /// Distance to the near view plane. + /// Distance to the far view plane. + /// The perspective projection matrix. + public static Matrix4x4 CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance) + { + if (fieldOfView <= 0.0f || fieldOfView >= Math.PI) + throw new ArgumentOutOfRangeException("fieldOfView"); + + if (nearPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + if (farPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("farPlaneDistance"); + + if (nearPlaneDistance >= farPlaneDistance) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + float yScale = 1.0f / (float)Math.Tan(fieldOfView * 0.5f); + float xScale = yScale / aspectRatio; + + Matrix4x4 result; + + result.M11 = xScale; + result.M12 = result.M13 = result.M14 = 0.0f; + + result.M22 = yScale; + result.M21 = result.M23 = result.M24 = 0.0f; + + result.M31 = result.M32 = 0.0f; + result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + result.M34 = -1.0f; + + result.M41 = result.M42 = result.M44 = 0.0f; + result.M43 = nearPlaneDistance * farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + + return result; + } + + /// + /// Creates a perspective projection matrix from the given view volume dimensions. + /// + /// Width of the view volume at the near view plane. + /// Height of the view volume at the near view plane. + /// Distance to the near view plane. + /// Distance to the far view plane. + /// The perspective projection matrix. + public static Matrix4x4 CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance) + { + if (nearPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + if (farPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("farPlaneDistance"); + + if (nearPlaneDistance >= farPlaneDistance) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + Matrix4x4 result; + + result.M11 = 2.0f * nearPlaneDistance / width; + result.M12 = result.M13 = result.M14 = 0.0f; + + result.M22 = 2.0f * nearPlaneDistance / height; + result.M21 = result.M23 = result.M24 = 0.0f; + + result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + result.M31 = result.M32 = 0.0f; + result.M34 = -1.0f; + + result.M41 = result.M42 = result.M44 = 0.0f; + result.M43 = nearPlaneDistance * farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + + return result; + } + + /// + /// Creates a customized, perspective projection matrix. + /// + /// Minimum x-value of the view volume at the near view plane. + /// Maximum x-value of the view volume at the near view plane. + /// Minimum y-value of the view volume at the near view plane. + /// Maximum y-value of the view volume at the near view plane. + /// Distance to the near view plane. + /// Distance to of the far view plane. + /// The perspective projection matrix. + public static Matrix4x4 CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlaneDistance, float farPlaneDistance) + { + if (nearPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + if (farPlaneDistance <= 0.0f) + throw new ArgumentOutOfRangeException("farPlaneDistance"); + + if (nearPlaneDistance >= farPlaneDistance) + throw new ArgumentOutOfRangeException("nearPlaneDistance"); + + Matrix4x4 result; + + result.M11 = 2.0f * nearPlaneDistance / (right - left); + result.M12 = result.M13 = result.M14 = 0.0f; + + result.M22 = 2.0f * nearPlaneDistance / (top - bottom); + result.M21 = result.M23 = result.M24 = 0.0f; + + result.M31 = (left + right) / (right - left); + result.M32 = (top + bottom) / (top - bottom); + result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + result.M34 = -1.0f; + + result.M43 = nearPlaneDistance * farPlaneDistance / (nearPlaneDistance - farPlaneDistance); + result.M41 = result.M42 = result.M44 = 0.0f; + + return result; + } + + /// + /// Creates an orthographic perspective matrix from the given view volume dimensions. + /// + /// Width of the view volume. + /// Height of the view volume. + /// Minimum Z-value of the view volume. + /// Maximum Z-value of the view volume. + /// The orthographic projection matrix. + public static Matrix4x4 CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane) + { + Matrix4x4 result; + + result.M11 = 2.0f / width; + result.M12 = result.M13 = result.M14 = 0.0f; + + result.M22 = 2.0f / height; + result.M21 = result.M23 = result.M24 = 0.0f; + + result.M33 = 1.0f / (zNearPlane - zFarPlane); + result.M31 = result.M32 = result.M34 = 0.0f; + + result.M41 = result.M42 = 0.0f; + result.M43 = zNearPlane / (zNearPlane - zFarPlane); + result.M44 = 1.0f; + + return result; + } + + /// + /// Builds a customized, orthographic projection matrix. + /// + /// Minimum X-value of the view volume. + /// Maximum X-value of the view volume. + /// Minimum Y-value of the view volume. + /// Maximum Y-value of the view volume. + /// Minimum Z-value of the view volume. + /// Maximum Z-value of the view volume. + /// The orthographic projection matrix. + public static Matrix4x4 CreateOrthographicOffCenter(float left, float right, float bottom, float top, float zNearPlane, float zFarPlane) + { + Matrix4x4 result; + + result.M11 = 2.0f / (right - left); + result.M12 = result.M13 = result.M14 = 0.0f; + + result.M22 = 2.0f / (top - bottom); + result.M21 = result.M23 = result.M24 = 0.0f; + + result.M33 = 1.0f / (zNearPlane - zFarPlane); + result.M31 = result.M32 = result.M34 = 0.0f; + + result.M41 = (left + right) / (left - right); + result.M42 = (top + bottom) / (bottom - top); + result.M43 = zNearPlane / (zNearPlane - zFarPlane); + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a view matrix. + /// + /// The position of the camera. + /// The target towards which the camera is pointing. + /// The direction that is "up" from the camera's point of view. + /// The view matrix. + public static Matrix4x4 CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector) + { + Vector3 zaxis = Vector3.Normalize(cameraPosition - cameraTarget); + Vector3 xaxis = Vector3.Normalize(Vector3.Cross(cameraUpVector, zaxis)); + Vector3 yaxis = Vector3.Cross(zaxis, xaxis); + + Matrix4x4 result; + + result.M11 = xaxis.X; + result.M12 = yaxis.X; + result.M13 = zaxis.X; + result.M14 = 0.0f; + result.M21 = xaxis.Y; + result.M22 = yaxis.Y; + result.M23 = zaxis.Y; + result.M24 = 0.0f; + result.M31 = xaxis.Z; + result.M32 = yaxis.Z; + result.M33 = zaxis.Z; + result.M34 = 0.0f; + result.M41 = -Vector3.Dot(xaxis, cameraPosition); + result.M42 = -Vector3.Dot(yaxis, cameraPosition); + result.M43 = -Vector3.Dot(zaxis, cameraPosition); + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a world matrix with the specified parameters. + /// + /// The position of the object; used in translation operations. + /// Forward direction of the object. + /// Upward direction of the object; usually [0, 1, 0]. + /// The world matrix. + public static Matrix4x4 CreateWorld(Vector3 position, Vector3 forward, Vector3 up) + { + Vector3 zaxis = Vector3.Normalize(-forward); + Vector3 xaxis = Vector3.Normalize(Vector3.Cross(up, zaxis)); + Vector3 yaxis = Vector3.Cross(zaxis, xaxis); + + Matrix4x4 result; + + result.M11 = xaxis.X; + result.M12 = xaxis.Y; + result.M13 = xaxis.Z; + result.M14 = 0.0f; + result.M21 = yaxis.X; + result.M22 = yaxis.Y; + result.M23 = yaxis.Z; + result.M24 = 0.0f; + result.M31 = zaxis.X; + result.M32 = zaxis.Y; + result.M33 = zaxis.Z; + result.M34 = 0.0f; + result.M41 = position.X; + result.M42 = position.Y; + result.M43 = position.Z; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a rotation matrix from the given Quaternion rotation value. + /// + /// The source Quaternion. + /// The rotation matrix. + public static Matrix4x4 CreateFromQuaternion(Quaternion quaternion) + { + Matrix4x4 result; + + float xx = quaternion.X * quaternion.X; + float yy = quaternion.Y * quaternion.Y; + float zz = quaternion.Z * quaternion.Z; + + float xy = quaternion.X * quaternion.Y; + float wz = quaternion.Z * quaternion.W; + float xz = quaternion.Z * quaternion.X; + float wy = quaternion.Y * quaternion.W; + float yz = quaternion.Y * quaternion.Z; + float wx = quaternion.X * quaternion.W; + + result.M11 = 1.0f - 2.0f * (yy + zz); + result.M12 = 2.0f * (xy + wz); + result.M13 = 2.0f * (xz - wy); + result.M14 = 0.0f; + result.M21 = 2.0f * (xy - wz); + result.M22 = 1.0f - 2.0f * (zz + xx); + result.M23 = 2.0f * (yz + wx); + result.M24 = 0.0f; + result.M31 = 2.0f * (xz + wy); + result.M32 = 2.0f * (yz - wx); + result.M33 = 1.0f - 2.0f * (yy + xx); + result.M34 = 0.0f; + result.M41 = 0.0f; + result.M42 = 0.0f; + result.M43 = 0.0f; + result.M44 = 1.0f; + + return result; + } + + /// + /// Creates a rotation matrix from the specified yaw, pitch, and roll. + /// + /// Angle of rotation, in radians, around the Y-axis. + /// Angle of rotation, in radians, around the X-axis. + /// Angle of rotation, in radians, around the Z-axis. + /// The rotation matrix. + public static Matrix4x4 CreateFromYawPitchRoll(float yaw, float pitch, float roll) + { + Quaternion q = Quaternion.CreateFromYawPitchRoll(yaw, pitch, roll); + + return Matrix4x4.CreateFromQuaternion(q); + } + + /// + /// Creates a Matrix that flattens geometry into a specified Plane as if casting a shadow from a specified light source. + /// + /// The direction from which the light that will cast the shadow is coming. + /// The Plane onto which the new matrix should flatten geometry so as to cast a shadow. + /// A new Matrix that can be used to flatten geometry onto the specified plane from the specified direction. + public static Matrix4x4 CreateShadow(Vector3 lightDirection, Plane plane) + { + Plane p = Plane.Normalize(plane); + + float dot = p.Normal.X * lightDirection.X + p.Normal.Y * lightDirection.Y + p.Normal.Z * lightDirection.Z; + float a = -p.Normal.X; + float b = -p.Normal.Y; + float c = -p.Normal.Z; + float d = -p.D; + + Matrix4x4 result; + + result.M11 = a * lightDirection.X + dot; + result.M21 = b * lightDirection.X; + result.M31 = c * lightDirection.X; + result.M41 = d * lightDirection.X; + + result.M12 = a * lightDirection.Y; + result.M22 = b * lightDirection.Y + dot; + result.M32 = c * lightDirection.Y; + result.M42 = d * lightDirection.Y; + + result.M13 = a * lightDirection.Z; + result.M23 = b * lightDirection.Z; + result.M33 = c * lightDirection.Z + dot; + result.M43 = d * lightDirection.Z; + + result.M14 = 0.0f; + result.M24 = 0.0f; + result.M34 = 0.0f; + result.M44 = dot; + + return result; + } + + /// + /// Creates a Matrix that reflects the coordinate system about a specified Plane. + /// + /// The Plane about which to create a reflection. + /// A new matrix expressing the reflection. + public static Matrix4x4 CreateReflection(Plane value) + { + value = Plane.Normalize(value); + + float a = value.Normal.X; + float b = value.Normal.Y; + float c = value.Normal.Z; + + float fa = -2.0f * a; + float fb = -2.0f * b; + float fc = -2.0f * c; + + Matrix4x4 result; + + result.M11 = fa * a + 1.0f; + result.M12 = fb * a; + result.M13 = fc * a; + result.M14 = 0.0f; + + result.M21 = fa * b; + result.M22 = fb * b + 1.0f; + result.M23 = fc * b; + result.M24 = 0.0f; + + result.M31 = fa * c; + result.M32 = fb * c; + result.M33 = fc * c + 1.0f; + result.M34 = 0.0f; + + result.M41 = fa * value.D; + result.M42 = fb * value.D; + result.M43 = fc * value.D; + result.M44 = 1.0f; + + return result; + } + + /// + /// Calculates the determinant of the matrix. + /// + /// The determinant of the matrix. + public float GetDeterminant() + { + // | a b c d | | f g h | | e g h | | e f h | | e f g | + // | e f g h | = a | j k l | - b | i k l | + c | i j l | - d | i j k | + // | i j k l | | n o p | | m o p | | m n p | | m n o | + // | m n o p | + // + // | f g h | + // a | j k l | = a ( f ( kp - lo ) - g ( jp - ln ) + h ( jo - kn ) ) + // | n o p | + // + // | e g h | + // b | i k l | = b ( e ( kp - lo ) - g ( ip - lm ) + h ( io - km ) ) + // | m o p | + // + // | e f h | + // c | i j l | = c ( e ( jp - ln ) - f ( ip - lm ) + h ( in - jm ) ) + // | m n p | + // + // | e f g | + // d | i j k | = d ( e ( jo - kn ) - f ( io - km ) + g ( in - jm ) ) + // | m n o | + // + // Cost of operation + // 17 adds and 28 muls. + // + // add: 6 + 8 + 3 = 17 + // mul: 12 + 16 = 28 + + float a = M11, b = M12, c = M13, d = M14; + float e = M21, f = M22, g = M23, h = M24; + float i = M31, j = M32, k = M33, l = M34; + float m = M41, n = M42, o = M43, p = M44; + + float kp_lo = k * p - l * o; + float jp_ln = j * p - l * n; + float jo_kn = j * o - k * n; + float ip_lm = i * p - l * m; + float io_km = i * o - k * m; + float in_jm = i * n - j * m; + + return a * (f * kp_lo - g * jp_ln + h * jo_kn) - + b * (e * kp_lo - g * ip_lm + h * io_km) + + c * (e * jp_ln - f * ip_lm + h * in_jm) - + d * (e * jo_kn - f * io_km + g * in_jm); + } + + /// + /// Attempts to calculate the inverse of the given matrix. If successful, result will contain the inverted matrix. + /// + /// The source matrix to invert. + /// If successful, contains the inverted matrix. + /// True if the source matrix could be inverted; False otherwise. + public static bool Invert(Matrix4x4 matrix, out Matrix4x4 result) + { + // -1 + // If you have matrix M, inverse Matrix M can compute + // + // -1 1 + // M = --------- A + // det(M) + // + // A is adjugate (adjoint) of M, where, + // + // T + // A = C + // + // C is Cofactor matrix of M, where, + // i + j + // C = (-1) * det(M ) + // ij ij + // + // [ a b c d ] + // M = [ e f g h ] + // [ i j k l ] + // [ m n o p ] + // + // First Row + // 2 | f g h | + // C = (-1) | j k l | = + ( f ( kp - lo ) - g ( jp - ln ) + h ( jo - kn ) ) + // 11 | n o p | + // + // 3 | e g h | + // C = (-1) | i k l | = - ( e ( kp - lo ) - g ( ip - lm ) + h ( io - km ) ) + // 12 | m o p | + // + // 4 | e f h | + // C = (-1) | i j l | = + ( e ( jp - ln ) - f ( ip - lm ) + h ( in - jm ) ) + // 13 | m n p | + // + // 5 | e f g | + // C = (-1) | i j k | = - ( e ( jo - kn ) - f ( io - km ) + g ( in - jm ) ) + // 14 | m n o | + // + // Second Row + // 3 | b c d | + // C = (-1) | j k l | = - ( b ( kp - lo ) - c ( jp - ln ) + d ( jo - kn ) ) + // 21 | n o p | + // + // 4 | a c d | + // C = (-1) | i k l | = + ( a ( kp - lo ) - c ( ip - lm ) + d ( io - km ) ) + // 22 | m o p | + // + // 5 | a b d | + // C = (-1) | i j l | = - ( a ( jp - ln ) - b ( ip - lm ) + d ( in - jm ) ) + // 23 | m n p | + // + // 6 | a b c | + // C = (-1) | i j k | = + ( a ( jo - kn ) - b ( io - km ) + c ( in - jm ) ) + // 24 | m n o | + // + // Third Row + // 4 | b c d | + // C = (-1) | f g h | = + ( b ( gp - ho ) - c ( fp - hn ) + d ( fo - gn ) ) + // 31 | n o p | + // + // 5 | a c d | + // C = (-1) | e g h | = - ( a ( gp - ho ) - c ( ep - hm ) + d ( eo - gm ) ) + // 32 | m o p | + // + // 6 | a b d | + // C = (-1) | e f h | = + ( a ( fp - hn ) - b ( ep - hm ) + d ( en - fm ) ) + // 33 | m n p | + // + // 7 | a b c | + // C = (-1) | e f g | = - ( a ( fo - gn ) - b ( eo - gm ) + c ( en - fm ) ) + // 34 | m n o | + // + // Fourth Row + // 5 | b c d | + // C = (-1) | f g h | = - ( b ( gl - hk ) - c ( fl - hj ) + d ( fk - gj ) ) + // 41 | j k l | + // + // 6 | a c d | + // C = (-1) | e g h | = + ( a ( gl - hk ) - c ( el - hi ) + d ( ek - gi ) ) + // 42 | i k l | + // + // 7 | a b d | + // C = (-1) | e f h | = - ( a ( fl - hj ) - b ( el - hi ) + d ( ej - fi ) ) + // 43 | i j l | + // + // 8 | a b c | + // C = (-1) | e f g | = + ( a ( fk - gj ) - b ( ek - gi ) + c ( ej - fi ) ) + // 44 | i j k | + // + // Cost of operation + // 53 adds, 104 muls, and 1 div. + float a = matrix.M11, b = matrix.M12, c = matrix.M13, d = matrix.M14; + float e = matrix.M21, f = matrix.M22, g = matrix.M23, h = matrix.M24; + float i = matrix.M31, j = matrix.M32, k = matrix.M33, l = matrix.M34; + float m = matrix.M41, n = matrix.M42, o = matrix.M43, p = matrix.M44; + + float kp_lo = k * p - l * o; + float jp_ln = j * p - l * n; + float jo_kn = j * o - k * n; + float ip_lm = i * p - l * m; + float io_km = i * o - k * m; + float in_jm = i * n - j * m; + + float a11 = +(f * kp_lo - g * jp_ln + h * jo_kn); + float a12 = -(e * kp_lo - g * ip_lm + h * io_km); + float a13 = +(e * jp_ln - f * ip_lm + h * in_jm); + float a14 = -(e * jo_kn - f * io_km + g * in_jm); + + float det = a * a11 + b * a12 + c * a13 + d * a14; + + if (Math.Abs(det) < float.Epsilon) + { + result = new Matrix4x4(float.NaN, float.NaN, float.NaN, float.NaN, + float.NaN, float.NaN, float.NaN, float.NaN, + float.NaN, float.NaN, float.NaN, float.NaN, + float.NaN, float.NaN, float.NaN, float.NaN); + return false; + } + + float invDet = 1.0f / det; + + result.M11 = a11 * invDet; + result.M21 = a12 * invDet; + result.M31 = a13 * invDet; + result.M41 = a14 * invDet; + + result.M12 = -(b * kp_lo - c * jp_ln + d * jo_kn) * invDet; + result.M22 = +(a * kp_lo - c * ip_lm + d * io_km) * invDet; + result.M32 = -(a * jp_ln - b * ip_lm + d * in_jm) * invDet; + result.M42 = +(a * jo_kn - b * io_km + c * in_jm) * invDet; + + float gp_ho = g * p - h * o; + float fp_hn = f * p - h * n; + float fo_gn = f * o - g * n; + float ep_hm = e * p - h * m; + float eo_gm = e * o - g * m; + float en_fm = e * n - f * m; + + result.M13 = +(b * gp_ho - c * fp_hn + d * fo_gn) * invDet; + result.M23 = -(a * gp_ho - c * ep_hm + d * eo_gm) * invDet; + result.M33 = +(a * fp_hn - b * ep_hm + d * en_fm) * invDet; + result.M43 = -(a * fo_gn - b * eo_gm + c * en_fm) * invDet; + + float gl_hk = g * l - h * k; + float fl_hj = f * l - h * j; + float fk_gj = f * k - g * j; + float el_hi = e * l - h * i; + float ek_gi = e * k - g * i; + float ej_fi = e * j - f * i; + + result.M14 = -(b * gl_hk - c * fl_hj + d * fk_gj) * invDet; + result.M24 = +(a * gl_hk - c * el_hi + d * ek_gi) * invDet; + result.M34 = -(a * fl_hj - b * el_hi + d * ej_fi) * invDet; + result.M44 = +(a * fk_gj - b * ek_gi + c * ej_fi) * invDet; + + return true; + } + + struct CanonicalBasis + { + public Vector3 Row0; + public Vector3 Row1; + public Vector3 Row2; + }; + + [System.Security.SecuritySafeCritical] + struct VectorBasis + { + public unsafe Vector3* Element0; + public unsafe Vector3* Element1; + public unsafe Vector3* Element2; + } + + /// + /// Attempts to extract the scale, translation, and rotation components from the given scale/rotation/translation matrix. + /// If successful, the out parameters will contained the extracted values. + /// + /// The source matrix. + /// The scaling component of the transformation matrix. + /// The rotation component of the transformation matrix. + /// The translation component of the transformation matrix + /// True if the source matrix was successfully decomposed; False otherwise. + [System.Security.SecuritySafeCritical] + public static bool Decompose(Matrix4x4 matrix, out Vector3 scale, out Quaternion rotation, out Vector3 translation) + { + bool result = true; + + unsafe + { + fixed (Vector3* scaleBase = &scale) + { + float* pfScales = (float*)scaleBase; + const float EPSILON = 0.0001f; + float det; + + VectorBasis vectorBasis; + Vector3** pVectorBasis = (Vector3**)&vectorBasis; + + Matrix4x4 matTemp = Matrix4x4.Identity; + CanonicalBasis canonicalBasis = new CanonicalBasis(); + Vector3* pCanonicalBasis = &canonicalBasis.Row0; + + canonicalBasis.Row0 = new Vector3(1.0f, 0.0f, 0.0f); + canonicalBasis.Row1 = new Vector3(0.0f, 1.0f, 0.0f); + canonicalBasis.Row2 = new Vector3(0.0f, 0.0f, 1.0f); + + translation = new Vector3( + matrix.M41, + matrix.M42, + matrix.M43); + + pVectorBasis[0] = (Vector3*)&matTemp.M11; + pVectorBasis[1] = (Vector3*)&matTemp.M21; + pVectorBasis[2] = (Vector3*)&matTemp.M31; + + *(pVectorBasis[0]) = new Vector3(matrix.M11, matrix.M12, matrix.M13); + *(pVectorBasis[1]) = new Vector3(matrix.M21, matrix.M22, matrix.M23); + *(pVectorBasis[2]) = new Vector3(matrix.M31, matrix.M32, matrix.M33); + + scale.X = pVectorBasis[0]->Length(); + scale.Y = pVectorBasis[1]->Length(); + scale.Z = pVectorBasis[2]->Length(); + + uint a, b, c; + #region Ranking + float x = pfScales[0], y = pfScales[1], z = pfScales[2]; + if (x < y) + { + if (y < z) + { + a = 2; + b = 1; + c = 0; + } + else + { + a = 1; + + if (x < z) + { + b = 2; + c = 0; + } + else + { + b = 0; + c = 2; + } + } + } + else + { + if (x < z) + { + a = 2; + b = 0; + c = 1; + } + else + { + a = 0; + + if (y < z) + { + b = 2; + c = 1; + } + else + { + b = 1; + c = 2; + } + } + } + #endregion + + if (pfScales[a] < EPSILON) + { + *(pVectorBasis[a]) = pCanonicalBasis[a]; + } + + *pVectorBasis[a] = Vector3.Normalize(*pVectorBasis[a]); + + if (pfScales[b] < EPSILON) + { + uint cc; + float fAbsX, fAbsY, fAbsZ; + + fAbsX = (float)Math.Abs(pVectorBasis[a]->X); + fAbsY = (float)Math.Abs(pVectorBasis[a]->Y); + fAbsZ = (float)Math.Abs(pVectorBasis[a]->Z); + + #region Ranking + if (fAbsX < fAbsY) + { + if (fAbsY < fAbsZ) + { + cc = 0; + } + else + { + if (fAbsX < fAbsZ) + { + cc = 0; + } + else + { + cc = 2; + } + } + } + else + { + if (fAbsX < fAbsZ) + { + cc = 1; + } + else + { + if (fAbsY < fAbsZ) + { + cc = 1; + } + else + { + cc = 2; + } + } + } + #endregion + + *pVectorBasis[b] = Vector3.Cross(*pVectorBasis[a], *(pCanonicalBasis + cc)); + } + + *pVectorBasis[b] = Vector3.Normalize(*pVectorBasis[b]); + + if (pfScales[c] < EPSILON) + { + *pVectorBasis[c] = Vector3.Cross(*pVectorBasis[a], *pVectorBasis[b]); + } + + *pVectorBasis[c] = Vector3.Normalize(*pVectorBasis[c]); + + det = matTemp.GetDeterminant(); + + // use Kramer's rule to check for handedness of coordinate system + if (det < 0.0f) + { + // switch coordinate system by negating the scale and inverting the basis vector on the x-axis + pfScales[a] = -pfScales[a]; + *pVectorBasis[a] = -(*pVectorBasis[a]); + + det = -det; + } + + det -= 1.0f; + det *= det; + + if ((EPSILON < det)) + { + // Non-SRT matrix encountered + rotation = Quaternion.Identity; + result = false; + } + else + { + // generate the quaternion from the matrix + rotation = Quaternion.CreateFromRotationMatrix(matTemp); + } + } + } + + return result; + } + + /// + /// Transforms the given matrix by applying the given Quaternion rotation. + /// + /// The source matrix to transform. + /// The rotation to apply. + /// The transformed matrix. + public static Matrix4x4 Transform(Matrix4x4 value, Quaternion rotation) + { + // Compute rotation matrix. + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + float q11 = 1.0f - yy2 - zz2; + float q21 = xy2 - wz2; + float q31 = xz2 + wy2; + + float q12 = xy2 + wz2; + float q22 = 1.0f - xx2 - zz2; + float q32 = yz2 - wx2; + + float q13 = xz2 - wy2; + float q23 = yz2 + wx2; + float q33 = 1.0f - xx2 - yy2; + + Matrix4x4 result; + + // First row + result.M11 = value.M11 * q11 + value.M12 * q21 + value.M13 * q31; + result.M12 = value.M11 * q12 + value.M12 * q22 + value.M13 * q32; + result.M13 = value.M11 * q13 + value.M12 * q23 + value.M13 * q33; + result.M14 = value.M14; + + // Second row + result.M21 = value.M21 * q11 + value.M22 * q21 + value.M23 * q31; + result.M22 = value.M21 * q12 + value.M22 * q22 + value.M23 * q32; + result.M23 = value.M21 * q13 + value.M22 * q23 + value.M23 * q33; + result.M24 = value.M24; + + // Third row + result.M31 = value.M31 * q11 + value.M32 * q21 + value.M33 * q31; + result.M32 = value.M31 * q12 + value.M32 * q22 + value.M33 * q32; + result.M33 = value.M31 * q13 + value.M32 * q23 + value.M33 * q33; + result.M34 = value.M34; + + // Fourth row + result.M41 = value.M41 * q11 + value.M42 * q21 + value.M43 * q31; + result.M42 = value.M41 * q12 + value.M42 * q22 + value.M43 * q32; + result.M43 = value.M41 * q13 + value.M42 * q23 + value.M43 * q33; + result.M44 = value.M44; + + return result; + } + + /// + /// Transposes the rows and columns of a matrix. + /// + /// The source matrix. + /// The transposed matrix. + public static Matrix4x4 Transpose(Matrix4x4 matrix) + { + Matrix4x4 result; + + result.M11 = matrix.M11; + result.M12 = matrix.M21; + result.M13 = matrix.M31; + result.M14 = matrix.M41; + result.M21 = matrix.M12; + result.M22 = matrix.M22; + result.M23 = matrix.M32; + result.M24 = matrix.M42; + result.M31 = matrix.M13; + result.M32 = matrix.M23; + result.M33 = matrix.M33; + result.M34 = matrix.M43; + result.M41 = matrix.M14; + result.M42 = matrix.M24; + result.M43 = matrix.M34; + result.M44 = matrix.M44; + + return result; + } + + /// + /// Linearly interpolates between the corresponding values of two matrices. + /// + /// The first source matrix. + /// The second source matrix. + /// The relative weight of the second source matrix. + /// The interpolated matrix. + public static Matrix4x4 Lerp(Matrix4x4 matrix1, Matrix4x4 matrix2, float amount) + { + Matrix4x4 result; + + // First row + result.M11 = matrix1.M11 + (matrix2.M11 - matrix1.M11) * amount; + result.M12 = matrix1.M12 + (matrix2.M12 - matrix1.M12) * amount; + result.M13 = matrix1.M13 + (matrix2.M13 - matrix1.M13) * amount; + result.M14 = matrix1.M14 + (matrix2.M14 - matrix1.M14) * amount; + + // Second row + result.M21 = matrix1.M21 + (matrix2.M21 - matrix1.M21) * amount; + result.M22 = matrix1.M22 + (matrix2.M22 - matrix1.M22) * amount; + result.M23 = matrix1.M23 + (matrix2.M23 - matrix1.M23) * amount; + result.M24 = matrix1.M24 + (matrix2.M24 - matrix1.M24) * amount; + + // Third row + result.M31 = matrix1.M31 + (matrix2.M31 - matrix1.M31) * amount; + result.M32 = matrix1.M32 + (matrix2.M32 - matrix1.M32) * amount; + result.M33 = matrix1.M33 + (matrix2.M33 - matrix1.M33) * amount; + result.M34 = matrix1.M34 + (matrix2.M34 - matrix1.M34) * amount; + + // Fourth row + result.M41 = matrix1.M41 + (matrix2.M41 - matrix1.M41) * amount; + result.M42 = matrix1.M42 + (matrix2.M42 - matrix1.M42) * amount; + result.M43 = matrix1.M43 + (matrix2.M43 - matrix1.M43) * amount; + result.M44 = matrix1.M44 + (matrix2.M44 - matrix1.M44) * amount; + + return result; + } + + /// + /// Returns a new matrix with the negated elements of the given matrix. + /// + /// The source matrix. + /// The negated matrix. + public static Matrix4x4 Negate(Matrix4x4 value) + { + Matrix4x4 result; + + result.M11 = -value.M11; + result.M12 = -value.M12; + result.M13 = -value.M13; + result.M14 = -value.M14; + result.M21 = -value.M21; + result.M22 = -value.M22; + result.M23 = -value.M23; + result.M24 = -value.M24; + result.M31 = -value.M31; + result.M32 = -value.M32; + result.M33 = -value.M33; + result.M34 = -value.M34; + result.M41 = -value.M41; + result.M42 = -value.M42; + result.M43 = -value.M43; + result.M44 = -value.M44; + + return result; + } + + /// + /// Adds two matrices together. + /// + /// The first source matrix. + /// The second source matrix. + /// The resulting matrix. + public static Matrix4x4 Add(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 result; + + result.M11 = value1.M11 + value2.M11; + result.M12 = value1.M12 + value2.M12; + result.M13 = value1.M13 + value2.M13; + result.M14 = value1.M14 + value2.M14; + result.M21 = value1.M21 + value2.M21; + result.M22 = value1.M22 + value2.M22; + result.M23 = value1.M23 + value2.M23; + result.M24 = value1.M24 + value2.M24; + result.M31 = value1.M31 + value2.M31; + result.M32 = value1.M32 + value2.M32; + result.M33 = value1.M33 + value2.M33; + result.M34 = value1.M34 + value2.M34; + result.M41 = value1.M41 + value2.M41; + result.M42 = value1.M42 + value2.M42; + result.M43 = value1.M43 + value2.M43; + result.M44 = value1.M44 + value2.M44; + + return result; + } + + /// + /// Subtracts the second matrix from the first. + /// + /// The first source matrix. + /// The second source matrix. + /// The result of the subtraction. + public static Matrix4x4 Subtract(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 result; + + result.M11 = value1.M11 - value2.M11; + result.M12 = value1.M12 - value2.M12; + result.M13 = value1.M13 - value2.M13; + result.M14 = value1.M14 - value2.M14; + result.M21 = value1.M21 - value2.M21; + result.M22 = value1.M22 - value2.M22; + result.M23 = value1.M23 - value2.M23; + result.M24 = value1.M24 - value2.M24; + result.M31 = value1.M31 - value2.M31; + result.M32 = value1.M32 - value2.M32; + result.M33 = value1.M33 - value2.M33; + result.M34 = value1.M34 - value2.M34; + result.M41 = value1.M41 - value2.M41; + result.M42 = value1.M42 - value2.M42; + result.M43 = value1.M43 - value2.M43; + result.M44 = value1.M44 - value2.M44; + + return result; + } + + /// + /// Multiplies a matrix by another matrix. + /// + /// The first source matrix. + /// The second source matrix. + /// The result of the multiplication. + public static Matrix4x4 Multiply(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 result; + + // First row + result.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21 + value1.M13 * value2.M31 + value1.M14 * value2.M41; + result.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22 + value1.M13 * value2.M32 + value1.M14 * value2.M42; + result.M13 = value1.M11 * value2.M13 + value1.M12 * value2.M23 + value1.M13 * value2.M33 + value1.M14 * value2.M43; + result.M14 = value1.M11 * value2.M14 + value1.M12 * value2.M24 + value1.M13 * value2.M34 + value1.M14 * value2.M44; + + // Second row + result.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21 + value1.M23 * value2.M31 + value1.M24 * value2.M41; + result.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22 + value1.M23 * value2.M32 + value1.M24 * value2.M42; + result.M23 = value1.M21 * value2.M13 + value1.M22 * value2.M23 + value1.M23 * value2.M33 + value1.M24 * value2.M43; + result.M24 = value1.M21 * value2.M14 + value1.M22 * value2.M24 + value1.M23 * value2.M34 + value1.M24 * value2.M44; + + // Third row + result.M31 = value1.M31 * value2.M11 + value1.M32 * value2.M21 + value1.M33 * value2.M31 + value1.M34 * value2.M41; + result.M32 = value1.M31 * value2.M12 + value1.M32 * value2.M22 + value1.M33 * value2.M32 + value1.M34 * value2.M42; + result.M33 = value1.M31 * value2.M13 + value1.M32 * value2.M23 + value1.M33 * value2.M33 + value1.M34 * value2.M43; + result.M34 = value1.M31 * value2.M14 + value1.M32 * value2.M24 + value1.M33 * value2.M34 + value1.M34 * value2.M44; + + // Fourth row + result.M41 = value1.M41 * value2.M11 + value1.M42 * value2.M21 + value1.M43 * value2.M31 + value1.M44 * value2.M41; + result.M42 = value1.M41 * value2.M12 + value1.M42 * value2.M22 + value1.M43 * value2.M32 + value1.M44 * value2.M42; + result.M43 = value1.M41 * value2.M13 + value1.M42 * value2.M23 + value1.M43 * value2.M33 + value1.M44 * value2.M43; + result.M44 = value1.M41 * value2.M14 + value1.M42 * value2.M24 + value1.M43 * value2.M34 + value1.M44 * value2.M44; + + return result; + } + + /// + /// Multiplies a matrix by a scalar value. + /// + /// The source matrix. + /// The scaling factor. + /// The scaled matrix. + public static Matrix4x4 Multiply(Matrix4x4 value1, float value2) + { + Matrix4x4 result; + + result.M11 = value1.M11 * value2; + result.M12 = value1.M12 * value2; + result.M13 = value1.M13 * value2; + result.M14 = value1.M14 * value2; + result.M21 = value1.M21 * value2; + result.M22 = value1.M22 * value2; + result.M23 = value1.M23 * value2; + result.M24 = value1.M24 * value2; + result.M31 = value1.M31 * value2; + result.M32 = value1.M32 * value2; + result.M33 = value1.M33 * value2; + result.M34 = value1.M34 * value2; + result.M41 = value1.M41 * value2; + result.M42 = value1.M42 * value2; + result.M43 = value1.M43 * value2; + result.M44 = value1.M44 * value2; + + return result; + } + + /// + /// Returns a new matrix with the negated elements of the given matrix. + /// + /// The source matrix. + /// The negated matrix. + public static Matrix4x4 operator -(Matrix4x4 value) + { + Matrix4x4 m; + + m.M11 = -value.M11; + m.M12 = -value.M12; + m.M13 = -value.M13; + m.M14 = -value.M14; + m.M21 = -value.M21; + m.M22 = -value.M22; + m.M23 = -value.M23; + m.M24 = -value.M24; + m.M31 = -value.M31; + m.M32 = -value.M32; + m.M33 = -value.M33; + m.M34 = -value.M34; + m.M41 = -value.M41; + m.M42 = -value.M42; + m.M43 = -value.M43; + m.M44 = -value.M44; + + return m; + } + + /// + /// Adds two matrices together. + /// + /// The first source matrix. + /// The second source matrix. + /// The resulting matrix. + public static Matrix4x4 operator +(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 m; + + m.M11 = value1.M11 + value2.M11; + m.M12 = value1.M12 + value2.M12; + m.M13 = value1.M13 + value2.M13; + m.M14 = value1.M14 + value2.M14; + m.M21 = value1.M21 + value2.M21; + m.M22 = value1.M22 + value2.M22; + m.M23 = value1.M23 + value2.M23; + m.M24 = value1.M24 + value2.M24; + m.M31 = value1.M31 + value2.M31; + m.M32 = value1.M32 + value2.M32; + m.M33 = value1.M33 + value2.M33; + m.M34 = value1.M34 + value2.M34; + m.M41 = value1.M41 + value2.M41; + m.M42 = value1.M42 + value2.M42; + m.M43 = value1.M43 + value2.M43; + m.M44 = value1.M44 + value2.M44; + + return m; + } + + /// + /// Subtracts the second matrix from the first. + /// + /// The first source matrix. + /// The second source matrix. + /// The result of the subtraction. + public static Matrix4x4 operator -(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 m; + + m.M11 = value1.M11 - value2.M11; + m.M12 = value1.M12 - value2.M12; + m.M13 = value1.M13 - value2.M13; + m.M14 = value1.M14 - value2.M14; + m.M21 = value1.M21 - value2.M21; + m.M22 = value1.M22 - value2.M22; + m.M23 = value1.M23 - value2.M23; + m.M24 = value1.M24 - value2.M24; + m.M31 = value1.M31 - value2.M31; + m.M32 = value1.M32 - value2.M32; + m.M33 = value1.M33 - value2.M33; + m.M34 = value1.M34 - value2.M34; + m.M41 = value1.M41 - value2.M41; + m.M42 = value1.M42 - value2.M42; + m.M43 = value1.M43 - value2.M43; + m.M44 = value1.M44 - value2.M44; + + return m; + } + + /// + /// Multiplies a matrix by another matrix. + /// + /// The first source matrix. + /// The second source matrix. + /// The result of the multiplication. + public static Matrix4x4 operator *(Matrix4x4 value1, Matrix4x4 value2) + { + Matrix4x4 m; + + // First row + m.M11 = value1.M11 * value2.M11 + value1.M12 * value2.M21 + value1.M13 * value2.M31 + value1.M14 * value2.M41; + m.M12 = value1.M11 * value2.M12 + value1.M12 * value2.M22 + value1.M13 * value2.M32 + value1.M14 * value2.M42; + m.M13 = value1.M11 * value2.M13 + value1.M12 * value2.M23 + value1.M13 * value2.M33 + value1.M14 * value2.M43; + m.M14 = value1.M11 * value2.M14 + value1.M12 * value2.M24 + value1.M13 * value2.M34 + value1.M14 * value2.M44; + + // Second row + m.M21 = value1.M21 * value2.M11 + value1.M22 * value2.M21 + value1.M23 * value2.M31 + value1.M24 * value2.M41; + m.M22 = value1.M21 * value2.M12 + value1.M22 * value2.M22 + value1.M23 * value2.M32 + value1.M24 * value2.M42; + m.M23 = value1.M21 * value2.M13 + value1.M22 * value2.M23 + value1.M23 * value2.M33 + value1.M24 * value2.M43; + m.M24 = value1.M21 * value2.M14 + value1.M22 * value2.M24 + value1.M23 * value2.M34 + value1.M24 * value2.M44; + + // Third row + m.M31 = value1.M31 * value2.M11 + value1.M32 * value2.M21 + value1.M33 * value2.M31 + value1.M34 * value2.M41; + m.M32 = value1.M31 * value2.M12 + value1.M32 * value2.M22 + value1.M33 * value2.M32 + value1.M34 * value2.M42; + m.M33 = value1.M31 * value2.M13 + value1.M32 * value2.M23 + value1.M33 * value2.M33 + value1.M34 * value2.M43; + m.M34 = value1.M31 * value2.M14 + value1.M32 * value2.M24 + value1.M33 * value2.M34 + value1.M34 * value2.M44; + + // Fourth row + m.M41 = value1.M41 * value2.M11 + value1.M42 * value2.M21 + value1.M43 * value2.M31 + value1.M44 * value2.M41; + m.M42 = value1.M41 * value2.M12 + value1.M42 * value2.M22 + value1.M43 * value2.M32 + value1.M44 * value2.M42; + m.M43 = value1.M41 * value2.M13 + value1.M42 * value2.M23 + value1.M43 * value2.M33 + value1.M44 * value2.M43; + m.M44 = value1.M41 * value2.M14 + value1.M42 * value2.M24 + value1.M43 * value2.M34 + value1.M44 * value2.M44; + + return m; + } + + /// + /// Multiplies a matrix by a scalar value. + /// + /// The source matrix. + /// The scaling factor. + /// The scaled matrix. + public static Matrix4x4 operator *(Matrix4x4 value1, float value2) + { + Matrix4x4 m; + + m.M11 = value1.M11 * value2; + m.M12 = value1.M12 * value2; + m.M13 = value1.M13 * value2; + m.M14 = value1.M14 * value2; + m.M21 = value1.M21 * value2; + m.M22 = value1.M22 * value2; + m.M23 = value1.M23 * value2; + m.M24 = value1.M24 * value2; + m.M31 = value1.M31 * value2; + m.M32 = value1.M32 * value2; + m.M33 = value1.M33 * value2; + m.M34 = value1.M34 * value2; + m.M41 = value1.M41 * value2; + m.M42 = value1.M42 * value2; + m.M43 = value1.M43 * value2; + m.M44 = value1.M44 * value2; + return m; + } + + /// + /// Returns a boolean indicating whether the given two matrices are equal. + /// + /// The first matrix to compare. + /// The second matrix to compare. + /// True if the given matrices are equal; False otherwise. + public static bool operator ==(Matrix4x4 value1, Matrix4x4 value2) + { + return (value1.M11 == value2.M11 && value1.M22 == value2.M22 && value1.M33 == value2.M33 && value1.M44 == value2.M44 && // Check diagonal element first for early out. + value1.M12 == value2.M12 && value1.M13 == value2.M13 && value1.M14 == value2.M14 && + value1.M21 == value2.M21 && value1.M23 == value2.M23 && value1.M24 == value2.M24 && + value1.M31 == value2.M31 && value1.M32 == value2.M32 && value1.M34 == value2.M34 && + value1.M41 == value2.M41 && value1.M42 == value2.M42 && value1.M43 == value2.M43); + } + + /// + /// Returns a boolean indicating whether the given two matrices are not equal. + /// + /// The first matrix to compare. + /// The second matrix to compare. + /// True if the given matrices are not equal; False if they are equal. + public static bool operator !=(Matrix4x4 value1, Matrix4x4 value2) + { + return (value1.M11 != value2.M11 || value1.M12 != value2.M12 || value1.M13 != value2.M13 || value1.M14 != value2.M14 || + value1.M21 != value2.M21 || value1.M22 != value2.M22 || value1.M23 != value2.M23 || value1.M24 != value2.M24 || + value1.M31 != value2.M31 || value1.M32 != value2.M32 || value1.M33 != value2.M33 || value1.M34 != value2.M34 || + value1.M41 != value2.M41 || value1.M42 != value2.M42 || value1.M43 != value2.M43 || value1.M44 != value2.M44); + } + + /// + /// Returns a boolean indicating whether this matrix instance is equal to the other given matrix. + /// + /// The matrix to compare this instance to. + /// True if the matrices are equal; False otherwise. + public bool Equals(Matrix4x4 other) + { + return (M11 == other.M11 && M22 == other.M22 && M33 == other.M33 && M44 == other.M44 && // Check diagonal element first for early out. + M12 == other.M12 && M13 == other.M13 && M14 == other.M14 && + M21 == other.M21 && M23 == other.M23 && M24 == other.M24 && + M31 == other.M31 && M32 == other.M32 && M34 == other.M34 && + M41 == other.M41 && M42 == other.M42 && M43 == other.M43); + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this matrix instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this matrix; False otherwise. + public override bool Equals(object obj) + { + if (obj is Matrix4x4) + { + return Equals((Matrix4x4)obj); + } + + return false; + } + + /// + /// Returns a String representing this matrix instance. + /// + /// The string representation. + public override string ToString() + { + CultureInfo ci = CultureInfo.CurrentCulture; + + return String.Format(ci, "{{ {{M11:{0} M12:{1} M13:{2} M14:{3}}} {{M21:{4} M22:{5} M23:{6} M24:{7}}} {{M31:{8} M32:{9} M33:{10} M34:{11}}} {{M41:{12} M42:{13} M43:{14} M44:{15}}} }}", + M11.ToString(ci), M12.ToString(ci), M13.ToString(ci), M14.ToString(ci), + M21.ToString(ci), M22.ToString(ci), M23.ToString(ci), M24.ToString(ci), + M31.ToString(ci), M32.ToString(ci), M33.ToString(ci), M34.ToString(ci), + M41.ToString(ci), M42.ToString(ci), M43.ToString(ci), M44.ToString(ci)); + } + + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + return M11.GetHashCode() + M12.GetHashCode() + M13.GetHashCode() + M14.GetHashCode() + + M21.GetHashCode() + M22.GetHashCode() + M23.GetHashCode() + M24.GetHashCode() + + M31.GetHashCode() + M32.GetHashCode() + M33.GetHashCode() + M34.GetHashCode() + + M41.GetHashCode() + M42.GetHashCode() + M43.GetHashCode() + M44.GetHashCode(); + } + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Plane.cs b/external/referencesource/System.Numerics/System/Numerics/Plane.cs new file mode 100644 index 0000000000..e1747c39bc --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Plane.cs @@ -0,0 +1,366 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; +using System.Runtime.CompilerServices; + +namespace System.Numerics +{ + /// + /// A structure encapsulating a 3D Plane + /// + public struct Plane : IEquatable + { + /// + /// The normal vector of the Plane. + /// + public Vector3 Normal; + /// + /// The distance of the Plane along its normal from the origin. + /// + public float D; + + /// + /// Constructs a Plane from the X, Y, and Z components of its normal, and its distance from the origin on that normal. + /// + /// The X-component of the normal. + /// The Y-component of the normal. + /// The Z-component of the normal. + /// The distance of the Plane along its normal from the origin. + public Plane(float x, float y, float z, float d) + { + Normal = new Vector3(x, y, z); + this.D = d; + } + + /// + /// Constructs a Plane from the given normal and distance along the normal from the origin. + /// + /// The Plane's normal vector. + /// The Plane's distance from the origin along its normal vector. + public Plane(Vector3 normal, float d) + { + this.Normal = normal; + this.D = d; + } + + /// + /// Constructs a Plane from the given Vector4. + /// + /// A vector whose first 3 elements describe the normal vector, + /// and whose W component defines the distance along that normal from the origin. + public Plane(Vector4 value) + { + Normal = new Vector3(value.X, value.Y, value.Z); + D = value.W; + } + + /// + /// Creates a Plane that contains the three given points. + /// + /// The first point defining the Plane. + /// The second point defining the Plane. + /// The third point defining the Plane. + /// The Plane containing the three points. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Plane CreateFromVertices(Vector3 point1, Vector3 point2, Vector3 point3) + { + if (Vector.IsHardwareAccelerated) + { + Vector3 a = point2 - point1; + Vector3 b = point3 - point1; + + // N = Cross(a, b) + Vector3 n = Vector3.Cross(a, b); + Vector3 normal = Vector3.Normalize(n); + + // D = - Dot(N, point1) + float d = -Vector3.Dot(normal, point1); + + return new Plane(normal, d); + } + else + { + float ax = point2.X - point1.X; + float ay = point2.Y - point1.Y; + float az = point2.Z - point1.Z; + + float bx = point3.X - point1.X; + float by = point3.Y - point1.Y; + float bz = point3.Z - point1.Z; + + // N=Cross(a,b) + float nx = ay * bz - az * by; + float ny = az * bx - ax * bz; + float nz = ax * by - ay * bx; + + // Normalize(N) + float ls = nx * nx + ny * ny + nz * nz; + float invNorm = 1.0f / (float)Math.Sqrt((double)ls); + + Vector3 normal = new Vector3( + nx * invNorm, + ny * invNorm, + nz * invNorm); + + return new Plane( + normal, + -(normal.X * point1.X + normal.Y * point1.Y + normal.Z * point1.Z)); + } + } + + /// + /// Creates a new Plane whose normal vector is the source Plane's normal vector normalized. + /// + /// The source Plane. + /// The normalized Plane. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Plane Normalize(Plane value) + { + const float FLT_EPSILON = 1.192092896e-07f; // smallest such that 1.0+FLT_EPSILON != 1.0 + if (Vector.IsHardwareAccelerated) + { + float normalLengthSquared = value.Normal.LengthSquared(); + if (Math.Abs(normalLengthSquared - 1.0f) < FLT_EPSILON) + { + // It already normalized, so we don't need to farther process. + return value; + } + float normalLength = (float)Math.Sqrt(normalLengthSquared); + return new Plane( + value.Normal / normalLength, + value.D / normalLength); + } + else + { + float f = value.Normal.X * value.Normal.X + value.Normal.Y * value.Normal.Y + value.Normal.Z * value.Normal.Z; + + if (Math.Abs(f - 1.0f) < FLT_EPSILON) + { + return value; // It already normalized, so we don't need to further process. + } + + float fInv = 1.0f / (float)Math.Sqrt(f); + + return new Plane( + value.Normal.X * fInv, + value.Normal.Y * fInv, + value.Normal.Z * fInv, + value.D * fInv); + } + } + + /// + /// Transforms a normalized Plane by a Matrix. + /// + /// The normalized Plane to transform. + /// This Plane must already be normalized, so that its Normal vector is of unit length, before this method is called. + /// The transformation matrix to apply to the Plane. + /// The transformed Plane. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Plane Transform(Plane plane, Matrix4x4 matrix) + { + Matrix4x4 m; + Matrix4x4.Invert(matrix, out m); + + float x = plane.Normal.X, y = plane.Normal.Y, z = plane.Normal.Z, w = plane.D; + + return new Plane( + x * m.M11 + y * m.M12 + z * m.M13 + w * m.M14, + x * m.M21 + y * m.M22 + z * m.M23 + w * m.M24, + x * m.M31 + y * m.M32 + z * m.M33 + w * m.M34, + x * m.M41 + y * m.M42 + z * m.M43 + w * m.M44); + } + + /// + /// Transforms a normalized Plane by a Quaternion rotation. + /// + /// The normalized Plane to transform. + /// This Plane must already be normalized, so that its Normal vector is of unit length, before this method is called. + /// The Quaternion rotation to apply to the Plane. + /// A new Plane that results from applying the rotation. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Plane Transform(Plane plane, Quaternion rotation) + { + // Compute rotation matrix. + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + float m11 = 1.0f - yy2 - zz2; + float m21 = xy2 - wz2; + float m31 = xz2 + wy2; + + float m12 = xy2 + wz2; + float m22 = 1.0f - xx2 - zz2; + float m32 = yz2 - wx2; + + float m13 = xz2 - wy2; + float m23 = yz2 + wx2; + float m33 = 1.0f - xx2 - yy2; + + float x = plane.Normal.X, y = plane.Normal.Y, z = plane.Normal.Z; + + return new Plane( + x * m11 + y * m21 + z * m31, + x * m12 + y * m22 + z * m32, + x * m13 + y * m23 + z * m33, + plane.D); + } + + /// + /// Calculates the dot product of a Plane and Vector4. + /// + /// The Plane. + /// The Vector4. + /// The dot product. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Dot(Plane plane, Vector4 value) + { + return plane.Normal.X * value.X + + plane.Normal.Y * value.Y + + plane.Normal.Z * value.Z + + plane.D * value.W; + } + + /// + /// Returns the dot product of a specified Vector3 and the normal vector of this Plane plus the distance (D) value of the Plane. + /// + /// The plane. + /// The Vector3. + /// The resulting value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float DotCoordinate(Plane plane, Vector3 value) + { + if (Vector.IsHardwareAccelerated) + { + return Vector3.Dot(plane.Normal, value) + plane.D; + } + else + { + return plane.Normal.X * value.X + + plane.Normal.Y * value.Y + + plane.Normal.Z * value.Z + + plane.D; + } + } + + /// + /// Returns the dot product of a specified Vector3 and the Normal vector of this Plane. + /// + /// The plane. + /// The Vector3. + /// The resulting dot product. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float DotNormal(Plane plane, Vector3 value) + { + if (Vector.IsHardwareAccelerated) + { + return Vector3.Dot(plane.Normal, value); + } + else + { + return plane.Normal.X * value.X + + plane.Normal.Y * value.Y + + plane.Normal.Z * value.Z; + } + } + + /// + /// Returns a boolean indicating whether the two given Planes are equal. + /// + /// The first Plane to compare. + /// The second Plane to compare. + /// True if the Planes are equal; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Plane value1, Plane value2) + { + return (value1.Normal.X == value2.Normal.X && + value1.Normal.Y == value2.Normal.Y && + value1.Normal.Z == value2.Normal.Z && + value1.D == value2.D); + } + + /// + /// Returns a boolean indicating whether the two given Planes are not equal. + /// + /// The first Plane to compare. + /// The second Plane to compare. + /// True if the Planes are not equal; False if they are equal. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Plane value1, Plane value2) + { + return (value1.Normal.X != value2.Normal.X || + value1.Normal.Y != value2.Normal.Y || + value1.Normal.Z != value2.Normal.Z || + value1.D != value2.D); + } + + /// + /// Returns a boolean indicating whether the given Plane is equal to this Plane instance. + /// + /// The Plane to compare this instance to. + /// True if the other Plane is equal to this instance; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool Equals(Plane other) + { + if (Vector.IsHardwareAccelerated) + { + return this.Normal.Equals(other.Normal) && this.D == other.D; + } + else + { + return (Normal.X == other.Normal.X && + Normal.Y == other.Normal.Y && + Normal.Z == other.Normal.Z && + D == other.D); + } + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this Plane instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this Plane; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override bool Equals(object obj) + { + if (obj is Plane) + { + return Equals((Plane)obj); + } + + return false; + } + + /// + /// Returns a String representing this Plane instance. + /// + /// The string representation. + public override string ToString() + { + CultureInfo ci = CultureInfo.CurrentCulture; + + return String.Format(ci, "{{Normal:{0} D:{1}}}", Normal.ToString(), D.ToString(ci)); + } + + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + return Normal.GetHashCode() + D.GetHashCode(); + } + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Quaternion.cs b/external/referencesource/System.Numerics/System/Numerics/Quaternion.cs new file mode 100644 index 0000000000..75f6c32f31 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Quaternion.cs @@ -0,0 +1,792 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; + +namespace System.Numerics +{ + /// + /// A structure encapsulating a four-dimensional vector (x,y,z,w), + /// which is used to efficiently rotate an object about the (x,y,z) vector by the angle theta, where w = cos(theta/2). + /// + public struct Quaternion : IEquatable + { + /// + /// Specifies the X-value of the vector component of the Quaternion. + /// + public float X; + /// + /// Specifies the Y-value of the vector component of the Quaternion. + /// + public float Y; + /// + /// Specifies the Z-value of the vector component of the Quaternion. + /// + public float Z; + /// + /// Specifies the rotation component of the Quaternion. + /// + public float W; + + /// + /// Returns a Quaternion representing no rotation. + /// + public static Quaternion Identity + { + get { return new Quaternion(0, 0, 0, 1); } + } + + /// + /// Returns whether the Quaternion is the identity Quaternion. + /// + public bool IsIdentity + { + get { return X == 0f && Y == 0f && Z == 0f && W == 1f; } + } + + /// + /// Constructs a Quaternion from the given components. + /// + /// The X component of the Quaternion. + /// The Y component of the Quaternion. + /// The Z component of the Quaternion. + /// The W component of the Quaternion. + public Quaternion(float x, float y, float z, float w) + { + this.X = x; + this.Y = y; + this.Z = z; + this.W = w; + } + + /// + /// Constructs a Quaternion from the given vector and rotation parts. + /// + /// The vector part of the Quaternion. + /// The rotation part of the Quaternion. + public Quaternion(Vector3 vectorPart, float scalarPart) + { + X = vectorPart.X; + Y = vectorPart.Y; + Z = vectorPart.Z; + W = scalarPart; + } + + /// + /// Calculates the length of the Quaternion. + /// + /// The computed length of the Quaternion. + public float Length() + { + float ls = X * X + Y * Y + Z * Z + W * W; + + return (float)Math.Sqrt((double)ls); + } + + /// + /// Calculates the length squared of the Quaternion. This operation is cheaper than Length(). + /// + /// The length squared of the Quaternion. + public float LengthSquared() + { + return X * X + Y * Y + Z * Z + W * W; + } + + /// + /// Divides each component of the Quaternion by the length of the Quaternion. + /// + /// The source Quaternion. + /// The normalized Quaternion. + public static Quaternion Normalize(Quaternion value) + { + Quaternion ans; + + float ls = value.X * value.X + value.Y * value.Y + value.Z * value.Z + value.W * value.W; + + float invNorm = 1.0f / (float)Math.Sqrt((double)ls); + + ans.X = value.X * invNorm; + ans.Y = value.Y * invNorm; + ans.Z = value.Z * invNorm; + ans.W = value.W * invNorm; + + return ans; + } + + /// + /// Creates the conjugate of a specified Quaternion. + /// + /// The Quaternion of which to return the conjugate. + /// A new Quaternion that is the conjugate of the specified one. + public static Quaternion Conjugate(Quaternion value) + { + Quaternion ans; + + ans.X = -value.X; + ans.Y = -value.Y; + ans.Z = -value.Z; + ans.W = value.W; + + return ans; + } + + /// + /// Returns the inverse of a Quaternion. + /// + /// The source Quaternion. + /// The inverted Quaternion. + public static Quaternion Inverse(Quaternion value) + { + // -1 ( a -v ) + // q = ( ------------- ------------- ) + // ( a^2 + |v|^2 , a^2 + |v|^2 ) + + Quaternion ans; + + float ls = value.X * value.X + value.Y * value.Y + value.Z * value.Z + value.W * value.W; + float invNorm = 1.0f / ls; + + ans.X = -value.X * invNorm; + ans.Y = -value.Y * invNorm; + ans.Z = -value.Z * invNorm; + ans.W = value.W * invNorm; + + return ans; + } + + /// + /// Creates a Quaternion from a vector and an angle to rotate about the vector. + /// + /// The vector to rotate around. + /// The angle, in radians, to rotate around the vector. + /// The created Quaternion. + public static Quaternion CreateFromAxisAngle(Vector3 axis, float angle) + { + Quaternion ans; + + float halfAngle = angle * 0.5f; + float s = (float)Math.Sin(halfAngle); + float c = (float)Math.Cos(halfAngle); + + ans.X = axis.X * s; + ans.Y = axis.Y * s; + ans.Z = axis.Z * s; + ans.W = c; + + return ans; + } + + /// + /// Creates a new Quaternion from the given yaw, pitch, and roll, in radians. + /// + /// The yaw angle, in radians, around the Y-axis. + /// The pitch angle, in radians, around the X-axis. + /// The roll angle, in radians, around the Z-axis. + /// + public static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll) + { + // Roll first, about axis the object is facing, then + // pitch upward, then yaw to face into the new heading + float sr, cr, sp, cp, sy, cy; + + float halfRoll = roll * 0.5f; + sr = (float)Math.Sin(halfRoll); + cr = (float)Math.Cos(halfRoll); + + float halfPitch = pitch * 0.5f; + sp = (float)Math.Sin(halfPitch); + cp = (float)Math.Cos(halfPitch); + + float halfYaw = yaw * 0.5f; + sy = (float)Math.Sin(halfYaw); + cy = (float)Math.Cos(halfYaw); + + Quaternion result; + + result.X = cy * sp * cr + sy * cp * sr; + result.Y = sy * cp * cr - cy * sp * sr; + result.Z = cy * cp * sr - sy * sp * cr; + result.W = cy * cp * cr + sy * sp * sr; + + return result; + } + + /// + /// Creates a Quaternion from the given rotation matrix. + /// + /// The rotation matrix. + /// The created Quaternion. + public static Quaternion CreateFromRotationMatrix(Matrix4x4 matrix) + { + float trace = matrix.M11 + matrix.M22 + matrix.M33; + + Quaternion q = new Quaternion(); + + if (trace > 0.0f) + { + float s = (float)Math.Sqrt(trace + 1.0f); + q.W = s * 0.5f; + s = 0.5f / s; + q.X = (matrix.M23 - matrix.M32) * s; + q.Y = (matrix.M31 - matrix.M13) * s; + q.Z = (matrix.M12 - matrix.M21) * s; + } + else + { + if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33) + { + float s = (float)Math.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33); + float invS = 0.5f / s; + q.X = 0.5f * s; + q.Y = (matrix.M12 + matrix.M21) * invS; + q.Z = (matrix.M13 + matrix.M31) * invS; + q.W = (matrix.M23 - matrix.M32) * invS; + } + else if (matrix.M22 > matrix.M33) + { + float s = (float)Math.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33); + float invS = 0.5f / s; + q.X = (matrix.M21 + matrix.M12) * invS; + q.Y = 0.5f * s; + q.Z = (matrix.M32 + matrix.M23) * invS; + q.W = (matrix.M31 - matrix.M13) * invS; + } + else + { + float s = (float)Math.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22); + float invS = 0.5f / s; + q.X = (matrix.M31 + matrix.M13) * invS; + q.Y = (matrix.M32 + matrix.M23) * invS; + q.Z = 0.5f * s; + q.W = (matrix.M12 - matrix.M21) * invS; + } + } + + return q; + } + + /// + /// Calculates the dot product of two Quaternions. + /// + /// The first source Quaternion. + /// The second source Quaternion. + /// The dot product of the Quaternions. + public static float Dot(Quaternion quaternion1, Quaternion quaternion2) + { + return quaternion1.X * quaternion2.X + + quaternion1.Y * quaternion2.Y + + quaternion1.Z * quaternion2.Z + + quaternion1.W * quaternion2.W; + } + + /// + /// Interpolates between two quaternions, using spherical linear interpolation. + /// + /// The first source Quaternion. + /// The second source Quaternion. + /// The relative weight of the second source Quaternion in the interpolation. + /// The interpolated Quaternion. + public static Quaternion Slerp(Quaternion quaternion1, Quaternion quaternion2, float amount) + { + const float epsilon = 1e-6f; + + float t = amount; + + float cosOmega = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W; + + bool flip = false; + + if (cosOmega < 0.0f) + { + flip = true; + cosOmega = -cosOmega; + } + + float s1, s2; + + if (cosOmega > (1.0f - epsilon)) + { + // Too close, do straight linear interpolation. + s1 = 1.0f - t; + s2 = (flip) ? -t : t; + } + else + { + float omega = (float)Math.Acos(cosOmega); + float invSinOmega = (float)(1 / Math.Sin(omega)); + + s1 = (float)Math.Sin((1.0f - t) * omega) * invSinOmega; + s2 = (flip) + ? (float)-Math.Sin(t * omega) * invSinOmega + : (float)Math.Sin(t * omega) * invSinOmega; + } + + Quaternion ans; + + ans.X = s1 * quaternion1.X + s2 * quaternion2.X; + ans.Y = s1 * quaternion1.Y + s2 * quaternion2.Y; + ans.Z = s1 * quaternion1.Z + s2 * quaternion2.Z; + ans.W = s1 * quaternion1.W + s2 * quaternion2.W; + + return ans; + } + + /// + /// Linearly interpolates between two quaternions. + /// + /// The first source Quaternion. + /// The second source Quaternion. + /// The relative weight of the second source Quaternion in the interpolation. + /// The interpolated Quaternion. + public static Quaternion Lerp(Quaternion quaternion1, Quaternion quaternion2, float amount) + { + float t = amount; + float t1 = 1.0f - t; + + Quaternion r = new Quaternion(); + + float dot = quaternion1.X * quaternion2.X + quaternion1.Y * quaternion2.Y + + quaternion1.Z * quaternion2.Z + quaternion1.W * quaternion2.W; + + if (dot >= 0.0f) + { + r.X = t1 * quaternion1.X + t * quaternion2.X; + r.Y = t1 * quaternion1.Y + t * quaternion2.Y; + r.Z = t1 * quaternion1.Z + t * quaternion2.Z; + r.W = t1 * quaternion1.W + t * quaternion2.W; + } + else + { + r.X = t1 * quaternion1.X - t * quaternion2.X; + r.Y = t1 * quaternion1.Y - t * quaternion2.Y; + r.Z = t1 * quaternion1.Z - t * quaternion2.Z; + r.W = t1 * quaternion1.W - t * quaternion2.W; + } + + // Normalize it. + float ls = r.X * r.X + r.Y * r.Y + r.Z * r.Z + r.W * r.W; + float invNorm = 1.0f / (float)Math.Sqrt((double)ls); + + r.X *= invNorm; + r.Y *= invNorm; + r.Z *= invNorm; + r.W *= invNorm; + + return r; + } + + /// + /// Concatenates two Quaternions; the result represents the value1 rotation followed by the value2 rotation. + /// + /// The first Quaternion rotation in the series. + /// The second Quaternion rotation in the series. + /// A new Quaternion representing the concatenation of the value1 rotation followed by the value2 rotation. + public static Quaternion Concatenate(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + // Concatenate rotation is actually q2 * q1 instead of q1 * q2. + // So that's why value2 goes q1 and value1 goes q2. + float q1x = value2.X; + float q1y = value2.Y; + float q1z = value2.Z; + float q1w = value2.W; + + float q2x = value1.X; + float q2y = value1.Y; + float q2z = value1.Z; + float q2w = value1.W; + + // cross(av, bv) + float cx = q1y * q2z - q1z * q2y; + float cy = q1z * q2x - q1x * q2z; + float cz = q1x * q2y - q1y * q2x; + + float dot = q1x * q2x + q1y * q2y + q1z * q2z; + + ans.X = q1x * q2w + q2x * q1w + cx; + ans.Y = q1y * q2w + q2y * q1w + cy; + ans.Z = q1z * q2w + q2z * q1w + cz; + ans.W = q1w * q2w - dot; + + return ans; + } + + /// + /// Flips the sign of each component of the quaternion. + /// + /// The source Quaternion. + /// The negated Quaternion. + public static Quaternion Negate(Quaternion value) + { + Quaternion ans; + + ans.X = -value.X; + ans.Y = -value.Y; + ans.Z = -value.Z; + ans.W = -value.W; + + return ans; + } + + /// + /// Adds two Quaternions element-by-element. + /// + /// The first source Quaternion. + /// The second source Quaternion. + /// The result of adding the Quaternions. + public static Quaternion Add(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + ans.X = value1.X + value2.X; + ans.Y = value1.Y + value2.Y; + ans.Z = value1.Z + value2.Z; + ans.W = value1.W + value2.W; + + return ans; + } + + /// + /// Subtracts one Quaternion from another. + /// + /// The first source Quaternion. + /// The second Quaternion, to be subtracted from the first. + /// The result of the subtraction. + public static Quaternion Subtract(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + ans.X = value1.X - value2.X; + ans.Y = value1.Y - value2.Y; + ans.Z = value1.Z - value2.Z; + ans.W = value1.W - value2.W; + + return ans; + } + + /// + /// Multiplies two Quaternions together. + /// + /// The Quaternion on the left side of the multiplication. + /// The Quaternion on the right side of the multiplication. + /// The result of the multiplication. + public static Quaternion Multiply(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + float q1x = value1.X; + float q1y = value1.Y; + float q1z = value1.Z; + float q1w = value1.W; + + float q2x = value2.X; + float q2y = value2.Y; + float q2z = value2.Z; + float q2w = value2.W; + + // cross(av, bv) + float cx = q1y * q2z - q1z * q2y; + float cy = q1z * q2x - q1x * q2z; + float cz = q1x * q2y - q1y * q2x; + + float dot = q1x * q2x + q1y * q2y + q1z * q2z; + + ans.X = q1x * q2w + q2x * q1w + cx; + ans.Y = q1y * q2w + q2y * q1w + cy; + ans.Z = q1z * q2w + q2z * q1w + cz; + ans.W = q1w * q2w - dot; + + return ans; + } + + /// + /// Multiplies a Quaternion by a scalar value. + /// + /// The source Quaternion. + /// The scalar value. + /// The result of the multiplication. + public static Quaternion Multiply(Quaternion value1, float value2) + { + Quaternion ans; + + ans.X = value1.X * value2; + ans.Y = value1.Y * value2; + ans.Z = value1.Z * value2; + ans.W = value1.W * value2; + + return ans; + } + + /// + /// Divides a Quaternion by another Quaternion. + /// + /// The source Quaternion. + /// The divisor. + /// The result of the division. + public static Quaternion Divide(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + float q1x = value1.X; + float q1y = value1.Y; + float q1z = value1.Z; + float q1w = value1.W; + + //------------------------------------- + // Inverse part. + float ls = value2.X * value2.X + value2.Y * value2.Y + + value2.Z * value2.Z + value2.W * value2.W; + float invNorm = 1.0f / ls; + + float q2x = -value2.X * invNorm; + float q2y = -value2.Y * invNorm; + float q2z = -value2.Z * invNorm; + float q2w = value2.W * invNorm; + + //------------------------------------- + // Multiply part. + + // cross(av, bv) + float cx = q1y * q2z - q1z * q2y; + float cy = q1z * q2x - q1x * q2z; + float cz = q1x * q2y - q1y * q2x; + + float dot = q1x * q2x + q1y * q2y + q1z * q2z; + + ans.X = q1x * q2w + q2x * q1w + cx; + ans.Y = q1y * q2w + q2y * q1w + cy; + ans.Z = q1z * q2w + q2z * q1w + cz; + ans.W = q1w * q2w - dot; + + return ans; + } + + /// + /// Flips the sign of each component of the quaternion. + /// + /// The source Quaternion. + /// The negated Quaternion. + public static Quaternion operator -(Quaternion value) + { + Quaternion ans; + + ans.X = -value.X; + ans.Y = -value.Y; + ans.Z = -value.Z; + ans.W = -value.W; + + return ans; + } + + /// + /// Adds two Quaternions element-by-element. + /// + /// The first source Quaternion. + /// The second source Quaternion. + /// The result of adding the Quaternions. + public static Quaternion operator +(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + ans.X = value1.X + value2.X; + ans.Y = value1.Y + value2.Y; + ans.Z = value1.Z + value2.Z; + ans.W = value1.W + value2.W; + + return ans; + } + + /// + /// Subtracts one Quaternion from another. + /// + /// The first source Quaternion. + /// The second Quaternion, to be subtracted from the first. + /// The result of the subtraction. + public static Quaternion operator -(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + ans.X = value1.X - value2.X; + ans.Y = value1.Y - value2.Y; + ans.Z = value1.Z - value2.Z; + ans.W = value1.W - value2.W; + + return ans; + } + + /// + /// Multiplies two Quaternions together. + /// + /// The Quaternion on the left side of the multiplication. + /// The Quaternion on the right side of the multiplication. + /// The result of the multiplication. + public static Quaternion operator *(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + float q1x = value1.X; + float q1y = value1.Y; + float q1z = value1.Z; + float q1w = value1.W; + + float q2x = value2.X; + float q2y = value2.Y; + float q2z = value2.Z; + float q2w = value2.W; + + // cross(av, bv) + float cx = q1y * q2z - q1z * q2y; + float cy = q1z * q2x - q1x * q2z; + float cz = q1x * q2y - q1y * q2x; + + float dot = q1x * q2x + q1y * q2y + q1z * q2z; + + ans.X = q1x * q2w + q2x * q1w + cx; + ans.Y = q1y * q2w + q2y * q1w + cy; + ans.Z = q1z * q2w + q2z * q1w + cz; + ans.W = q1w * q2w - dot; + + return ans; + } + + /// + /// Multiplies a Quaternion by a scalar value. + /// + /// The source Quaternion. + /// The scalar value. + /// The result of the multiplication. + public static Quaternion operator *(Quaternion value1, float value2) + { + Quaternion ans; + + ans.X = value1.X * value2; + ans.Y = value1.Y * value2; + ans.Z = value1.Z * value2; + ans.W = value1.W * value2; + + return ans; + } + + /// + /// Divides a Quaternion by another Quaternion. + /// + /// The source Quaternion. + /// The divisor. + /// The result of the division. + public static Quaternion operator /(Quaternion value1, Quaternion value2) + { + Quaternion ans; + + float q1x = value1.X; + float q1y = value1.Y; + float q1z = value1.Z; + float q1w = value1.W; + + //------------------------------------- + // Inverse part. + float ls = value2.X * value2.X + value2.Y * value2.Y + + value2.Z * value2.Z + value2.W * value2.W; + float invNorm = 1.0f / ls; + + float q2x = -value2.X * invNorm; + float q2y = -value2.Y * invNorm; + float q2z = -value2.Z * invNorm; + float q2w = value2.W * invNorm; + + //------------------------------------- + // Multiply part. + + // cross(av, bv) + float cx = q1y * q2z - q1z * q2y; + float cy = q1z * q2x - q1x * q2z; + float cz = q1x * q2y - q1y * q2x; + + float dot = q1x * q2x + q1y * q2y + q1z * q2z; + + ans.X = q1x * q2w + q2x * q1w + cx; + ans.Y = q1y * q2w + q2y * q1w + cy; + ans.Z = q1z * q2w + q2z * q1w + cz; + ans.W = q1w * q2w - dot; + + return ans; + } + + /// + /// Returns a boolean indicating whether the two given Quaternions are equal. + /// + /// The first Quaternion to compare. + /// The second Quaternion to compare. + /// True if the Quaternions are equal; False otherwise. + public static bool operator ==(Quaternion value1, Quaternion value2) + { + return (value1.X == value2.X && + value1.Y == value2.Y && + value1.Z == value2.Z && + value1.W == value2.W); + } + + /// + /// Returns a boolean indicating whether the two given Quaternions are not equal. + /// + /// The first Quaternion to compare. + /// The second Quaternion to compare. + /// True if the Quaternions are not equal; False if they are equal. + public static bool operator !=(Quaternion value1, Quaternion value2) + { + return (value1.X != value2.X || + value1.Y != value2.Y || + value1.Z != value2.Z || + value1.W != value2.W); + } + + /// + /// Returns a boolean indicating whether the given Quaternion is equal to this Quaternion instance. + /// + /// The Quaternion to compare this instance to. + /// True if the other Quaternion is equal to this instance; False otherwise. + public bool Equals(Quaternion other) + { + return (X == other.X && + Y == other.Y && + Z == other.Z && + W == other.W); + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this Quaternion instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this Quaternion; False otherwise. + public override bool Equals(object obj) + { + if (obj is Quaternion) + { + return Equals((Quaternion)obj); + } + + return false; + } + + /// + /// Returns a String representing this Quaternion instance. + /// + /// The string representation. + public override string ToString() + { + CultureInfo ci = CultureInfo.CurrentCulture; + + return String.Format(ci, "{{X:{0} Y:{1} Z:{2} W:{3}}}", X.ToString(ci), Y.ToString(ci), Z.ToString(ci), W.ToString(ci)); + } + + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + return X.GetHashCode() + Y.GetHashCode() + Z.GetHashCode() + W.GetHashCode(); + } + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector2.cs b/external/referencesource/System.Numerics/System/Numerics/Vector2.cs new file mode 100644 index 0000000000..1702c846a9 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector2.cs @@ -0,0 +1,451 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Text; + +namespace System.Numerics +{ + /// + /// A structure encapsulating two single precision floating point values and provides hardware accelerated methods. + /// + public partial struct Vector2 : IEquatable, IFormattable + { + #region Public Static Properties + /// + /// Returns the vector (0,0). + /// + public static Vector2 Zero { get { return new Vector2(); } } + /// + /// Returns the vector (1,1). + /// + public static Vector2 One { get { return new Vector2(1.0f, 1.0f); } } + /// + /// Returns the vector (1,0). + /// + public static Vector2 UnitX { get { return new Vector2(1.0f, 0.0f); } } + /// + /// Returns the vector (0,1). + /// + public static Vector2 UnitY { get { return new Vector2(0.0f, 1.0f); } } + #endregion Public Static Properties + + #region Public instance methods + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + int hash = this.X.GetHashCode(); + hash = HashCodeHelper.CombineHashCodes(hash, this.Y.GetHashCode()); + return hash; + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this Vector2 instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this Vector2; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override bool Equals(object obj) + { + if (!(obj is Vector2)) + return false; + return Equals((Vector2)obj); + } + + /// + /// Returns a String representing this Vector2 instance. + /// + /// The string representation. + public override string ToString() + { + return ToString("G", CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector2 instance, using the specified format to format individual elements. + /// + /// The format of individual elements. + /// The string representation. + public string ToString(string format) + { + return ToString(format, CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector2 instance, using the specified format to format individual elements + /// and the given IFormatProvider. + /// + /// The format of individual elements. + /// The format provider to use when formatting elements. + /// The string representation. + public string ToString(string format, IFormatProvider formatProvider) + { + StringBuilder sb = new StringBuilder(); + string separator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator; + sb.Append('<'); + sb.Append(this.X.ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(this.Y.ToString(format, formatProvider)); + sb.Append('>'); + return sb.ToString(); + } + + /// + /// Returns the length of the vector. + /// + /// The vector's length. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Length() + { + if (Vector.IsHardwareAccelerated) + { + float ls = Vector2.Dot(this, this); + return (float)Math.Sqrt(ls); + } + else + { + float ls = X * X + Y * Y; + return (float)Math.Sqrt((double)ls); + } + } + + /// + /// Returns the length of the vector squared. This operation is cheaper than Length(). + /// + /// The vector's length squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float LengthSquared() + { + if (Vector.IsHardwareAccelerated) + { + return Vector2.Dot(this, this); + } + else + { + return X * X + Y * Y; + } + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the Euclidean distance between the two given points. + /// + /// The first point. + /// The second point. + /// The distance. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Distance(Vector2 value1, Vector2 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector2 difference = value1 - value2; + float ls = Vector2.Dot(difference, difference); + return (float)System.Math.Sqrt(ls); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + + float ls = dx * dx + dy * dy; + + return (float)Math.Sqrt((double)ls); + } + } + + /// + /// Returns the Euclidean distance squared between the two given points. + /// + /// The first point. + /// The second point. + /// The distance squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float DistanceSquared(Vector2 value1, Vector2 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector2 difference = value1 - value2; + return Vector2.Dot(difference, difference); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + + return dx * dx + dy * dy; + } + } + + /// + /// Returns a vector with the same direction as the given vector, but with a length of 1. + /// + /// The vector to normalize. + /// The normalized vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Normalize(Vector2 value) + { + if (Vector.IsHardwareAccelerated) + { + float length = value.Length(); + return value / length; + } + else + { + float ls = value.X * value.X + value.Y * value.Y; + float invNorm = 1.0f / (float)Math.Sqrt((double)ls); + + return new Vector2( + value.X * invNorm, + value.Y * invNorm); + } + } + + /// + /// Returns the reflection of a vector off a surface that has the specified normal. + /// + /// The source vector. + /// The normal of the surface being reflected off. + /// The reflected vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Reflect(Vector2 vector, Vector2 normal) + { + if (Vector.IsHardwareAccelerated) + { + float dot = Vector2.Dot(vector, normal); + return vector - (2 * dot * normal); + } + else + { + float dot = vector.X * normal.X + vector.Y * normal.Y; + + return new Vector2( + vector.X - 2.0f * dot * normal.X, + vector.Y - 2.0f * dot * normal.Y); + } + } + + /// + /// Restricts a vector between a min and max value. + /// + /// The source vector. + /// The minimum value. + /// The maximum value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Clamp(Vector2 value1, Vector2 min, Vector2 max) + { + // This compare order is very important!!! + // We must follow HLSL behavior in the case user specified min value is bigger than max value. + float x = value1.X; + x = (x > max.X) ? max.X : x; + x = (x < min.X) ? min.X : x; + + float y = value1.Y; + y = (y > max.Y) ? max.Y : y; + y = (y < min.Y) ? min.Y : y; + + return new Vector2(x, y); + } + + /// + /// Linearly interpolates between two vectors based on the given weighting. + /// + /// The first source vector. + /// The second source vector. + /// Value between 0 and 1 indicating the weight of the second source vector. + /// The interpolated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount) + { + return new Vector2( + value1.X + (value2.X - value1.X) * amount, + value1.Y + (value2.Y - value1.Y) * amount); + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Transform(Vector2 position, Matrix3x2 matrix) + { + return new Vector2( + position.X * matrix.M11 + position.Y * matrix.M21 + matrix.M31, + position.X * matrix.M12 + position.Y * matrix.M22 + matrix.M32); + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Transform(Vector2 position, Matrix4x4 matrix) + { + return new Vector2( + position.X * matrix.M11 + position.Y * matrix.M21 + matrix.M41, + position.X * matrix.M12 + position.Y * matrix.M22 + matrix.M42); + } + + /// + /// Transforms a vector normal by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 TransformNormal(Vector2 normal, Matrix3x2 matrix) + { + return new Vector2( + normal.X * matrix.M11 + normal.Y * matrix.M21, + normal.X * matrix.M12 + normal.Y * matrix.M22); + } + + /// + /// Transforms a vector normal by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 TransformNormal(Vector2 normal, Matrix4x4 matrix) + { + return new Vector2( + normal.X * matrix.M11 + normal.Y * matrix.M21, + normal.X * matrix.M12 + normal.Y * matrix.M22); + } + + /// + /// Transforms a vector by the given Quaternion rotation value. + /// + /// The source vector to be rotated. + /// The rotation to apply. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Transform(Vector2 value, Quaternion rotation) + { + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float yy2 = rotation.Y * y2; + float zz2 = rotation.Z * z2; + + return new Vector2( + value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2), + value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2)); + } + #endregion Public Static Methods + + #region Public operator methods + // all the below methods should be inlined as they are + // implemented over JIT intrinsics + + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Add(Vector2 left, Vector2 right) + { + return left + right; + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Subtract(Vector2 left, Vector2 right) + { + return left - right; + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Multiply(Vector2 left, Vector2 right) + { + return left * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Multiply(Vector2 left, Single right) + { + return left * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Multiply(Single left, Vector2 right) + { + return left * right; + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Divide(Vector2 left, Vector2 right) + { + return left / right; + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Divide(Vector2 left, Single divisor) + { + return left / divisor; + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Negate(Vector2 value) + { + return -value; + } + #endregion Public operator methods + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector2_Intrinsics.cs b/external/referencesource/System.Numerics/System/Numerics/Vector2_Intrinsics.cs new file mode 100644 index 0000000000..cd526bd34c --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector2_Intrinsics.cs @@ -0,0 +1,296 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Runtime.CompilerServices; + +namespace System.Numerics +{ + // This file contains the definitions for all of the JIT intrinsic methods and properties that are recognized by the current x64 JIT compiler. + // The implementation defined here is used in any circumstance where the JIT fails to recognize these members as intrinsic. + // The JIT recognizes these methods and properties by name and signature: if either is changed, the JIT will no longer recognize the member. + // Some methods declared here are not strictly intrinsic, but delegate to an intrinsic method. For example, only one overload of CopyTo() + + public partial struct Vector2 + { + /// + /// The X component of the vector. + /// + public Single X; + /// + /// The Y component of the vector. + /// + public Single Y; + + #region Constructors + /// + /// Constructs a vector whose elements are all the single specified value. + /// + /// The element to fill the vector with. + [JitIntrinsic] + public Vector2(Single value) : this(value, value) { } + + /// + /// Constructs a vector with the given individual elements. + /// + /// The X component. + /// The Y component. + [JitIntrinsic] + public Vector2(Single x, Single y) + { + X = x; + Y = y; + } + #endregion Constructors + + #region Public Instance Methods + /// + /// Copies the contents of the vector into the given array. + /// + /// The destination array. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyTo(Single[] array) + { + CopyTo(array, 0); + } + + /// + /// Copies the contents of the vector into the given array, starting from the given index. + /// + /// If array is null. + /// If array is multidimensional. + /// If index is greater than end of the array or index is less than zero. + /// If number of elements in source vector is greater than those available in destination array + /// or if there are not enough elements to copy. + public void CopyTo(Single[] array, int index) + { + if (array == null) + { + // Match the JIT's exception type here. For perf, a NullReference is thrown instead of an ArgumentNull. + throw new NullReferenceException(SR.GetString("Arg_NullArgumentNullRef")); + } + if (index < 0 || index >= array.Length) + { + throw new ArgumentOutOfRangeException(SR.GetString("Arg_ArgumentOutOfRangeException", index)); + } + if ((array.Length - index) < 2) + { + throw new ArgumentException(SR.GetString("Arg_ElementsInSourceIsGreaterThanDestination", index)); + } + array[index] = X; + array[index + 1] = Y; + } + + /// + /// Returns a boolean indicating whether the given Vector2 is equal to this Vector2 instance. + /// + /// The Vector2 to compare this instance to. + /// True if the other Vector2 is equal to this instance; False otherwise. + [JitIntrinsic] + public bool Equals(Vector2 other) + { + return this.X == other.X && this.Y == other.Y; + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the dot product of two vectors. + /// + /// The first vector. + /// The second vector. + /// The dot product. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Dot(Vector2 value1, Vector2 value2) + { + return value1.X * value2.X + + value1.Y * value2.Y; + } + + /// + /// Returns a vector whose elements are the minimum of each of the pairs of elements in the two source vectors. + /// + /// The first source vector. + /// The second source vector. + /// The minimized vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Min(Vector2 value1, Vector2 value2) + { + return new Vector2( + (value1.X < value2.X) ? value1.X : value2.X, + (value1.Y < value2.Y) ? value1.Y : value2.Y); + } + + /// + /// Returns a vector whose elements are the maximum of each of the pairs of elements in the two source vectors + /// + /// The first source vector + /// The second source vector + /// The maximized vector + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Max(Vector2 value1, Vector2 value2) + { + return new Vector2( + (value1.X > value2.X) ? value1.X : value2.X, + (value1.Y > value2.Y) ? value1.Y : value2.Y); + } + + /// + /// Returns a vector whose elements are the absolute values of each of the source vector's elements. + /// + /// The source vector. + /// The absolute value vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 Abs(Vector2 value) + { + return new Vector2(Math.Abs(value.X), Math.Abs(value.Y)); + } + + /// + /// Returns a vector whose elements are the square root of each of the source vector's elements. + /// + /// The source vector. + /// The square root vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 SquareRoot(Vector2 value) + { + return new Vector2((Single)Math.Sqrt(value.X), (Single)Math.Sqrt(value.Y)); + } + #endregion Public Static Methods + + #region Public Static Operators + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator +(Vector2 left, Vector2 right) + { + return new Vector2(left.X + right.X, left.Y + right.Y); + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator -(Vector2 left, Vector2 right) + { + return new Vector2(left.X - right.X, left.Y - right.Y); + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator *(Vector2 left, Vector2 right) + { + return new Vector2(left.X * right.X, left.Y * right.Y); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator *(Single left, Vector2 right) + { + return new Vector2(left, left) * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator *(Vector2 left, Single right) + { + return left * new Vector2(right, right); + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator /(Vector2 left, Vector2 right) + { + return new Vector2(left.X / right.X, left.Y / right.Y); + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator /(Vector2 value1, float value2) + { + float invDiv = 1.0f / value2; + return new Vector2( + value1.X * invDiv, + value1.Y * invDiv); + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector2 operator -(Vector2 value) + { + return Zero - value; + } + + /// + /// Returns a boolean indicating whether the two given vectors are equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are equal; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Vector2 left, Vector2 right) + { + return left.Equals(right); + } + + /// + /// Returns a boolean indicating whether the two given vectors are not equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are not equal; False if they are equal. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Vector2 left, Vector2 right) + { + return !(left == right); + } + #endregion Public Static Operators + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector3.cs b/external/referencesource/System.Numerics/System/Numerics/Vector3.cs new file mode 100644 index 0000000000..e6a5b067e7 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector3.cs @@ -0,0 +1,471 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Text; + +namespace System.Numerics +{ + /// + /// A structure encapsulating three single precision floating point values and provides hardware accelerated methods. + /// + public partial struct Vector3 : IEquatable, IFormattable + { + #region Public Static Properties + /// + /// Returns the vector (0,0,0). + /// + public static Vector3 Zero { get { return new Vector3(); } } + /// + /// Returns the vector (1,1,1). + /// + public static Vector3 One { get { return new Vector3(1.0f, 1.0f, 1.0f); } } + /// + /// Returns the vector (1,0,0). + /// + public static Vector3 UnitX { get { return new Vector3(1.0f, 0.0f, 0.0f); } } + /// + /// Returns the vector (0,1,0). + /// + public static Vector3 UnitY { get { return new Vector3(0.0f, 1.0f, 0.0f); } } + /// + /// Returns the vector (0,0,1). + /// + public static Vector3 UnitZ { get { return new Vector3(0.0f, 0.0f, 1.0f); } } + #endregion Public Static Properties + + #region Public Instance Methods + + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + int hash = this.X.GetHashCode(); + hash = HashCodeHelper.CombineHashCodes(hash, this.Y.GetHashCode()); + hash = HashCodeHelper.CombineHashCodes(hash, this.Z.GetHashCode()); + return hash; + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this Vector3 instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this Vector3; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override bool Equals(object obj) + { + if (!(obj is Vector3)) + return false; + return Equals((Vector3)obj); + } + + /// + /// Returns a String representing this Vector3 instance. + /// + /// The string representation. + public override string ToString() + { + return ToString("G", CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector3 instance, using the specified format to format individual elements. + /// + /// The format of individual elements. + /// The string representation. + public string ToString(string format) + { + return ToString(format, CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector3 instance, using the specified format to format individual elements + /// and the given IFormatProvider. + /// + /// The format of individual elements. + /// The format provider to use when formatting elements. + /// The string representation. + public string ToString(string format, IFormatProvider formatProvider) + { + StringBuilder sb = new StringBuilder(); + string separator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator; + sb.Append('<'); + sb.Append(((IFormattable)this.X).ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(((IFormattable)this.Y).ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(((IFormattable)this.Z).ToString(format, formatProvider)); + sb.Append('>'); + return sb.ToString(); + } + + /// + /// Returns the length of the vector. + /// + /// The vector's length. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Length() + { + if (Vector.IsHardwareAccelerated) + { + float ls = Vector3.Dot(this, this); + return (float)System.Math.Sqrt(ls); + } + else + { + float ls = X * X + Y * Y + Z * Z; + return (float)System.Math.Sqrt(ls); + } + } + + /// + /// Returns the length of the vector squared. This operation is cheaper than Length(). + /// + /// The vector's length squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float LengthSquared() + { + if (Vector.IsHardwareAccelerated) + { + return Vector3.Dot(this, this); + } + else + { + return X * X + Y * Y + Z * Z; + } + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the Euclidean distance between the two given points. + /// + /// The first point. + /// The second point. + /// The distance. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Distance(Vector3 value1, Vector3 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector3 difference = value1 - value2; + float ls = Vector3.Dot(difference, difference); + return (float)System.Math.Sqrt(ls); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + float dz = value1.Z - value2.Z; + + float ls = dx * dx + dy * dy + dz * dz; + + return (float)System.Math.Sqrt((double)ls); + } + } + + /// + /// Returns the Euclidean distance squared between the two given points. + /// + /// The first point. + /// The second point. + /// The distance squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float DistanceSquared(Vector3 value1, Vector3 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector3 difference = value1 - value2; + return Vector3.Dot(difference, difference); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + float dz = value1.Z - value2.Z; + + return dx * dx + dy * dy + dz * dz; + } + } + + /// + /// Returns a vector with the same direction as the given vector, but with a length of 1. + /// + /// The vector to normalize. + /// The normalized vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Normalize(Vector3 value) + { + if (Vector.IsHardwareAccelerated) + { + float length = value.Length(); + return value / length; + } + else + { + float ls = value.X * value.X + value.Y * value.Y + value.Z * value.Z; + float length = (float)System.Math.Sqrt(ls); + return new Vector3(value.X / length, value.Y / length, value.Z / length); + } + } + + /// + /// Computes the cross product of two vectors. + /// + /// The first vector. + /// The second vector. + /// The cross product. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Cross(Vector3 vector1, Vector3 vector2) + { + return new Vector3( + vector1.Y * vector2.Z - vector1.Z * vector2.Y, + vector1.Z * vector2.X - vector1.X * vector2.Z, + vector1.X * vector2.Y - vector1.Y * vector2.X); + } + + /// + /// Returns the reflection of a vector off a surface that has the specified normal. + /// + /// The source vector. + /// The normal of the surface being reflected off. + /// The reflected vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Reflect(Vector3 vector, Vector3 normal) + { + if (Vector.IsHardwareAccelerated) + { + float dot = Vector3.Dot(vector, normal); + Vector3 temp = normal * dot * 2f; + return vector - temp; + } + else + { + float dot = vector.X * normal.X + vector.Y * normal.Y + vector.Z * normal.Z; + float tempX = normal.X * dot * 2f; + float tempY = normal.Y * dot * 2f; + float tempZ = normal.Z * dot * 2f; + return new Vector3(vector.X - tempX, vector.Y - tempY, vector.Z - tempZ); + } + } + + /// + /// Restricts a vector between a min and max value. + /// + /// The source vector. + /// The minimum value. + /// The maximum value. + /// The restricted vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Clamp(Vector3 value1, Vector3 min, Vector3 max) + { + // This compare order is very important!!! + // We must follow HLSL behavior in the case user specified min value is bigger than max value. + + float x = value1.X; + x = (x > max.X) ? max.X : x; + x = (x < min.X) ? min.X : x; + + float y = value1.Y; + y = (y > max.Y) ? max.Y : y; + y = (y < min.Y) ? min.Y : y; + + float z = value1.Z; + z = (z > max.Z) ? max.Z : z; + z = (z < min.Z) ? min.Z : z; + + return new Vector3(x, y, z); + } + + /// + /// Linearly interpolates between two vectors based on the given weighting. + /// + /// The first source vector. + /// The second source vector. + /// Value between 0 and 1 indicating the weight of the second source vector. + /// The interpolated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Lerp(Vector3 value1, Vector3 value2, float amount) + { + if (Vector.IsHardwareAccelerated) + { + Vector3 firstInfluence = value1 * (1f - amount); + Vector3 secondInfluence = value2 * amount; + return firstInfluence + secondInfluence; + } + else + { + return new Vector3( + value1.X + (value2.X - value1.X) * amount, + value1.Y + (value2.Y - value1.Y) * amount, + value1.Z + (value2.Z - value1.Z) * amount); + } + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Transform(Vector3 position, Matrix4x4 matrix) + { + return new Vector3( + position.X * matrix.M11 + position.Y * matrix.M21 + position.Z * matrix.M31 + matrix.M41, + position.X * matrix.M12 + position.Y * matrix.M22 + position.Z * matrix.M32 + matrix.M42, + position.X * matrix.M13 + position.Y * matrix.M23 + position.Z * matrix.M33 + matrix.M43); + } + + /// + /// Transforms a vector normal by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 TransformNormal(Vector3 normal, Matrix4x4 matrix) + { + return new Vector3( + normal.X * matrix.M11 + normal.Y * matrix.M21 + normal.Z * matrix.M31, + normal.X * matrix.M12 + normal.Y * matrix.M22 + normal.Z * matrix.M32, + normal.X * matrix.M13 + normal.Y * matrix.M23 + normal.Z * matrix.M33); + } + + /// + /// Transforms a vector by the given Quaternion rotation value. + /// + /// The source vector to be rotated. + /// The rotation to apply. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Transform(Vector3 value, Quaternion rotation) + { + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + return new Vector3( + value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2) + value.Z * (xz2 + wy2), + value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2) + value.Z * (yz2 - wx2), + value.X * (xz2 - wy2) + value.Y * (yz2 + wx2) + value.Z * (1.0f - xx2 - yy2)); + } + #endregion Public Static Methods + + #region Public operator methods + + // All these methods should be inlined as they are implemented + // over JIT intrinsics + + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Add(Vector3 left, Vector3 right) + { + return left + right; + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Subtract(Vector3 left, Vector3 right) + { + return left - right; + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Multiply(Vector3 left, Vector3 right) + { + return left * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Multiply(Vector3 left, Single right) + { + return left * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Multiply(Single left, Vector3 right) + { + return left * right; + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Divide(Vector3 left, Vector3 right) + { + return left / right; + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Divide(Vector3 left, Single divisor) + { + return left / divisor; + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Negate(Vector3 value) + { + return -value; + } + #endregion Public operator methods + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector3_Intrinsics.cs b/external/referencesource/System.Numerics/System/Numerics/Vector3_Intrinsics.cs new file mode 100644 index 0000000000..628301fd81 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector3_Intrinsics.cs @@ -0,0 +1,322 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Runtime.CompilerServices; + +namespace System.Numerics +{ + // This file contains the definitions for all of the JIT intrinsic methods and properties that are recognized by the current x64 JIT compiler. + // The implementation defined here is used in any circumstance where the JIT fails to recognize these members as intrinsic. + // The JIT recognizes these methods and properties by name and signature: if either is changed, the JIT will no longer recognize the member. + // Some methods declared here are not strictly intrinsic, but delegate to an intrinsic method. For example, only one overload of CopyTo() + // is actually recognized by the JIT, but both are here for simplicity. + + public partial struct Vector3 + { + /// + /// The X component of the vector. + /// + public Single X; + /// + /// The Y component of the vector. + /// + public Single Y; + /// + /// The Z component of the vector. + /// + public Single Z; + + #region Constructors + /// + /// Constructs a vector whose elements are all the single specified value. + /// + /// The element to fill the vector with. + [JitIntrinsic] + public Vector3(Single value) : this(value, value, value) { } + + /// + /// Constructs a Vector3 from the given Vector2 and a third value. + /// + /// The Vector to extract X and Y components from. + /// The Z component. + public Vector3(Vector2 value, float z) : this(value.X, value.Y, z) { } + + /// + /// Constructs a vector with the given individual elements. + /// + /// The X component. + /// The Y component. + /// The Z component. + [JitIntrinsic] + public Vector3(Single x, Single y, Single z) + { + X = x; + Y = y; + Z = z; + } + #endregion Constructors + + #region Public Instance Methods + /// + /// Copies the contents of the vector into the given array. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyTo(Single[] array) + { + CopyTo(array, 0); + } + + /// + /// Copies the contents of the vector into the given array, starting from index. + /// + /// If array is null. + /// If array is multidimensional. + /// If index is greater than end of the array or index is less than zero. + /// If number of elements in source vector is greater than those available in destination array. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyTo(Single[] array, int index) + { + if (array == null) + { + // Match the JIT's exception type here. For perf, a NullReference is thrown instead of an ArgumentNull. + throw new NullReferenceException(SR.GetString("Arg_NullArgumentNullRef")); + } + if (index < 0 || index >= array.Length) + { + throw new ArgumentOutOfRangeException(SR.GetString("Arg_ArgumentOutOfRangeException", index)); + } + if ((array.Length - index) < 3) + { + throw new ArgumentException(SR.GetString("Arg_ElementsInSourceIsGreaterThanDestination", index)); + } + array[index] = X; + array[index + 1] = Y; + array[index + 2] = Z; + } + + /// + /// Returns a boolean indicating whether the given Vector3 is equal to this Vector3 instance. + /// + /// The Vector3 to compare this instance to. + /// True if the other Vector3 is equal to this instance; False otherwise. + [JitIntrinsic] + public bool Equals(Vector3 other) + { + return X == other.X && + Y == other.Y && + Z == other.Z; + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the dot product of two vectors. + /// + /// The first vector. + /// The second vector. + /// The dot product. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Dot(Vector3 vector1, Vector3 vector2) + { + return vector1.X * vector2.X + + vector1.Y * vector2.Y + + vector1.Z * vector2.Z; + } + + /// + /// Returns a vector whose elements are the minimum of each of the pairs of elements in the two source vectors. + /// + /// The first source vector. + /// The second source vector. + /// The minimized vector. + [JitIntrinsic] + public static Vector3 Min(Vector3 value1, Vector3 value2) + { + return new Vector3( + (value1.X < value2.X) ? value1.X : value2.X, + (value1.Y < value2.Y) ? value1.Y : value2.Y, + (value1.Z < value2.Z) ? value1.Z : value2.Z); + } + + /// + /// Returns a vector whose elements are the maximum of each of the pairs of elements in the two source vectors. + /// + /// The first source vector. + /// The second source vector. + /// The maximized vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Max(Vector3 value1, Vector3 value2) + { + return new Vector3( + (value1.X > value2.X) ? value1.X : value2.X, + (value1.Y > value2.Y) ? value1.Y : value2.Y, + (value1.Z > value2.Z) ? value1.Z : value2.Z); + } + + /// + /// Returns a vector whose elements are the absolute values of each of the source vector's elements. + /// + /// The source vector. + /// The absolute value vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 Abs(Vector3 value) + { + return new Vector3(Math.Abs(value.X), Math.Abs(value.Y), Math.Abs(value.Z)); + } + + /// + /// Returns a vector whose elements are the square root of each of the source vector's elements. + /// + /// The source vector. + /// The square root vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 SquareRoot(Vector3 value) + { + return new Vector3((Single)Math.Sqrt(value.X), (Single)Math.Sqrt(value.Y), (Single)Math.Sqrt(value.Z)); + } + #endregion Public Static Methods + + #region Public Static Operators + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator +(Vector3 left, Vector3 right) + { + return new Vector3(left.X + right.X, left.Y + right.Y, left.Z + right.Z); + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator -(Vector3 left, Vector3 right) + { + return new Vector3(left.X - right.X, left.Y - right.Y, left.Z - right.Z); + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator *(Vector3 left, Vector3 right) + { + return new Vector3(left.X * right.X, left.Y * right.Y, left.Z * right.Z); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator *(Vector3 left, Single right) + { + return left * new Vector3(right); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator *(Single left, Vector3 right) + { + return new Vector3(left) * right; + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator /(Vector3 left, Vector3 right) + { + return new Vector3(left.X / right.X, left.Y / right.Y, left.Z / right.Z); + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator /(Vector3 value1, float value2) + { + float invDiv = 1.0f / value2; + + return new Vector3( + value1.X * invDiv, + value1.Y * invDiv, + value1.Z * invDiv); + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector3 operator -(Vector3 value) + { + return Zero - value; + } + + /// + /// Returns a boolean indicating whether the two given vectors are equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are equal; False otherwise. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Vector3 left, Vector3 right) + { + return (left.X == right.X && + left.Y == right.Y && + left.Z == right.Z); + } + + /// + /// Returns a boolean indicating whether the two given vectors are not equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are not equal; False if they are equal. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Vector3 left, Vector3 right) + { + return (left.X != right.X || + left.Y != right.Y || + left.Z != right.Z); + } + #endregion Public Static Operators + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector4.cs b/external/referencesource/System.Numerics/System/Numerics/Vector4.cs new file mode 100644 index 0000000000..a2893b3bc2 --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector4.cs @@ -0,0 +1,520 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Globalization; +using System.Runtime.CompilerServices; +using System.Text; + +namespace System.Numerics +{ + /// + /// A structure encapsulating four single precision floating point values and provides hardware accelerated methods. + /// + public partial struct Vector4 : IEquatable, IFormattable + { + #region Public Static Properties + /// + /// Returns the vector (0,0,0,0). + /// + public static Vector4 Zero { get { return new Vector4(); } } + /// + /// Returns the vector (1,1,1,1). + /// + public static Vector4 One { get { return new Vector4(1.0f, 1.0f, 1.0f, 1.0f); } } + /// + /// Returns the vector (1,0,0,0). + /// + public static Vector4 UnitX { get { return new Vector4(1.0f, 0.0f, 0.0f, 0.0f); } } + /// + /// Returns the vector (0,1,0,0). + /// + public static Vector4 UnitY { get { return new Vector4(0.0f, 1.0f, 0.0f, 0.0f); } } + /// + /// Returns the vector (0,0,1,0). + /// + public static Vector4 UnitZ { get { return new Vector4(0.0f, 0.0f, 1.0f, 0.0f); } } + /// + /// Returns the vector (0,0,0,1). + /// + public static Vector4 UnitW { get { return new Vector4(0.0f, 0.0f, 0.0f, 1.0f); } } + #endregion Public Static Properties + + #region Public instance methods + /// + /// Returns the hash code for this instance. + /// + /// The hash code. + public override int GetHashCode() + { + int hash = this.X.GetHashCode(); + hash = HashCodeHelper.CombineHashCodes(hash, this.Y.GetHashCode()); + hash = HashCodeHelper.CombineHashCodes(hash, this.Z.GetHashCode()); + hash = HashCodeHelper.CombineHashCodes(hash, this.W.GetHashCode()); + return hash; + } + + /// + /// Returns a boolean indicating whether the given Object is equal to this Vector4 instance. + /// + /// The Object to compare against. + /// True if the Object is equal to this Vector4; False otherwise. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public override bool Equals(object obj) + { + if (!(obj is Vector4)) + return false; + return Equals((Vector4)obj); + } + + /// + /// Returns a String representing this Vector4 instance. + /// + /// The string representation. + public override string ToString() + { + return ToString("G", CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector4 instance, using the specified format to format individual elements. + /// + /// The format of individual elements. + /// The string representation. + public string ToString(string format) + { + return ToString(format, CultureInfo.CurrentCulture); + } + + /// + /// Returns a String representing this Vector4 instance, using the specified format to format individual elements + /// and the given IFormatProvider. + /// + /// The format of individual elements. + /// The format provider to use when formatting elements. + /// The string representation. + public string ToString(string format, IFormatProvider formatProvider) + { + StringBuilder sb = new StringBuilder(); + string separator = NumberFormatInfo.GetInstance(formatProvider).NumberGroupSeparator; + sb.Append('<'); + sb.Append(this.X.ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(this.Y.ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(this.Z.ToString(format, formatProvider)); + sb.Append(separator); + sb.Append(' '); + sb.Append(this.W.ToString(format, formatProvider)); + sb.Append('>'); + return sb.ToString(); + } + + /// + /// Returns the length of the vector. This operation is cheaper than Length(). + /// + /// The vector's length. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float Length() + { + if (Vector.IsHardwareAccelerated) + { + float ls = Vector4.Dot(this, this); + return (float)System.Math.Sqrt(ls); + } + else + { + float ls = X * X + Y * Y + Z * Z + W * W; + + return (float)Math.Sqrt((double)ls); + } + } + + /// + /// Returns the length of the vector squared. + /// + /// The vector's length squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public float LengthSquared() + { + if (Vector.IsHardwareAccelerated) + { + return Vector4.Dot(this, this); + } + else + { + return X * X + Y * Y + Z * Z + W * W; + } + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the Euclidean distance between the two given points. + /// + /// The first point. + /// The second point. + /// The distance. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Distance(Vector4 value1, Vector4 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector4 difference = value1 - value2; + float ls = Vector4.Dot(difference, difference); + return (float)System.Math.Sqrt(ls); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + float dz = value1.Z - value2.Z; + float dw = value1.W - value2.W; + + float ls = dx * dx + dy * dy + dz * dz + dw * dw; + + return (float)Math.Sqrt((double)ls); + } + } + + /// + /// Returns the Euclidean distance squared between the two given points. + /// + /// The first point. + /// The second point. + /// The distance squared. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float DistanceSquared(Vector4 value1, Vector4 value2) + { + if (Vector.IsHardwareAccelerated) + { + Vector4 difference = value1 - value2; + return Vector4.Dot(difference, difference); + } + else + { + float dx = value1.X - value2.X; + float dy = value1.Y - value2.Y; + float dz = value1.Z - value2.Z; + float dw = value1.W - value2.W; + + return dx * dx + dy * dy + dz * dz + dw * dw; + } + } + + /// + /// Returns a vector with the same direction as the given vector, but with a length of 1. + /// + /// The vector to normalize. + /// The normalized vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Normalize(Vector4 vector) + { + if (Vector.IsHardwareAccelerated) + { + float length = vector.Length(); + return vector / length; + } + else + { + float ls = vector.X * vector.X + vector.Y * vector.Y + vector.Z * vector.Z + vector.W * vector.W; + float invNorm = 1.0f / (float)Math.Sqrt((double)ls); + + return new Vector4( + vector.X * invNorm, + vector.Y * invNorm, + vector.Z * invNorm, + vector.W * invNorm); + } + } + + /// + /// Restricts a vector between a min and max value. + /// + /// The source vector. + /// The minimum value. + /// The maximum value. + /// The restricted vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Clamp(Vector4 value1, Vector4 min, Vector4 max) + { + // This compare order is very important!!! + // We must follow HLSL behavior in the case user specified min value is bigger than max value. + + float x = value1.X; + x = (x > max.X) ? max.X : x; + x = (x < min.X) ? min.X : x; + + float y = value1.Y; + y = (y > max.Y) ? max.Y : y; + y = (y < min.Y) ? min.Y : y; + + float z = value1.Z; + z = (z > max.Z) ? max.Z : z; + z = (z < min.Z) ? min.Z : z; + + float w = value1.W; + w = (w > max.W) ? max.W : w; + w = (w < min.W) ? min.W : w; + + return new Vector4(x, y, z, w); + } + + /// + /// Linearly interpolates between two vectors based on the given weighting. + /// + /// The first source vector. + /// The second source vector. + /// Value between 0 and 1 indicating the weight of the second source vector. + /// The interpolated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Lerp(Vector4 value1, Vector4 value2, float amount) + { + return new Vector4( + value1.X + (value2.X - value1.X) * amount, + value1.Y + (value2.Y - value1.Y) * amount, + value1.Z + (value2.Z - value1.Z) * amount, + value1.W + (value2.W - value1.W) * amount); + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector2 position, Matrix4x4 matrix) + { + return new Vector4( + position.X * matrix.M11 + position.Y * matrix.M21 + matrix.M41, + position.X * matrix.M12 + position.Y * matrix.M22 + matrix.M42, + position.X * matrix.M13 + position.Y * matrix.M23 + matrix.M43, + position.X * matrix.M14 + position.Y * matrix.M24 + matrix.M44); + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector3 position, Matrix4x4 matrix) + { + return new Vector4( + position.X * matrix.M11 + position.Y * matrix.M21 + position.Z * matrix.M31 + matrix.M41, + position.X * matrix.M12 + position.Y * matrix.M22 + position.Z * matrix.M32 + matrix.M42, + position.X * matrix.M13 + position.Y * matrix.M23 + position.Z * matrix.M33 + matrix.M43, + position.X * matrix.M14 + position.Y * matrix.M24 + position.Z * matrix.M34 + matrix.M44); + } + + /// + /// Transforms a vector by the given matrix. + /// + /// The source vector. + /// The transformation matrix. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector4 vector, Matrix4x4 matrix) + { + return new Vector4( + vector.X * matrix.M11 + vector.Y * matrix.M21 + vector.Z * matrix.M31 + vector.W * matrix.M41, + vector.X * matrix.M12 + vector.Y * matrix.M22 + vector.Z * matrix.M32 + vector.W * matrix.M42, + vector.X * matrix.M13 + vector.Y * matrix.M23 + vector.Z * matrix.M33 + vector.W * matrix.M43, + vector.X * matrix.M14 + vector.Y * matrix.M24 + vector.Z * matrix.M34 + vector.W * matrix.M44); + } + + /// + /// Transforms a vector by the given Quaternion rotation value. + /// + /// The source vector to be rotated. + /// The rotation to apply. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector2 value, Quaternion rotation) + { + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + return new Vector4( + value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2), + value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2), + value.X * (xz2 - wy2) + value.Y * (yz2 + wx2), + 1.0f); + } + + /// + /// Transforms a vector by the given Quaternion rotation value. + /// + /// The source vector to be rotated. + /// The rotation to apply. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector3 value, Quaternion rotation) + { + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + return new Vector4( + value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2) + value.Z * (xz2 + wy2), + value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2) + value.Z * (yz2 - wx2), + value.X * (xz2 - wy2) + value.Y * (yz2 + wx2) + value.Z * (1.0f - xx2 - yy2), + 1.0f); + } + + /// + /// Transforms a vector by the given Quaternion rotation value. + /// + /// The source vector to be rotated. + /// The rotation to apply. + /// The transformed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Transform(Vector4 value, Quaternion rotation) + { + float x2 = rotation.X + rotation.X; + float y2 = rotation.Y + rotation.Y; + float z2 = rotation.Z + rotation.Z; + + float wx2 = rotation.W * x2; + float wy2 = rotation.W * y2; + float wz2 = rotation.W * z2; + float xx2 = rotation.X * x2; + float xy2 = rotation.X * y2; + float xz2 = rotation.X * z2; + float yy2 = rotation.Y * y2; + float yz2 = rotation.Y * z2; + float zz2 = rotation.Z * z2; + + return new Vector4( + value.X * (1.0f - yy2 - zz2) + value.Y * (xy2 - wz2) + value.Z * (xz2 + wy2), + value.X * (xy2 + wz2) + value.Y * (1.0f - xx2 - zz2) + value.Z * (yz2 - wx2), + value.X * (xz2 - wy2) + value.Y * (yz2 + wx2) + value.Z * (1.0f - xx2 - yy2), + value.W); + } + #endregion Public Static Methods + + #region Public operator methods + // All these methods should be inlines as they are implemented + // over JIT intrinsics + + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Add(Vector4 left, Vector4 right) + { + return left + right; + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Subtract(Vector4 left, Vector4 right) + { + return left - right; + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Multiply(Vector4 left, Vector4 right) + { + return left * right; + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Multiply(Vector4 left, Single right) + { + return left * new Vector4(right, right, right, right); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Multiply(Single left, Vector4 right) + { + return new Vector4(left, left, left, left) * right; + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Divide(Vector4 left, Vector4 right) + { + return left / right; + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Divide(Vector4 left, Single divisor) + { + return left / divisor; + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Negate(Vector4 value) + { + return -value; + } + #endregion Public operator methods + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector4_Intrinsics.cs b/external/referencesource/System.Numerics/System/Numerics/Vector4_Intrinsics.cs new file mode 100644 index 0000000000..97ca8021fc --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector4_Intrinsics.cs @@ -0,0 +1,353 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Runtime.CompilerServices; + +namespace System.Numerics +{ + // This file contains the definitions for all of the JIT intrinsic methods and properties that are recognized by the current x64 JIT compiler. + // The implementation defined here is used in any circumstance where the JIT fails to recognize these members as intrinsic. + // The JIT recognizes these methods and properties by name and signature: if either is changed, the JIT will no longer recognize the member. + // Some methods declared here are not strictly intrinsic, but delegate to an intrinsic method. For example, only one overload of CopyTo() + + public partial struct Vector4 + { + /// + /// The X component of the vector. + /// + public Single X; + /// + /// The Y component of the vector. + /// + public Single Y; + /// + /// The Z component of the vector. + /// + public Single Z; + /// + /// The W component of the vector. + /// + public Single W; + + #region Constructors + + /// + /// Constructs a vector whose elements are all the single specified value. + /// + /// The element to fill the vector with. + [JitIntrinsic] + public Vector4(Single value) + : this(value, value, value, value) + { + } + /// + /// Constructs a vector with the given individual elements. + /// + /// W component. + /// X component. + /// Y component. + /// Z component. + [JitIntrinsic] + public Vector4(Single x, Single y, Single z, Single w) + { + W = w; + X = x; + Y = y; + Z = z; + } + + /// + /// Constructs a Vector4 from the given Vector2 and a Z and W component. + /// + /// The vector to use as the X and Y components. + /// The Z component. + /// The W component. + public Vector4(Vector2 value, Single z, Single w) + { + X = value.X; + Y = value.Y; + Z = z; + W = w; + } + + /// + /// Constructs a Vector4 from the given Vector3 and a W component. + /// + /// The vector to use as the X, Y, and Z components. + /// The W component. + public Vector4(Vector3 value, Single w) + { + X = value.X; + Y = value.Y; + Z = value.Z; + W = w; + } + #endregion Constructors + + #region Public Instance Methods + /// + /// Copies the contents of the vector into the given array. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyTo(Single[] array) + { + CopyTo(array, 0); + } + + /// + /// Copies the contents of the vector into the given array, starting from index. + /// + /// If array is null. + /// If array is multidimensional. + /// If index is greater than end of the array or index is less than zero. + /// If number of elements in source vector is greater than those available in destination array. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void CopyTo(Single[] array, int index) + { + if (array == null) + { + // Match the JIT's exception type here. For perf, a NullReference is thrown instead of an ArgumentNull. + throw new NullReferenceException(SR.GetString("Arg_NullArgumentNullRef")); + } + if (index < 0 || index >= array.Length) + { + throw new ArgumentOutOfRangeException(SR.GetString("Arg_ArgumentOutOfRangeException", index)); + } + if ((array.Length - index) < 4) + { + throw new ArgumentException(SR.GetString("Arg_ElementsInSourceIsGreaterThanDestination", index)); + } + array[index] = X; + array[index + 1] = Y; + array[index + 2] = Z; + array[index + 3] = W; + } + + /// + /// Returns a boolean indicating whether the given Vector4 is equal to this Vector4 instance. + /// + /// The Vector4 to compare this instance to. + /// True if the other Vector4 is equal to this instance; False otherwise. + [JitIntrinsic] + public bool Equals(Vector4 other) + { + return this.X == other.X + && this.Y == other.Y + && this.Z == other.Z + && this.W == other.W; + } + #endregion Public Instance Methods + + #region Public Static Methods + /// + /// Returns the dot product of two vectors. + /// + /// The first vector. + /// The second vector. + /// The dot product. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Dot(Vector4 vector1, Vector4 vector2) + { + return vector1.X * vector2.X + + vector1.Y * vector2.Y + + vector1.Z * vector2.Z + + vector1.W * vector2.W; + } + + /// + /// Returns a vector whose elements are the minimum of each of the pairs of elements in the two source vectors. + /// + /// The first source vector. + /// The second source vector. + /// The minimized vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Min(Vector4 value1, Vector4 value2) + { + return new Vector4( + (value1.X < value2.X) ? value1.X : value2.X, + (value1.Y < value2.Y) ? value1.Y : value2.Y, + (value1.Z < value2.Z) ? value1.Z : value2.Z, + (value1.W < value2.W) ? value1.W : value2.W); + } + + /// + /// Returns a vector whose elements are the maximum of each of the pairs of elements in the two source vectors. + /// + /// The first source vector. + /// The second source vector. + /// The maximized vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Max(Vector4 value1, Vector4 value2) + { + return new Vector4( + (value1.X > value2.X) ? value1.X : value2.X, + (value1.Y > value2.Y) ? value1.Y : value2.Y, + (value1.Z > value2.Z) ? value1.Z : value2.Z, + (value1.W > value2.W) ? value1.W : value2.W); + } + + /// + /// Returns a vector whose elements are the absolute values of each of the source vector's elements. + /// + /// The source vector. + /// The absolute value vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 Abs(Vector4 value) + { + return new Vector4(Math.Abs(value.X), Math.Abs(value.Y), Math.Abs(value.Z), Math.Abs(value.W)); + } + + /// + /// Returns a vector whose elements are the square root of each of the source vector's elements. + /// + /// The source vector. + /// The square root vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 SquareRoot(Vector4 value) + { + return new Vector4((Single)Math.Sqrt(value.X), (Single)Math.Sqrt(value.Y), (Single)Math.Sqrt(value.Z), (Single)Math.Sqrt(value.W)); + } + #endregion Public Static Methods + + #region Public static operators + /// + /// Adds two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The summed vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator +(Vector4 left, Vector4 right) + { + return new Vector4(left.X + right.X, left.Y + right.Y, left.Z + right.Z, left.W + right.W); + } + + /// + /// Subtracts the second vector from the first. + /// + /// The first source vector. + /// The second source vector. + /// The difference vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator -(Vector4 left, Vector4 right) + { + return new Vector4(left.X - right.X, left.Y - right.Y, left.Z - right.Z, left.W - right.W); + } + + /// + /// Multiplies two vectors together. + /// + /// The first source vector. + /// The second source vector. + /// The product vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator *(Vector4 left, Vector4 right) + { + return new Vector4(left.X * right.X, left.Y * right.Y, left.Z * right.Z, left.W * right.W); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator *(Vector4 left, Single right) + { + return left * new Vector4(right); + } + + /// + /// Multiplies a vector by the given scalar. + /// + /// The scalar value. + /// The source vector. + /// The scaled vector. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator *(Single left, Vector4 right) + { + return new Vector4(left) * right; + } + + /// + /// Divides the first vector by the second. + /// + /// The first source vector. + /// The second source vector. + /// The vector resulting from the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator /(Vector4 left, Vector4 right) + { + return new Vector4(left.X / right.X, left.Y / right.Y, left.Z / right.Z, left.W / right.W); + } + + /// + /// Divides the vector by the given scalar. + /// + /// The source vector. + /// The scalar value. + /// The result of the division. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator /(Vector4 value1, float value2) + { + float invDiv = 1.0f / value2; + + return new Vector4( + value1.X * invDiv, + value1.Y * invDiv, + value1.Z * invDiv, + value1.W * invDiv); + } + + /// + /// Negates a given vector. + /// + /// The source vector. + /// The negated vector. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Vector4 operator -(Vector4 value) + { + return Zero - value; + } + + /// + /// Returns a boolean indicating whether the two given vectors are equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are equal; False otherwise. + [JitIntrinsic] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator ==(Vector4 left, Vector4 right) + { + return left.Equals(right); + } + + /// + /// Returns a boolean indicating whether the two given vectors are not equal. + /// + /// The first vector to compare. + /// The second vector to compare. + /// True if the vectors are not equal; False if they are equal. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool operator !=(Vector4 left, Vector4 right) + { + return !(left == right); + } + #endregion Public static operators + } +} diff --git a/external/referencesource/System.Numerics/System/Numerics/Vector_Operations.cs b/external/referencesource/System.Numerics/System/Numerics/Vector_Operations.cs new file mode 100644 index 0000000000..69215a062f --- /dev/null +++ b/external/referencesource/System.Numerics/System/Numerics/Vector_Operations.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.Runtime.CompilerServices; + +namespace System.Numerics +{ + /// + /// Contains various methods useful for creating, manipulating, combining, and converting generic vectors with one another. + /// + internal static class Vector + { + // Every operation must either be a JIT intrinsic or implemented over a JIT intrinsic + // as a thin wrapper + // Operations implemented over a JIT intrinsic should be inlined + // Methods that do not have a type parameter are recognized as intrinsics + /// + /// Returns whether or not vector operations are subject to hardware acceleration through JIT intrinsic support. + /// + [JitIntrinsic] + public static bool IsHardwareAccelerated + { + get + { + return false; + } + } + } +} diff --git a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCache.cs b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCache.cs index f9030cc409..816319755c 100644 --- a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCache.cs +++ b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCache.cs @@ -466,6 +466,9 @@ namespace System.Runtime.Caching { } public long Trim(int percent) { + if (percent > 100) { + percent = 100; + } long trimmed = 0; if (_disposed == 0) { foreach (MemoryCacheStore store in _stores) { diff --git a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheEntry.cs b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheEntry.cs index 931bcee888..de32f8fcd8 100644 --- a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheEntry.cs +++ b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheEntry.cs @@ -230,7 +230,7 @@ namespace System.Runtime.Caching { internal void RemoveDependent(MemoryCacheEntryChangeMonitor dependent) { lock (this) { - if (_fields._dependents != null) { + if (_fields != null && _fields._dependents != null) { _fields._dependents.Remove(dependent); } } diff --git a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheStore.cs b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheStore.cs index 0ff86ea9ce..45128a44bc 100644 --- a/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheStore.cs +++ b/external/referencesource/System.Runtime.Caching/System/Caching/MemoryCacheStore.cs @@ -14,7 +14,6 @@ namespace System.Runtime.Caching { internal sealed class MemoryCacheStore : IDisposable { const int INSERT_BLOCK_WAIT = 10000; const int MAX_COUNT = Int32.MaxValue / 2; - const int MIN_COUNT = 10; private Hashtable _entries; private Object _entriesLock; @@ -140,7 +139,7 @@ namespace System.Runtime.Caching { if (_disposed == 0) { existingEntry = _entries[key] as MemoryCacheEntry; // has it expired? - if (existingEntry != null && entry.UtcAbsExp <= DateTime.UtcNow) { + if (existingEntry != null && existingEntry.UtcAbsExp <= DateTime.UtcNow) { toBeReleasedEntry = existingEntry; toBeReleasedEntry.State = EntryState.RemovingFromCache; existingEntry = null; @@ -300,21 +299,18 @@ namespace System.Runtime.Caching { } internal long TrimInternal(int percent) { + Dbg.Assert(percent <= 100, "percent <= 100"); + int count = Count; int toTrim = 0; // do we need to drop a percentage of entries? if (percent > 0) { - toTrim = (int)(((long)count * (long)percent) / 100L); + toTrim = (int)Math.Ceiling(((long)count * (long)percent) / 100D); // would this leave us above MAX_COUNT? int minTrim = count - MAX_COUNT; if (toTrim < minTrim) { toTrim = minTrim; } - // would this put us below MIN_COUNT? - int maxTrim = count - MIN_COUNT; - if (toTrim > maxTrim) { - toTrim = maxTrim; - } } // do we need to trim? if (toTrim <= 0 || _disposed == 1) { diff --git a/external/referencesource/System.Runtime.DurableInstancing/AssemblyInfo.cs b/external/referencesource/System.Runtime.DurableInstancing/AssemblyInfo.cs index 03a00d90c1..028caa7645 100644 --- a/external/referencesource/System.Runtime.DurableInstancing/AssemblyInfo.cs +++ b/external/referencesource/System.Runtime.DurableInstancing/AssemblyInfo.cs @@ -33,7 +33,7 @@ using System.Security.Permissions; [assembly: InternalsVisibleTo("System.ServiceModel.Activation, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("System.ServiceModel.Routing, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -// +// TODO, 62799, fix this to be System.Runtime.Friend [assembly: InternalsVisibleTo("CDF.CIT.Scenarios.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("Microsoft.CDF.Test.Persistence, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] // Need to provide InternalsVisibleTo System.Runtime.Serialization to allow serialization of internal DataContracts/DataMembers in partial trust. diff --git a/external/referencesource/System.Runtime.DurableInstancing/System/Runtime/ICancelable.cs b/external/referencesource/System.Runtime.DurableInstancing/System/Runtime/ICancelable.cs index 09ba59b65b..e9a543a6ad 100644 --- a/external/referencesource/System.Runtime.DurableInstancing/System/Runtime/ICancelable.cs +++ b/external/referencesource/System.Runtime.DurableInstancing/System/Runtime/ICancelable.cs @@ -10,4 +10,4 @@ namespace System.Runtime { void Cancel(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/ClassDataContract.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/ClassDataContract.cs index 6e80e10716..9ea613ebc3 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/ClassDataContract.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/ClassDataContract.cs @@ -820,7 +820,7 @@ namespace System.Runtime.Serialization if (BaseContract != null) { - if (hasDataContractAttribute && dataContractAttribute.IsReferenceSetExplicit) + if (hasDataContractAttribute && dataContractAttribute.IsReferenceSetExplicitly) { bool baseIsReference = this.BaseContract.IsReference; if ((baseIsReference && !dataContractAttribute.IsReference) || @@ -920,7 +920,7 @@ namespace System.Runtime.Serialization ThrowInvalidDataContractException(SR.GetString(SR.InvalidMember, DataContract.GetClrTypeFullName(type), member.Name)); DataMemberAttribute memberAttribute = (DataMemberAttribute)memberAttributes[0]; - if (memberAttribute.IsNameSetExplicit) + if (memberAttribute.IsNameSetExplicitly) { if (memberAttribute.Name == null || memberAttribute.Name.Length == 0) ThrowInvalidDataContractException(SR.GetString(SR.InvalidDataMemberName, member.Name, DataContract.GetClrTypeFullName(type))); diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContract.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContract.cs index 75092529f3..f26a107c43 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContract.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContract.cs @@ -539,14 +539,14 @@ namespace System.Runtime.Serialization string itemName = null, keyName = null, valueName = null; if (collectionContractAttribute != null) { - if (collectionContractAttribute.IsItemNameSetExplicit) + if (collectionContractAttribute.IsItemNameSetExplicitly) { if (collectionContractAttribute.ItemName == null || collectionContractAttribute.ItemName.Length == 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.InvalidCollectionContractItemName, DataContract.GetClrTypeFullName(UnderlyingType)))); itemName = DataContract.EncodeLocalName(collectionContractAttribute.ItemName); itemNameSetExplicit = true; } - if (collectionContractAttribute.IsKeyNameSetExplicit) + if (collectionContractAttribute.IsKeyNameSetExplicitly) { if (collectionContractAttribute.KeyName == null || collectionContractAttribute.KeyName.Length == 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.InvalidCollectionContractKeyName, DataContract.GetClrTypeFullName(UnderlyingType)))); @@ -554,7 +554,7 @@ namespace System.Runtime.Serialization throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.InvalidCollectionContractKeyNoDictionary, DataContract.GetClrTypeFullName(UnderlyingType), collectionContractAttribute.KeyName))); keyName = DataContract.EncodeLocalName(collectionContractAttribute.KeyName); } - if (collectionContractAttribute.IsValueNameSetExplicit) + if (collectionContractAttribute.IsValueNameSetExplicitly) { if (collectionContractAttribute.ValueName == null || collectionContractAttribute.ValueName.Length == 0) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.GetString(SR.InvalidCollectionContractValueName, DataContract.GetClrTypeFullName(UnderlyingType)))); diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContractAttribute.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContractAttribute.cs index f7ed6f2910..6fee2df607 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContractAttribute.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/CollectionDataContractAttribute.cs @@ -13,12 +13,12 @@ namespace System.Runtime.Serialization string keyName; string valueName; bool isReference; - bool isNameSetExplicit; - bool isNamespaceSetExplicit; - bool isReferenceSetExplicit; - bool isItemNameSetExplicit; - bool isKeyNameSetExplicit; - bool isValueNameSetExplicit; + bool isNameSetExplicitly; + bool isNamespaceSetExplicitly; + bool isReferenceSetExplicitly; + bool isItemNameSetExplicitly; + bool isKeyNameSetExplicitly; + bool isValueNameSetExplicitly; public CollectionDataContractAttribute() { @@ -30,13 +30,13 @@ namespace System.Runtime.Serialization set { ns = value; - isNamespaceSetExplicit = true; + isNamespaceSetExplicitly = true; } } - internal bool IsNamespaceSetExplicit + public bool IsNamespaceSetExplicitly { - get { return isNamespaceSetExplicit; } + get { return isNamespaceSetExplicitly; } } public string Name @@ -45,13 +45,13 @@ namespace System.Runtime.Serialization set { name = value; - isNameSetExplicit = true; + isNameSetExplicitly = true; } } - internal bool IsNameSetExplicit + public bool IsNameSetExplicitly { - get { return isNameSetExplicit; } + get { return isNameSetExplicitly; } } public string ItemName @@ -60,13 +60,13 @@ namespace System.Runtime.Serialization set { itemName = value; - isItemNameSetExplicit = true; + isItemNameSetExplicitly = true; } } - internal bool IsItemNameSetExplicit + public bool IsItemNameSetExplicitly { - get { return isItemNameSetExplicit; } + get { return isItemNameSetExplicitly; } } public string KeyName @@ -75,7 +75,7 @@ namespace System.Runtime.Serialization set { keyName = value; - isKeyNameSetExplicit = true; + isKeyNameSetExplicitly = true; } } @@ -85,18 +85,18 @@ namespace System.Runtime.Serialization set { isReference = value; - isReferenceSetExplicit = true; + isReferenceSetExplicitly = true; } } - internal bool IsReferenceSetExplicit + public bool IsReferenceSetExplicitly { - get { return isReferenceSetExplicit; } + get { return isReferenceSetExplicitly; } } - internal bool IsKeyNameSetExplicit + public bool IsKeyNameSetExplicitly { - get { return isKeyNameSetExplicit; } + get { return isKeyNameSetExplicitly; } } public string ValueName @@ -105,13 +105,13 @@ namespace System.Runtime.Serialization set { valueName = value; - isValueNameSetExplicit = true; + isValueNameSetExplicitly = true; } } - internal bool IsValueNameSetExplicit + public bool IsValueNameSetExplicitly { - get { return isValueNameSetExplicit; } + get { return isValueNameSetExplicitly; } } } diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContract.cs.REMOVED.git-id b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContract.cs.REMOVED.git-id index 1b3047f2d0..8f3536459d 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContract.cs.REMOVED.git-id +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContract.cs.REMOVED.git-id @@ -1 +1 @@ -68d510c66635a8bc1d30f6dcb6c0c9ab53137deb \ No newline at end of file +c63c76f91537ad23db1f24fb585d429c313200cd \ No newline at end of file diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractAttribute.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractAttribute.cs index cafac3b78c..8a555df1a6 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractAttribute.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractAttribute.cs @@ -9,10 +9,10 @@ namespace System.Runtime.Serialization { string name; string ns; - bool isNameSetExplicit; - bool isNamespaceSetExplicit; + bool isNameSetExplicitly; + bool isNamespaceSetExplicitly; bool isReference; - bool isReferenceSetExplicit; + bool isReferenceSetExplicitly; public DataContractAttribute() { @@ -24,13 +24,13 @@ namespace System.Runtime.Serialization set { isReference = value; - isReferenceSetExplicit = true; + isReferenceSetExplicitly = true; } } - internal bool IsReferenceSetExplicit + public bool IsReferenceSetExplicitly { - get { return isReferenceSetExplicit; } + get { return isReferenceSetExplicitly; } } public string Namespace @@ -39,13 +39,13 @@ namespace System.Runtime.Serialization set { ns = value; - isNamespaceSetExplicit = true; + isNamespaceSetExplicitly = true; } } - internal bool IsNamespaceSetExplicit + public bool IsNamespaceSetExplicitly { - get { return isNamespaceSetExplicit; } + get { return isNamespaceSetExplicitly; } } public string Name @@ -54,13 +54,13 @@ namespace System.Runtime.Serialization set { name = value; - isNameSetExplicit = true; + isNameSetExplicitly = true; } } - internal bool IsNameSetExplicit + public bool IsNameSetExplicitly { - get { return isNameSetExplicit; } + get { return isNameSetExplicitly; } } } diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractSet.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractSet.cs index 7c541c25dd..ca40aeefd6 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractSet.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataContractSet.cs @@ -15,8 +15,6 @@ namespace System.Runtime.Serialization internal class DataContractSet { - // Same string used in MessageContractImporter of System.ServiceModel.dll - const String FailedReferenceTypeExceptionKey = "System.Runtime.Serialization.FailedReferenceType"; Dictionary contracts; Dictionary processedContracts; IDataContractSurrogate dataContractSurrogate; @@ -368,20 +366,7 @@ namespace System.Runtime.Serialization if (type == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.ReferencedTypesCannotContainNull))); - try - { - AddReferencedType(referencedTypesDictionary, type); - } - catch (InvalidDataContractException ex) - { - ex.Data.Add(FailedReferenceTypeExceptionKey, type); - throw; - } - catch (InvalidOperationException ex) - { - ex.Data.Add(FailedReferenceTypeExceptionKey, type); - throw; - } + AddReferencedType(referencedTypesDictionary, type); } } } @@ -413,7 +398,22 @@ namespace System.Runtime.Serialization { if (IsTypeReferenceable(type)) { - XmlQualifiedName stableName = this.GetStableName(type); + XmlQualifiedName stableName; + try + { + stableName = this.GetStableName(type); + } + catch (InvalidDataContractException) + { + // Type not referenceable if we can't get a stable name. + return; + } + catch (InvalidOperationException) + { + // Type not referenceable if we can't get a stable name. + return; + } + object value; if (referencedTypes.TryGetValue(stableName, out value)) { @@ -500,11 +500,28 @@ namespace System.Runtime.Serialization static bool IsTypeReferenceable(Type type) { Type itemType; - return (type.IsSerializable || - type.IsDefined(Globals.TypeOfDataContractAttribute, false) || - (Globals.TypeOfIXmlSerializable.IsAssignableFrom(type) && !type.IsGenericTypeDefinition) || - CollectionDataContract.IsCollection(type, out itemType) || - ClassDataContract.IsNonAttributedTypeValidForSerialization(type)); + + try + { + return (type.IsSerializable || + type.IsDefined(Globals.TypeOfDataContractAttribute, false) || + (Globals.TypeOfIXmlSerializable.IsAssignableFrom(type) && !type.IsGenericTypeDefinition) || + CollectionDataContract.IsCollection(type, out itemType) || + ClassDataContract.IsNonAttributedTypeValidForSerialization(type)); + } + catch (Exception ex) + { + // An exception can be thrown in the designer when a project has a runtime binding redirection for a referenced assembly or a reference dependent assembly. + // Type.IsDefined is known to throw System.IO.FileLoadException. + // ClassDataContract.IsNonAttributedTypeValidForSerialization is known to throw System.IO.FileNotFoundException. + // We guard against all non-critical exceptions. + if (Fx.IsFatal(ex)) + { + throw; + } + } + + return false; } } } diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataMemberAttribute.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataMemberAttribute.cs index 114f1a94ba..0da4890600 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataMemberAttribute.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/DataMemberAttribute.cs @@ -8,7 +8,7 @@ namespace System.Runtime.Serialization public sealed class DataMemberAttribute : Attribute { string name; - bool isNameSetExplicit; + bool isNameSetExplicitly; int order = -1; bool isRequired; bool emitDefaultValue = Globals.DefaultEmitDefaultValue; @@ -20,12 +20,12 @@ namespace System.Runtime.Serialization public string Name { get { return name; } - set { name = value; isNameSetExplicit = true; } + set { name = value; isNameSetExplicitly = true; } } - internal bool IsNameSetExplicit + public bool IsNameSetExplicitly { - get { return isNameSetExplicit; } + get { return isNameSetExplicitly; } } public int Order diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumDataContract.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumDataContract.cs index f9c411fdf4..d9f1dc3128 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumDataContract.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumDataContract.cs @@ -290,7 +290,7 @@ namespace System.Runtime.Serialization EnumMemberAttribute memberAttribute = (EnumMemberAttribute)memberAttributes[0]; DataMember memberContract = new DataMember(field); - if (memberAttribute.IsValueSetExplicit) + if (memberAttribute.IsValueSetExplicitly) { if (memberAttribute.Value == null || memberAttribute.Value.Length == 0) ThrowInvalidDataContractException(SR.GetString(SR.InvalidEnumMemberValue, field.Name, DataContract.GetClrTypeFullName(type))); diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumMemberAttribute.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumMemberAttribute.cs index 6a0fb9b47c..fbcc335330 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumMemberAttribute.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/EnumMemberAttribute.cs @@ -8,7 +8,7 @@ namespace System.Runtime.Serialization public sealed class EnumMemberAttribute : Attribute { string value; - bool isValueSetExplicit; + bool isValueSetExplicitly; public EnumMemberAttribute() { @@ -17,12 +17,12 @@ namespace System.Runtime.Serialization public string Value { get { return this.value; } - set { this.value = value; this.isValueSetExplicit = true; } + set { this.value = value; this.isValueSetExplicitly = true; } } - internal bool IsValueSetExplicit + public bool IsValueSetExplicitly { - get { return this.isValueSetExplicit; } + get { return this.isValueSetExplicitly; } } } } diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs index fa97ce9c0b..f18da31004 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Globals.cs @@ -1092,23 +1092,6 @@ namespace System.Runtime.Serialization } } - [SecurityCritical] - static Type typeOfSafeSerializationManager; - static bool typeOfSafeSerializationManagerSet; - internal static Type TypeOfSafeSerializationManager - { - [SecuritySafeCritical] - get - { - if (!typeOfSafeSerializationManagerSet) - { - typeOfSafeSerializationManager = TypeOfInt.Assembly.GetType("System.Runtime.Serialization.SafeSerializationManager"); - typeOfSafeSerializationManagerSet = true; - } - return typeOfSafeSerializationManager; - } - } - [SecurityCritical] static Uri dataContractXsdBaseNamespaceUri; internal static Uri DataContractXsdBaseNamespaceUri @@ -1122,6 +1105,7 @@ namespace System.Runtime.Serialization } } +#if !DISABLE_CAS_USE [Fx.Tag.SecurityNote(Critical = "Holds instance of SecurityPermission that we will Demand for SerializationFormatter." + " Should not be modified to something else.")] [SecurityCritical] @@ -1153,7 +1137,7 @@ namespace System.Runtime.Serialization return memberAccessPermission; } } - +#endif public const bool DefaultIsRequired = false; public const bool DefaultEmitDefaultValue = true; @@ -1164,8 +1148,6 @@ namespace System.Runtime.Serialization public readonly static string NewObjectId = string.Empty; public const string SimpleSRSInternalsVisiblePattern = @"^[\s]*System\.Runtime\.Serialization[\s]*$"; public const string FullSRSInternalsVisiblePattern = @"^[\s]*System\.Runtime\.Serialization[\s]*,[\s]*PublicKey[\s]*=[\s]*(?i:00000000000000000400000000000000)[\s]*$"; - public const string SafeSerializationManagerName = "SafeSerializationManager"; - public const string SafeSerializationManagerNamespace = "http://schemas.datacontract.org/2004/07/System.Runtime.Serialization"; public const string NullObjectId = null; public const string Space = " "; public const string OpenBracket = "["; diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Json/JsonNodeType.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Json/JsonNodeType.cs index c0f6374a40..b99510be2b 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Json/JsonNodeType.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/Json/JsonNodeType.cs @@ -14,4 +14,4 @@ namespace System.Runtime.Serialization.Json StandaloneText, Collection } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs index c1f09aedca..6a71d9a194 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerContext.cs @@ -89,11 +89,13 @@ namespace System.Runtime.Serialization [SecuritySafeCritical] public void DemandSerializationFormatterPermission() { +#if !DISABLE_CAS_USE if (!demandedSerializationFormatterPermission) { Globals.SerializationFormatterPermission.Demand(); demandedSerializationFormatterPermission = true; } +#endif } [Fx.Tag.SecurityNote(Critical = "Demands MemberAccess permission. demanding the right permission is critical.", @@ -101,11 +103,13 @@ namespace System.Runtime.Serialization [SecuritySafeCritical] public void DemandMemberAccessPermission() { +#if !DISABLE_CAS_USE if (!demandedMemberAccessPermission) { Globals.MemberAccessPermission.Demand(); demandedMemberAccessPermission = true; } + #endif } public StreamingContext GetStreamingContext() @@ -278,10 +282,6 @@ namespace System.Runtime.Serialization DataContract dataContract = PrimitiveDataContract.GetPrimitiveDataContract(typeName.Name, typeName.Namespace); if (dataContract == null) { - if (typeName.Name == Globals.SafeSerializationManagerName && typeName.Namespace == Globals.SafeSerializationManagerNamespace && Globals.TypeOfSafeSerializationManager != null) - { - return GetDataContract(Globals.TypeOfSafeSerializationManager); - } dataContract = scopedKnownTypes.GetDataContract(typeName); if (dataContract == null) { diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs index 4479f5055a..acc54533c8 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs @@ -193,7 +193,7 @@ namespace System.Runtime.Serialization { if (TD.DCDeserializeWithSurrogateStartIsEnabled()) { - TD.DCDeserializeWithSurrogateStart(surrogateDataContract.UnderlyingType.FullName); + TD.DCDeserializeWithSurrogateStart(declaredType.FullName); } DataContract dataContract = surrogateDataContract ?? diff --git a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs index a5f77c25af..3d953393b4 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs @@ -494,8 +494,10 @@ namespace System.Runtime.Serialization [MethodImpl(MethodImplOptions.NoInlining)] internal void GetObjectData(ISerializable obj, SerializationInfo serInfo, StreamingContext context) { +#if !DISABLE_CAS_USE // Demand the serialization formatter permission every time Globals.SerializationFormatterPermission.Demand(); +#endif obj.GetObjectData(serInfo, context); } diff --git a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlBaseReader.cs.REMOVED.git-id b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlBaseReader.cs.REMOVED.git-id index 564783321f..ba8488be21 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlBaseReader.cs.REMOVED.git-id +++ b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlBaseReader.cs.REMOVED.git-id @@ -1 +1 @@ -6b1de6eb1d939934205dc38fa1676f6dfdb83186 \ No newline at end of file +008ed195fb5be846e544d683f6ae95ec2f25c1fe \ No newline at end of file diff --git a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionaryWriter.cs b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionaryWriter.cs index 5c94636bb6..bfb1b2a982 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionaryWriter.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlDictionaryWriter.cs @@ -523,7 +523,10 @@ namespace System.Xml Operation operation = Operation.Read; IStreamProvider streamProvider; XmlDictionaryWriter writer; + Func writeBlockHandler; + static Func handleWriteBlock = HandleWriteBlock; + static Func handleWriteBlockAsync = HandleWriteBlockAsync; static AsyncCallback onContinueWork = Fx.ThunkCallback(OnContinueWork); public WriteValueAsyncResult(XmlDictionaryWriter writer, IStreamProvider value, AsyncCallback callback, object state) @@ -531,6 +534,7 @@ namespace System.Xml { this.streamProvider = value; this.writer = writer; + this.writeBlockHandler = this.writer.Settings != null && this.writer.Settings.Async ? handleWriteBlockAsync : handleWriteBlock; this.stream = value.GetStream(); if (this.stream == null) { @@ -598,7 +602,7 @@ namespace System.Xml } else { - if (HandleWriteBlock(result)) + if (this.writeBlockHandler(result, this)) { // Write completed ([....] or async, doesn't matter) AdjustBlockSize(); @@ -631,24 +635,43 @@ namespace System.Xml } //returns whether or not I completed. - bool HandleWriteBlock(IAsyncResult result) + static bool HandleWriteBlock(IAsyncResult result, WriteValueAsyncResult thisPtr) { if (result == null) { - result = this.writer.BeginWriteBase64(this.block, 0, this.bytesRead, onContinueWork, this); + result = thisPtr.writer.BeginWriteBase64(thisPtr.block, 0, thisPtr.bytesRead, onContinueWork, thisPtr); if (!result.CompletedSynchronously) { return false; } } - this.writer.EndWriteBase64(result); + thisPtr.writer.EndWriteBase64(result); + return true; + } + + //returns whether or not I completed. + static bool HandleWriteBlockAsync(IAsyncResult result, WriteValueAsyncResult thisPtr) + { + Task task = (Task)result; + + if (task == null) + { + task = thisPtr.writer.WriteBase64Async(thisPtr.block, 0, thisPtr.bytesRead); + task.AsAsyncResult(onContinueWork, thisPtr); + return false; + } + + task.GetAwaiter().GetResult(); + return true; } static void OnContinueWork(IAsyncResult result) { - if (result.CompletedSynchronously) + // If result is a Task we shouldn't check for Synchronous completion + // We should only return if we're in the async completion path and if the result completed synchronously. + if (result.CompletedSynchronously && !(result is Task)) { return; } diff --git a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlStreamNodeWriter.cs b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlStreamNodeWriter.cs index a31aeb7668..7162dbfa38 100644 --- a/external/referencesource/System.Runtime.Serialization/System/Xml/XmlStreamNodeWriter.cs +++ b/external/referencesource/System.Runtime.Serialization/System/Xml/XmlStreamNodeWriter.cs @@ -656,9 +656,13 @@ namespace System.Xml while (true) { - while (chars < charsMax && *chars < 0x80) + while (chars < charsMax) { - *bytes = (byte)(*chars); + char t = *chars; + if (t >= 0x80) + break; + + *bytes = (byte)t; bytes++; chars++; } diff --git a/external/referencesource/System.ServiceModel.Activation/System/ServiceModel/Activation/IServiceModelActivationHandler.cs b/external/referencesource/System.ServiceModel.Activation/System/ServiceModel/Activation/IServiceModelActivationHandler.cs index 87872c243c..cc29448954 100644 --- a/external/referencesource/System.ServiceModel.Activation/System/ServiceModel/Activation/IServiceModelActivationHandler.cs +++ b/external/referencesource/System.ServiceModel.Activation/System/ServiceModel/Activation/IServiceModelActivationHandler.cs @@ -10,4 +10,4 @@ namespace System.ServiceModel.Activation { ServiceHostFactoryBase GetFactory(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Activities/SuppressMessages.cs b/external/referencesource/System.ServiceModel.Activities/SuppressMessages.cs index 5187c6b8b8..9caa3edf6b 100644 --- a/external/referencesource/System.ServiceModel.Activities/SuppressMessages.cs +++ b/external/referencesource/System.ServiceModel.Activities/SuppressMessages.cs @@ -6,7 +6,7 @@ using System.Diagnostics.CodeAnalysis; using System.Runtime; - // + // TODO, 47676, see the TODO on BookmarkNameHelper.CreateBookmarkName [module: SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode, Scope = "member", Target = "System.ServiceModel.Activities.SR.ConflictingBookmarkName(System.Object,System.Object):System.String")] [module: SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode, Scope = "member", Target = "System.ServiceModel.Activities.SR.TransactedReceiveScopeMustHaveValidReceive(System.Object):System.String")] [module: SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode, Scope = "member", Target = "System.ServiceModel.Activities.SR.AbortInstanceOnTransactionFailureDoesNotMatch(System.Object,System.Object):System.String")] diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/AppSettings.cs b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/AppSettings.cs index 4265ccae14..6a4ec0676b 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/AppSettings.cs +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/AppSettings.cs @@ -15,11 +15,17 @@ namespace System.ServiceModel.Activities // false [default] to NOT have InstanceKeys automatically disassociated by default, so that they stay around until the completion of the workflow. // true to have InstanceKeys automatically dissociated by default. Doing this affects the extensibility point WorkflowInstance.OnDisassociateKeys. - // + // // // NOTE - There is a similar setting in System.Activities because the changes affected by this are in both assemblies. private static bool defaultAutomaticInstanceKeyDisassociation; + // The number of seconds to wait for non-protocol bookmarks if we receive a request, but the protocol bookmark for that Receive activity is not ready. + // Default = 60 (1 minute). + // A value of 0 implies that we should not wait at all and the "out of order" exception should be thrown, rather than the timeout exception. + // + private static int filterResumeTimeoutInSeconds; + internal static bool DefaultAutomaticInstanceKeyDisassociation { get @@ -29,6 +35,15 @@ namespace System.ServiceModel.Activities } } + internal static int FilterResumeTimeoutInSeconds + { + get + { + EnsureSettingsLoaded(); + return filterResumeTimeoutInSeconds; + } + } + private static void EnsureSettingsLoaded() { if (!settingsInitialized) @@ -50,11 +65,17 @@ namespace System.ServiceModel.Activities defaultAutomaticInstanceKeyDisassociation = false; } + if (settings == null || !int.TryParse(settings["microsoft:WorkflowServices:FilterResumeTimeoutInSeconds"], out filterResumeTimeoutInSeconds) || + (filterResumeTimeoutInSeconds < 0)) + { + filterResumeTimeoutInSeconds = 60; + } + settingsInitialized = true; } } } } - } + } } } diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/Dispatcher/WorkflowServiceInstance.cs.REMOVED.git-id b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/Dispatcher/WorkflowServiceInstance.cs.REMOVED.git-id index 0aa593141b..f3655fcb3d 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/Dispatcher/WorkflowServiceInstance.cs.REMOVED.git-id +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/Dispatcher/WorkflowServiceInstance.cs.REMOVED.git-id @@ -1 +1 @@ -cf3db836fbd33190f34d8037fc149fcf0adabc61 \ No newline at end of file +e5ea1459fff7b1cd603c92ad680205fd8d059d63 \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/IWorkflowInstanceManagement.cs b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/IWorkflowInstanceManagement.cs index c46da590cf..f0ac8481d0 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/IWorkflowInstanceManagement.cs +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/IWorkflowInstanceManagement.cs @@ -76,7 +76,7 @@ namespace System.ServiceModel.Activities void EndUnsuspend(IAsyncResult result); //Transacted Operation - // + // TODO, 21237, Post One-Way Tx flow support below operations should be changed to Oneway. [OperationContract(Name = XD2.WorkflowInstanceManagementService.TransactedCancel)] [TransactionFlow(TransactionFlowOption.Allowed)] diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/SerializerOption.cs b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/SerializerOption.cs index 0f15577587..fd8f1477db 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/SerializerOption.cs +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/SerializerOption.cs @@ -12,4 +12,4 @@ namespace System.ServiceModel.Activities DataContractSerializer, XmlSerializer }; -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowService.cs b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowService.cs index ff7cacca10..f955b0e8c4 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowService.cs +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowService.cs @@ -295,6 +295,10 @@ namespace System.ServiceModel.Activities SkipValidatingRootConfiguration = source.SkipValidatingRootConfiguration, PrepareForRuntime = source.PrepareForRuntime, Environment = source.Environment, + // Retain the same cancellation token. Otherwise we can't cancel the validation of WorkflowService objects + // which can make the designer unreponsive if the validation takes a long time. + CancellationToken = source.CancellationToken + }; foreach (KeyValuePair> constrants in source.AdditionalConstraints) diff --git a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowServiceHost.cs b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowServiceHost.cs index 35b49245a6..3574b87ff0 100644 --- a/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowServiceHost.cs +++ b/external/referencesource/System.ServiceModel.Activities/System/ServiceModel/Activities/WorkflowServiceHost.cs @@ -31,7 +31,6 @@ namespace System.ServiceModel.Activities static readonly Type mexBehaviorType = typeof(ServiceMetadataBehavior); static readonly TimeSpan defaultPersistTimeout = TimeSpan.FromSeconds(30); static readonly TimeSpan defaultTrackTimeout = TimeSpan.FromSeconds(30); - static readonly TimeSpan defaultFilterResumeTimeout = TimeSpan.FromMinutes(1); static readonly Type baseActivityType = typeof(Activity); static readonly Type correlationQueryBehaviorType = typeof(CorrelationQueryBehavior); static readonly Type bufferedReceiveServiceBehaviorType = typeof(BufferedReceiveServiceBehavior); @@ -482,7 +481,7 @@ namespace System.ServiceModel.Activities this.PersistTimeout = defaultPersistTimeout; this.TrackTimeout = defaultTrackTimeout; - this.FilterResumeTimeout = defaultFilterResumeTimeout; + this.FilterResumeTimeout = TimeSpan.FromSeconds(AppSettings.FilterResumeTimeoutInSeconds); } protected override void InitializeRuntime() diff --git a/external/referencesource/System.ServiceModel.Channels/AssemblyInfo.cs b/external/referencesource/System.ServiceModel.Channels/AssemblyInfo.cs index 8bf65c7eef..fc11912b0f 100644 --- a/external/referencesource/System.ServiceModel.Channels/AssemblyInfo.cs +++ b/external/referencesource/System.ServiceModel.Channels/AssemblyInfo.cs @@ -25,4 +25,4 @@ using System.Windows.Markup; // Friend assemblies [assembly: InternalsVisibleToAttribute("NetFx.Checkin.Common.NetFxFriends, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -[assembly: InternalsVisibleToAttribute("System.ServiceModel.Friend, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")] +[assembly: InternalsVisibleToAttribute("System.ServiceModel.Friend, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")] \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/ByteStreamMessage.cs b/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/ByteStreamMessage.cs index 8e8428a649..7a76f6e4a2 100644 --- a/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/ByteStreamMessage.cs +++ b/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/ByteStreamMessage.cs @@ -8,6 +8,7 @@ namespace System.ServiceModel.Channels using System.IO; using System.Net.Http; using System.Runtime; + using System.Threading.Tasks; using System.Xml; public static class ByteStreamMessage @@ -552,6 +553,13 @@ namespace System.ServiceModel.Channels static bool HandleWriteBodyContents(IAsyncResult result) { + // If result is a task, we need to get the result so that exceptions are bubbled up in case the task is faulted. + Task t = result as Task; + if (t != null) + { + t.GetAwaiter().GetResult(); + } + WriteBodyContentsAsyncResult thisPtr = (WriteBodyContentsAsyncResult)result.AsyncState; thisPtr.writer.WriteEndElement(); return true; diff --git a/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/XmlByteStreamWriter.cs b/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/XmlByteStreamWriter.cs index dd553772c3..d337effa36 100644 --- a/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/XmlByteStreamWriter.cs +++ b/external/referencesource/System.ServiceModel.Channels/System/ServiceModel/Channels/XmlByteStreamWriter.cs @@ -7,6 +7,7 @@ namespace System.ServiceModel.Channels using System; using System.IO; using System.Runtime; + using System.Threading; using System.Threading.Tasks; using System.Xml; @@ -15,6 +16,7 @@ namespace System.ServiceModel.Channels bool ownsStream; ByteStreamWriterState state; Stream stream; + XmlWriterSettings settings; public XmlByteStreamWriter(Stream stream, bool ownsStream) { @@ -30,6 +32,24 @@ namespace System.ServiceModel.Channels get { return ByteStreamWriterStateToWriteState(this.state); } } + public override XmlWriterSettings Settings + { + get + { + if (settings == null) + { + XmlWriterSettings newSettings = new XmlWriterSettings() + { + Async = true + }; + + Interlocked.CompareExchange(ref this.settings, newSettings, null); + } + + return this.settings; + } + } + public override void Close() { if (this.state != ByteStreamWriterState.Closed) diff --git a/external/referencesource/System.ServiceModel.Discovery/AssemblyInfo.cs b/external/referencesource/System.ServiceModel.Discovery/AssemblyInfo.cs index 4e2db6bd50..66c938965e 100644 --- a/external/referencesource/System.ServiceModel.Discovery/AssemblyInfo.cs +++ b/external/referencesource/System.ServiceModel.Discovery/AssemblyInfo.cs @@ -3,4 +3,4 @@ using System.Runtime.CompilerServices; // Friends Assembly [assembly: InternalsVisibleTo("System.ServiceModel.Friend, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")] -// Partial Trust : +// Partial Trust : \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Internals/AssemblyInfo.cs b/external/referencesource/System.ServiceModel.Internals/AssemblyInfo.cs index 8377034069..715b38b201 100644 --- a/external/referencesource/System.ServiceModel.Internals/AssemblyInfo.cs +++ b/external/referencesource/System.ServiceModel.Internals/AssemblyInfo.cs @@ -58,7 +58,7 @@ using System.Security.Permissions; [assembly: InternalsVisibleTo("System.Activities.DurableInstancing, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("XsdBuildTask, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -// +// TODO, 62799, fix this to be System.Runtime.Friend [assembly: InternalsVisibleTo("System.ServiceModel.Friend, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293")] [assembly: InternalsVisibleTo("Microsoft.CDF.Test.Persistence, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] [assembly: InternalsVisibleTo("CDF.CIT.Scenarios.Common, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] diff --git a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/DiagnosticTraceBase.cs b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/DiagnosticTraceBase.cs index 5089c87277..f3ab701ee2 100644 --- a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/DiagnosticTraceBase.cs +++ b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/DiagnosticTraceBase.cs @@ -309,7 +309,9 @@ namespace System.Runtime.Diagnostics { currentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler); this.SetLevel(this.TraceSource.Switch.Level); +#if MONO_FEATURE_MULTIPLE_APPDOMAINS currentDomain.DomainUnload += new EventHandler(ExitOrUnloadEventHandler); +#endif currentDomain.ProcessExit += new EventHandler(ExitOrUnloadEventHandler); } } diff --git a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogCategory.cs b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogCategory.cs index 1417a78c8a..033f09386f 100644 --- a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogCategory.cs +++ b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogCategory.cs @@ -23,4 +23,4 @@ namespace System.Runtime.Diagnostics ListenerAdapter } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogEventId.cs b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogEventId.cs index eeb8e04a67..d7fcf0b3d2 100644 --- a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogEventId.cs +++ b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Diagnostics/EventLogEventId.cs @@ -18,7 +18,7 @@ namespace System.Runtime.Diagnostics // The Severity and Facility assigned in EventLog.mc must match those assigned via the EventId here. // If the EventId's do not match, the EventViewer will not be able to display the strings defined in EventLog.mc correctly. In this case, the following error message will be included in the logged event: // "The description for Event ID XX from source System.ServiceModel 4.0.0.0 cannot be found..." - // To inspect the value ----igend to the enum elements below, build 'ndp\cdf\src\System.ServiceModel.Internals', and inspect System.ServiceModel.Internals\System.ServiceModel.Internals.asmmeta + // To inspect the value assigend to the enum elements below, build 'ndp\cdf\src\System.ServiceModel.Internals', and inspect System.ServiceModel.Internals\System.ServiceModel.Internals.asmmeta // To inspect the EventId generated from EventLog.mc, build 'ndp\cdf\src\WCF\EventLog', and open ServiceModelEvents.dll.mui with \\indigofs\PrivateLabDebugShare\sarada\RPFRecorder\RPFRecorder.exe (convert EventId from decimal to hex). // You could also use any other method of viewing ServiceModelEvents.dll.mui which would allow you to inspect the EventId enum EventLogEventId : uint diff --git a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Interop/UnsafeNativeMethods.cs b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Interop/UnsafeNativeMethods.cs index 5b7526842c..8cc7d8e10e 100644 --- a/external/referencesource/System.ServiceModel.Internals/System/Runtime/Interop/UnsafeNativeMethods.cs +++ b/external/referencesource/System.ServiceModel.Internals/System/Runtime/Interop/UnsafeNativeMethods.cs @@ -13,6 +13,7 @@ namespace System.Runtime.Interop using System.Runtime.InteropServices; using System.Diagnostics.CodeAnalysis; using System.Runtime.Diagnostics; + using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; [SuppressUnmanagedCodeSecurity] static class UnsafeNativeMethods @@ -34,7 +35,7 @@ namespace System.Runtime.Interop internal uint Size; [FieldOffset(12)] internal int Reserved; - } + } [SuppressMessage(FxCop.Category.Security, FxCop.Rule.ReviewSuppressUnmanagedCodeSecurityUsage, Justification = "This PInvoke call has been reviewed")] @@ -73,7 +74,17 @@ namespace System.Runtime.Interop [DllImport(KERNEL32, SetLastError = true)] [ResourceExposure(ResourceScope.None)] [SecurityCritical] - public static extern void GetSystemTimeAsFileTime([Out] out long time); + private static extern void GetSystemTimeAsFileTime([Out] out FILETIME time); + + [SecurityCritical] + public static void GetSystemTimeAsFileTime(out long time) { + FILETIME fileTime; + GetSystemTimeAsFileTime(out fileTime); + time = 0; + time |= (uint)fileTime.dwHighDateTime; + time <<= sizeof(uint) * 8; + time |= (uint)fileTime.dwLowDateTime; + } [SuppressMessage(FxCop.Category.Security, FxCop.Rule.SpecifyMarshalingForPInvokeStringArguments, Justification = "")] [DllImport(KERNEL32, SetLastError = true, CharSet = CharSet.Auto)] diff --git a/external/referencesource/System.ServiceModel.Routing/System/ServiceModel/Routing/ProcessRequestAsyncResult.cs b/external/referencesource/System.ServiceModel.Routing/System/ServiceModel/Routing/ProcessRequestAsyncResult.cs index 96de717996..707fae242d 100644 --- a/external/referencesource/System.ServiceModel.Routing/System/ServiceModel/Routing/ProcessRequestAsyncResult.cs +++ b/external/referencesource/System.ServiceModel.Routing/System/ServiceModel/Routing/ProcessRequestAsyncResult.cs @@ -248,6 +248,22 @@ namespace System.ServiceModel.Routing return true; } } + else if (exception is ProtocolException) + { + // This exception may happen when the current cached channel was closed due to end service recycles. + // We abort the channel in this case and clean it up from the session. + // We will then retry the request one more time only. In retried request, it will create a new channel because the cached channel has been cleaned up. + if (!this.abortedRetry) + { + SessionChannels sessionChannels = this.service.GetSessionChannels(this.messageRpc.Impersonating); + if (sessionChannels != null) + { + this.abortedRetry = true; + sessionChannels.AbortChannel(sendOperation.CurrentEndpoint); + return true; + } + } + } if (sendOperation.TryMoveToAlternate(exception)) { diff --git a/external/referencesource/System.ServiceModel.Web/GlobalSuppressions.cs b/external/referencesource/System.ServiceModel.Web/GlobalSuppressions.cs index e430960c25..332b14376f 100644 --- a/external/referencesource/System.ServiceModel.Web/GlobalSuppressions.cs +++ b/external/referencesource/System.ServiceModel.Web/GlobalSuppressions.cs @@ -7,7 +7,7 @@ using System.Diagnostics.CodeAnalysis; [module: SuppressMessage("Microsoft.Naming", "CA1703:ResourceStringsShouldBeSpelledCorrectly", Scope = "resource", Target = "System.ServiceModel.SR2.resources", MessageId = "Infos", Justification = "This represents the ParameterInfo class defined in System.Reflection")] [module: SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Scope = "namespace", Target = "System.Xml.Linq", MessageId = "Linq")] -// [....], BEGIN FxCop violations for code in Microsoft.Web.Script.Services.* +// krisragh, BEGIN FxCop violations for code in Microsoft.Web.Script.Services.* [module: SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceTypeData..cctor()")] [module: SuppressMessage("Reliability", "Reliability102:WrapExceptionsRule", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceTypeData.ThrowCannotGenerateProxyForTypeError(System.Xml.XmlQualifiedName):System.Void")] [module: SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceClientProxyGenerator..ctor(System.String,System.Boolean)", MessageId = "debug")] @@ -25,7 +25,7 @@ using System.Diagnostics.CodeAnalysis; [module: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceParameterData.get_ParameterType():Microsoft.Web.Script.Services.WebServiceTypeData")] [module: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceTypeData.set_TypeName(System.String):System.Void")] [module: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.Web.Script.Services.WebServiceTypeData.set_TypeNamespace(System.String):System.Void")] -// [....], END FxCop violations for code in Microsoft.Web.Script.Services.* +// krisragh, END FxCop violations for code in Microsoft.Web.Script.Services.* [module: SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Scope = "member", Target = "System.Runtime.Serialization.DataContractContentExtensions.ReadAsDataContract(System.ServiceModel.Web.Client.Http.HttpContent,System.Runtime.Serialization.DataContractSerializer):T")] diff --git a/external/referencesource/System.ServiceModel.Web/System/ServiceModel/Dispatcher/HelpHtmlBuilder.cs b/external/referencesource/System.ServiceModel.Web/System/ServiceModel/Dispatcher/HelpHtmlBuilder.cs index 9f3b6f5699..84ca48641c 100644 --- a/external/referencesource/System.ServiceModel.Web/System/ServiceModel/Dispatcher/HelpHtmlBuilder.cs +++ b/external/referencesource/System.ServiceModel.Web/System/ServiceModel/Dispatcher/HelpHtmlBuilder.cs @@ -363,7 +363,7 @@ namespace System.ServiceModel.Dispatcher else { return new XElement(HtmlPElementName, - new XElement(HtmlAElementName, new XAttribute(HtmlNameAttributeName, "#" + label), title), + new XElement(HtmlAElementName, new XAttribute(HtmlNameAttributeName, label), title), new XElement(HtmlPreElementName, new XAttribute(HtmlClassAttributeName, label), content)); } } diff --git a/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/AppContextDefaultValues.cs b/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/AppContextDefaultValues.cs new file mode 100644 index 0000000000..8a130a0f34 --- /dev/null +++ b/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/AppContextDefaultValues.cs @@ -0,0 +1,169 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== +using System; +using System.Collections.Generic; + +namespace System +{ + internal static partial class AppContextDefaultValues + { + public static void PopulateDefaultValues() + { + string platformIdentifier, profile; + int version; + + ParseTargetFrameworkName(out platformIdentifier, out profile, out version); + + // Call into each library to populate their default switches + PopulateDefaultValuesPartial(platformIdentifier, profile, version); + } + + /// + /// We have this separate method for getting the parsed elements out of the TargetFrameworkName so we can + /// more easily support this on other platforms. + /// + private static void ParseTargetFrameworkName(out string identifier, out string profile, out int version) + { + string targetFrameworkMoniker = AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName; + + // If we don't have a TFM then we should default to the 4.0 behavior where all quirks are turned on. + if (!TryParseFrameworkName(targetFrameworkMoniker, out identifier, out version, out profile)) + { +#if FEATURE_CORECLR + if (CompatibilitySwitches.UseLatestBehaviorWhenTFMNotSpecified) + { + // If we want to use the latest behavior it is enough to set the value of the switch to string.Empty. + // When the get to the caller of this method (PopulateDefaultValuesPartial) we are going to use the + // identifier we just set to decide which switches to turn on. By having an empty string as the + // identifier we are simply saying -- don't turn on any switches, and we are going to get the latest + // behavior for all the switches + identifier = string.Empty; + } + else +#endif + { + identifier = ".NETFramework"; + version = 40000; + profile = string.Empty; + } + } + } + + // This code was a constructor copied from the FrameworkName class, which is located in System.dll. + // Parses strings in the following format: ", Version=[v|V], Profile=" + // - The identifier and version is required, profile is optional + // - Only three components are allowed. + // - The version string must be in the System.Version format; an optional "v" or "V" prefix is allowed + private static bool TryParseFrameworkName(String frameworkName, out String identifier, out int version, out String profile) + { + // For parsing a target Framework moniker, from the FrameworkName class + const char c_componentSeparator = ','; + const char c_keyValueSeparator = '='; + const char c_versionValuePrefix = 'v'; + const String c_versionKey = "Version"; + const String c_profileKey = "Profile"; + + identifier = profile = string.Empty; + version = 0; + + if (frameworkName == null || frameworkName.Length == 0) + { + return false; + } + + String[] components = frameworkName.Split(c_componentSeparator); + version = 0; + + // Identifer and Version are required, Profile is optional. + if (components.Length < 2 || components.Length > 3) + { + return false; + } + + // + // 1) Parse the "Identifier", which must come first. Trim any whitespace + // + identifier = components[0].Trim(); + + if (identifier.Length == 0) + { + return false; + } + + bool versionFound = false; + profile = null; + + // + // The required "Version" and optional "Profile" component can be in any order + // + for (int i = 1; i < components.Length; i++) + { + // Get the key/value pair separated by '=' + string[] keyValuePair = components[i].Split(c_keyValueSeparator); + + if (keyValuePair.Length != 2) + { + return false; + } + + // Get the key and value, trimming any whitespace + string key = keyValuePair[0].Trim(); + string value = keyValuePair[1].Trim(); + + // + // 2) Parse the required "Version" key value + // + if (key.Equals(c_versionKey, StringComparison.OrdinalIgnoreCase)) + { + versionFound = true; + + // Allow the version to include a 'v' or 'V' prefix... + if (value.Length > 0 && (value[0] == c_versionValuePrefix || value[0] == 'V')) + { + value = value.Substring(1); + } + Version realVersion = new Version(value); + // The version class will represent some unset values as -1 internally (instead of 0). + version = realVersion.Major * 10000; + if (realVersion.Minor > 0) + version += realVersion.Minor * 100; + if (realVersion.Build > 0) + version += realVersion.Build; + } + // + // 3) Parse the optional "Profile" key value + // + else if (key.Equals(c_profileKey, StringComparison.OrdinalIgnoreCase)) + { + if (!String.IsNullOrEmpty(value)) + { + profile = value; + } + } + else + { + return false; + } + } + + if (!versionFound) + { + return false; + } + + return true; + } + + // This is a partial method. Platforms (such as Desktop) can provide an implementation of it that will read override value + // from whatever mechanism is available on that platform. If no implementation is provided, the compiler is going to remove the calls + // to it from the code + static partial void TryGetSwitchOverridePartial(string switchName, ref bool overrideFound, ref bool overrideValue); + + /// This is a partial method. This method is responsible for populating the default values based on a TFM. + /// It is partial because each library should define this method in their code to contain their defaults. + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version); + } +} diff --git a/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/LocalAppContext.cs b/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/LocalAppContext.cs new file mode 100644 index 0000000000..f05b599ed3 --- /dev/null +++ b/external/referencesource/System.ServiceModel/InternalApis/Clr/inc/LocalAppContext.cs @@ -0,0 +1,128 @@ +// ==++== +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// ==--== + +// NOTE: This file should not be included in mscorlib. This should only be included in FX libraries that need to provide switches +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; + +namespace System +{ + internal static partial class LocalAppContext + { + private delegate bool TryGetSwitchDelegate(string switchName, out bool value); + + private static TryGetSwitchDelegate TryGetSwitchFromCentralAppContext; + private static bool s_canForwardCalls; + + private static Dictionary s_switchMap = new Dictionary(); + private static readonly object s_syncLock = new object(); + + private static bool DisableCaching { get; set; } + + static LocalAppContext() + { + // Try to setup the callback into the central AppContext + s_canForwardCalls = SetupDelegate(); + + // Populate the default values of the local app context + AppContextDefaultValues.PopulateDefaultValues(); + + // Cache the value of the switch that help with testing + DisableCaching = IsSwitchEnabled(@"TestSwitch.LocalAppContext.DisableCaching"); + } + + public static bool IsSwitchEnabled(string switchName) + { + if (s_canForwardCalls) + { + bool isEnabledCentrally; + if (TryGetSwitchFromCentralAppContext(switchName, out isEnabledCentrally)) + { + // we found the switch, so return whatever value it has + return isEnabledCentrally; + } + // if we could not get the value from the central authority, try the local storage. + } + + return IsSwitchEnabledLocal(switchName); + } + + private static bool IsSwitchEnabledLocal(string switchName) + { + // read the value from the set of local defaults + bool isEnabled, isPresent; + lock (s_switchMap) + { + isPresent = s_switchMap.TryGetValue(switchName, out isEnabled); + } + + // If the value is in the set of local switches, reutrn the value + if (isPresent) + { + return isEnabled; + } + + // if we could not find the switch name, we should return 'false' + // This will preserve the concept of switches been 'off' unless explicitly set to 'on' + return false; + } + + private static bool SetupDelegate() + { + Type appContextType = typeof(object).Assembly.GetType("System.AppContext"); + if (appContextType == null) + return false; + + MethodInfo method = appContextType.GetMethod( + "TryGetSwitch", // the method name + BindingFlags.Static | BindingFlags.Public, // binding flags + null, // use the default binder + new Type[] { typeof(string), typeof(bool).MakeByRefType() }, + null); // parameterModifiers - this is ignored by the default binder + if (method == null) + return false; + + // Create delegate if we found the method. + TryGetSwitchFromCentralAppContext = (TryGetSwitchDelegate)Delegate.CreateDelegate(typeof(TryGetSwitchDelegate), method); + + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static bool GetCachedSwitchValue(string switchName, ref int switchValue) + { + if (switchValue < 0) return false; + if (switchValue > 0) return true; + + return GetCachedSwitchValueInternal(switchName, ref switchValue); + } + + private static bool GetCachedSwitchValueInternal(string switchName, ref int switchValue) + { + if (LocalAppContext.DisableCaching) + { + return LocalAppContext.IsSwitchEnabled(switchName); + } + + bool isEnabled = LocalAppContext.IsSwitchEnabled(switchName); + switchValue = isEnabled ? 1 /*true*/ : -1 /*false*/; + return isEnabled; + } + + /// + /// This method is going to be called from the AppContextDefaultValues class when setting up the + /// default values for the switches. !!!! This method is called during the static constructor so it does not + /// take a lock !!!! If you are planning to use this outside of that, please ensure proper locking. + /// + internal static void DefineSwitchDefault(string switchName, bool initialValue) + { + s_switchMap[switchName] = initialValue; + } + } +} diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/EndpointInstanceProvider.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/EndpointInstanceProvider.cs index 755291d6c7..25dbbdf242 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/EndpointInstanceProvider.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/EndpointInstanceProvider.cs @@ -120,7 +120,7 @@ namespace System.ServiceModel.Administration { Fx.Assert(null != endpoint, ""); Fx.Assert(null != instance, ""); - instance.SetProperty(AdministrationStrings.CounterInstanceName, PerformanceCounters.PerformanceCountersEnabled ? EndpointPerformanceCounters.CreateFriendlyInstanceName(endpoint.ServiceName, endpoint.Contract.Name, endpoint.Address.AbsoluteUri.ToUpperInvariant()) : String.Empty); + instance.SetProperty(AdministrationStrings.CounterInstanceName, PerformanceCounters.PerformanceCountersEnabled ? EndpointPerformanceCounters.GetFriendlyInstanceName(endpoint.ServiceName, endpoint.Contract.Name, endpoint.Address.AbsoluteUri.ToUpperInvariant()) : String.Empty); instance.SetProperty(AdministrationStrings.Name, endpoint.Name); instance.SetProperty(AdministrationStrings.ContractName, endpoint.Contract.Name); FillAddressInfo(endpoint, instance); @@ -668,7 +668,7 @@ namespace System.ServiceModel.Administration if (PerformanceCounters.PerformanceCountersEnabled && null != endpointInfo) { - result = OperationPerformanceCounters.CreateFriendlyInstanceName(endpointInfo.ServiceName, endpointInfo.Contract.Name, operationName, endpointInfo.Address.AbsoluteUri.ToUpperInvariant()); + result = OperationPerformanceCounters.GetFriendlyInstanceName(endpointInfo.ServiceName, endpointInfo.Contract.Name, operationName, endpointInfo.Address.AbsoluteUri.ToUpperInvariant()); } return result; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/ServiceInstanceProvider.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/ServiceInstanceProvider.cs index 4fced34d3b..23593fd0ac 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/ServiceInstanceProvider.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Administration/ServiceInstanceProvider.cs @@ -132,7 +132,7 @@ namespace System.ServiceModel.Administration Fx.Assert(null != instance, ""); Fx.Assert(null != info, ""); ProviderBase.FillCollectionInfo(info.Service.BaseAddresses, instance, AdministrationStrings.BaseAddresses); - instance.SetProperty(AdministrationStrings.CounterInstanceName, PerformanceCounters.PerformanceCountersEnabled ? ServicePerformanceCounters.CreateFriendlyInstanceName(info.Service) : String.Empty); + instance.SetProperty(AdministrationStrings.CounterInstanceName, PerformanceCounters.PerformanceCountersEnabled ? ServicePerformanceCounters.GetFriendlyInstanceName(info.Service) : String.Empty); instance.SetProperty(AdministrationStrings.ConfigurationName, info.ConfigurationName); instance.SetProperty(AdministrationStrings.DistinguishedName, info.DistinguishedName); instance.SetProperty(AdministrationStrings.Name, info.Name); diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/AppContextDefaultValues.Default.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/AppContextDefaultValues.Default.cs new file mode 100644 index 0000000000..5f591137e3 --- /dev/null +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/AppContextDefaultValues.Default.cs @@ -0,0 +1,35 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +namespace System +{ + using System; + using System.ServiceModel; + + internal static partial class AppContextDefaultValues + { + static partial void PopulateDefaultValuesPartial(string platformIdentifier, string profile, int version) + { + // When defining a new switch you should add it to the last known version. + // For instance, if you are adding a switch in .NET 4.6 (the release after 4.5.2) you should defined your switch + // like this: + // if (version <= 40502) ... + // This ensures that all previous versions of that platform (up-to 4.5.2) will get the old behavior by default + // NOTE: When adding a default value for a switch please make sure that the default value is added to ALL of the existing platforms! + // NOTE: When adding a new if statement for the version please ensure that ALL previous switches are enabled (ie. don't use else if) + switch (platformIdentifier) + { + case ".NETCore": + case ".NETFramework": + { + if (version <= 40502) + { + LocalAppContextSwitches.SetDefaultsLessOrEqual_452(); + } + + break; + } + } + } + } +} diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/CacheSetting.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/CacheSetting.cs index 3c83ed6c90..7b8aa168f1 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/CacheSetting.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/CacheSetting.cs @@ -10,4 +10,4 @@ namespace System.ServiceModel AlwaysOn, AlwaysOff } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/BufferedOutputAsyncStream.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/BufferedOutputAsyncStream.cs index 8beb939caa..cc976b636e 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/BufferedOutputAsyncStream.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/BufferedOutputAsyncStream.cs @@ -126,10 +126,19 @@ namespace System.ServiceModel.Channels public override void Close() { - this.FlushPendingBuffer(); - stream.Close(); - this.WaitForAllWritesToComplete(); - this.closed = true; + try + { + if (!this.closed) + { + this.FlushPendingBuffer(); + stream.Close(); + this.WaitForAllWritesToComplete(); + } + } + finally + { + this.closed = true; + } } public override void Flush() diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ChannelDemuxer.cs.REMOVED.git-id b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ChannelDemuxer.cs.REMOVED.git-id index 814f15c783..bfdb5085ef 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ChannelDemuxer.cs.REMOVED.git-id +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ChannelDemuxer.cs.REMOVED.git-id @@ -1 +1 @@ -bf44d9efe557a80fed2c9fe79388602c857ecbfa \ No newline at end of file +8187627a3c626ffd202a933cbf037c37879803d8 \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ClientWebSocketFactory.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ClientWebSocketFactory.cs index 48fe8d3c73..d096477625 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ClientWebSocketFactory.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/ClientWebSocketFactory.cs @@ -26,4 +26,4 @@ namespace System.ServiceModel.Channels // we estimate that implementors of a custom web socket factory will find it enough too. public abstract WebSocket CreateWebSocket(Stream connection, WebSocketTransportSettings settings); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelFactory.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelFactory.cs index 6fcf11dd12..482d0bfde8 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelFactory.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelFactory.cs @@ -35,6 +35,7 @@ namespace System.ServiceModel.Channels { static bool httpWebRequestWebPermissionDenied = false; static RequestCachePolicy requestCachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); + static long connectionGroupNamePrefix = 0; readonly ClientWebSocketFactory clientWebSocketFactory; @@ -65,6 +66,7 @@ namespace System.ServiceModel.Channels WebSocketTransportSettings webSocketSettings; ConnectionBufferPool bufferPool; Lazy webSocketSoapContentType; + string uniqueConnectionGroupNamePrefix; internal HttpChannelFactory(HttpTransportBindingElement bindingElement, BindingContext context) : base(bindingElement, context, HttpTransportDefaults.GetDefaultMessageEncoderFactory()) @@ -183,6 +185,15 @@ namespace System.ServiceModel.Channels } this.webSocketSoapContentType = new Lazy(() => { return this.MessageEncoderFactory.CreateSessionEncoder().ContentType; }, LazyThreadSafetyMode.ExecutionAndPublication); + + if (ServiceModelAppSettings.HttpTransportPerFactoryConnectionPool) + { + this.uniqueConnectionGroupNamePrefix = Interlocked.Increment(ref connectionGroupNamePrefix).ToString(); + } + else + { + this.uniqueConnectionGroupNamePrefix = string.Empty; + } } public bool AllowCookies @@ -665,7 +676,7 @@ namespace System.ServiceModel.Channels } string prefix = this.OnGetConnectionGroupPrefix(httpWebRequest, clientCertificateToken); - inputString = string.Concat(prefix, inputString); + inputString = string.Concat(this.uniqueConnectionGroupNamePrefix, prefix, inputString); string credentialHash = null; @@ -1170,6 +1181,7 @@ namespace System.ServiceModel.Channels ChannelBinding channelBinding; int webRequestCompleted; EventTraceActivity eventTraceActivity; + const string ConnectionGroupPrefixMessagePropertyName = "HttpTransportConnectionGroupNamePrefix"; public HttpChannelRequest(HttpRequestChannel channel, HttpChannelFactory factory) { @@ -1179,11 +1191,27 @@ namespace System.ServiceModel.Channels this.factory = factory; } + private string GetConnectionGroupPrefix(Message message) + { + object property; + if (message.Properties.TryGetValue(ConnectionGroupPrefixMessagePropertyName, out property)) + { + string prefix = property as string; + if (prefix != null) + { + return prefix; + } + } + + return string.Empty; + } + public void SendRequest(Message message, TimeSpan timeout) { TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); factory.ApplyManualAddressing(ref this.to, ref this.via, message); this.webRequest = channel.GetWebRequest(this.to, this.via, ref timeoutHelper); + this.webRequest.ConnectionGroupName = GetConnectionGroupPrefix(message) + this.webRequest.ConnectionGroupName; Message request = message; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelHelpers.cs.REMOVED.git-id b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelHelpers.cs.REMOVED.git-id index 23b5f0cbb7..1294077748 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelHelpers.cs.REMOVED.git-id +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpChannelHelpers.cs.REMOVED.git-id @@ -1 +1 @@ -d2389c42a4141d68294b289c4b94a4a6d24729a9 \ No newline at end of file +5df21319d3d6e9046fc229fc5459ad17a351de9b \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpsChannelListener.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpsChannelListener.cs index 95f6f9c565..3f9f1727f7 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpsChannelListener.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/HttpsChannelListener.cs @@ -23,7 +23,7 @@ namespace System.ServiceModel.Channels where TChannel : class, IChannel { readonly bool useCustomClientCertificateVerification; - readonly bool shouldValidateClientCertificate; + bool shouldValidateClientCertificate; bool useHostedClientCertificateMapping; bool requireClientCertificate; SecurityTokenAuthenticator certificateAuthenticator; @@ -125,6 +125,12 @@ namespace System.ServiceModel.Channels { base.ApplyHostedContext(virtualPath, isMetadataListener); useHostedClientCertificateMapping = AspNetEnvironment.Current.ValidateHttpsSettings(virtualPath, ref this.requireClientCertificate); + + // We want to validate the certificate if IIS is set to require a client certificate + if (this.requireClientCertificate) + { + this.shouldValidateClientCertificate = true; + } } internal override ITransportManagerRegistration CreateTransportManagerRegistration(Uri listenUri) diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelAcceptor.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelAcceptor.cs index 6a0e7fb98d..a5b62241f4 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelAcceptor.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelAcceptor.cs @@ -14,4 +14,4 @@ namespace System.ServiceModel.Channels IAsyncResult BeginWaitForChannel(TimeSpan timeout, AsyncCallback callback, object state); bool EndWaitForChannel(IAsyncResult result); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelBindingProvider.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelBindingProvider.cs index 80d524ef8f..d9c4d69946 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelBindingProvider.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IChannelBindingProvider.cs @@ -11,4 +11,4 @@ namespace System.ServiceModel.Channels void EnableChannelBindingSupport(); bool IsChannelBindingSupportEnabled { get; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IHttpCookieContainerManager.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IHttpCookieContainerManager.cs index 84d0fd0d93..d684cbc9cf 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IHttpCookieContainerManager.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IHttpCookieContainerManager.cs @@ -17,4 +17,4 @@ namespace System.ServiceModel.Channels /// CookieContainer CookieContainer { get; set; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IReliableFactorySettings.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IReliableFactorySettings.cs index 38df4d9ca8..a6f06de1e8 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IReliableFactorySettings.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IReliableFactorySettings.cs @@ -25,4 +25,4 @@ namespace System.ServiceModel.Channels TimeSpan SendTimeout { get; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IStreamUpgradeChannelBindingProvider.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IStreamUpgradeChannelBindingProvider.cs index e98a53f6f9..ff8aeb3b70 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IStreamUpgradeChannelBindingProvider.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/IStreamUpgradeChannelBindingProvider.cs @@ -11,4 +11,4 @@ namespace System.ServiceModel.Channels ChannelBinding GetChannelBinding(StreamUpgradeInitiator upgradeInitiator, ChannelBindingKind kind); ChannelBinding GetChannelBinding(StreamUpgradeAcceptor upgradeAcceptor, ChannelBindingKind kind); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MessageHeaders.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MessageHeaders.cs index 504eb71482..de966e4499 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MessageHeaders.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/MessageHeaders.cs @@ -507,7 +507,7 @@ namespace System.ServiceModel.Channels switch (header.HeaderType) { case HeaderType.BufferedMessageHeader: - AddHeader(new Header(header.HeaderKind, CaptureBufferedHeader(collection.bufferedMessageData, + AddHeader(new Header(header.HeaderKind, collection.CaptureBufferedHeader(collection.bufferedMessageData, header.HeaderInfo, headerIndex), processing)); break; case HeaderType.ReadableHeader: diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SafeNativeMethods.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SafeNativeMethods.cs index f63d363b4e..261d8c688e 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SafeNativeMethods.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SafeNativeMethods.cs @@ -7,6 +7,7 @@ namespace System.ServiceModel.Channels using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; + using FILETIME = System.Runtime.InteropServices.ComTypes.FILETIME; [SuppressUnmanagedCodeSecurity] internal static class SafeNativeMethods @@ -20,10 +21,19 @@ namespace System.ServiceModel.Channels [Out] out uint increment, [Out] out uint adjustmentDisabled ); - + [DllImport(KERNEL32, SetLastError = true)] [ResourceExposure(ResourceScope.None)] - public static extern void GetSystemTimeAsFileTime(out long time); + private static extern void GetSystemTimeAsFileTime([Out] out FILETIME time); + + public static void GetSystemTimeAsFileTime(out long time) { + FILETIME fileTime; + GetSystemTimeAsFileTime(out fileTime); + time = 0; + time |= (uint)fileTime.dwHighDateTime; + time <<= sizeof(uint) * 8; + time |= (uint)fileTime.dwLowDateTime; + } [Fx.Tag.SecurityNote(Critical = "Calls critical method GetSystemTimeAdjustment.", Safe = "Method is a SafeNativeMethod.")] diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityBindingElement.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityBindingElement.cs index 4220d500c1..baf6e2dfdb 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityBindingElement.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityBindingElement.cs @@ -3,6 +3,7 @@ //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { + using System.Security.Authentication; using System.ComponentModel; using System.Collections.Generic; using System.Net.Security; @@ -16,10 +17,12 @@ namespace System.ServiceModel.Channels { IdentityVerifier identityVerifier; bool requireClientCertificate; + SslProtocols sslProtocols; public SslStreamSecurityBindingElement() { this.requireClientCertificate = TransportDefaults.RequireClientCertificate; + this.sslProtocols = TransportDefaults.SslProtocols; } protected SslStreamSecurityBindingElement(SslStreamSecurityBindingElement elementToBeCloned) @@ -27,6 +30,7 @@ namespace System.ServiceModel.Channels { this.identityVerifier = elementToBeCloned.identityVerifier; this.requireClientCertificate = elementToBeCloned.requireClientCertificate; + this.sslProtocols = elementToBeCloned.sslProtocols; } public IdentityVerifier IdentityVerifier @@ -64,6 +68,20 @@ namespace System.ServiceModel.Channels } } + [DefaultValue(TransportDefaults.SslProtocols)] + public SslProtocols SslProtocols + { + get + { + return this.sslProtocols; + } + set + { + SslProtocolsHelper.Validate(value); + this.sslProtocols = value; + } + } + public override IChannelFactory BuildChannelFactory(BindingContext context) { if (context == null) @@ -218,7 +236,7 @@ namespace System.ServiceModel.Channels return false; } - return this.requireClientCertificate == ssl.requireClientCertificate; + return this.requireClientCertificate == ssl.requireClientCertificate && this.sslProtocols == ssl.sslProtocols; } [EditorBrowsable(EditorBrowsableState.Never)] diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityUpgradeProvider.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityUpgradeProvider.cs index 2def8e744e..a675b39930 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityUpgradeProvider.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/SslStreamSecurityUpgradeProvider.cs @@ -34,17 +34,19 @@ namespace System.ServiceModel.Channels bool requireClientCertificate; string scheme; bool enableChannelBinding; + SslProtocols sslProtocols; - SslStreamSecurityUpgradeProvider(IDefaultCommunicationTimeouts timeouts, SecurityTokenManager clientSecurityTokenManager, bool requireClientCertificate, string scheme, IdentityVerifier identityVerifier) + SslStreamSecurityUpgradeProvider(IDefaultCommunicationTimeouts timeouts, SecurityTokenManager clientSecurityTokenManager, bool requireClientCertificate, string scheme, IdentityVerifier identityVerifier, SslProtocols sslProtocols) : base(timeouts) { this.identityVerifier = identityVerifier; this.scheme = scheme; this.clientSecurityTokenManager = clientSecurityTokenManager; this.requireClientCertificate = requireClientCertificate; + this.sslProtocols = sslProtocols; } - SslStreamSecurityUpgradeProvider(IDefaultCommunicationTimeouts timeouts, SecurityTokenProvider serverTokenProvider, bool requireClientCertificate, SecurityTokenAuthenticator clientCertificateAuthenticator, string scheme, IdentityVerifier identityVerifier) + SslStreamSecurityUpgradeProvider(IDefaultCommunicationTimeouts timeouts, SecurityTokenProvider serverTokenProvider, bool requireClientCertificate, SecurityTokenAuthenticator clientCertificateAuthenticator, string scheme, IdentityVerifier identityVerifier, SslProtocols sslProtocols) : base(timeouts) { this.serverTokenProvider = serverTokenProvider; @@ -52,6 +54,7 @@ namespace System.ServiceModel.Channels this.clientCertificateAuthenticator = clientCertificateAuthenticator; this.identityVerifier = identityVerifier; this.scheme = scheme; + this.sslProtocols = sslProtocols; } public static SslStreamSecurityUpgradeProvider CreateClientProvider( @@ -65,7 +68,7 @@ namespace System.ServiceModel.Channels } SecurityTokenManager tokenManager = credentialProvider.CreateSecurityTokenManager(); - return new SslStreamSecurityUpgradeProvider(context.Binding, tokenManager, bindingElement.RequireClientCertificate, context.Binding.Scheme, bindingElement.IdentityVerifier); + return new SslStreamSecurityUpgradeProvider(context.Binding, tokenManager, bindingElement.RequireClientCertificate, context.Binding.Scheme, bindingElement.IdentityVerifier, bindingElement.SslProtocols); } public static SslStreamSecurityUpgradeProvider CreateServerProvider( @@ -99,7 +102,7 @@ namespace System.ServiceModel.Channels TransportSecurityHelpers.GetCertificateTokenAuthenticator(tokenManager, context.Binding.Scheme, listenUri); return new SslStreamSecurityUpgradeProvider(context.Binding, tokenProvider, bindingElement.RequireClientCertificate, - certificateAuthenticator, context.Binding.Scheme, bindingElement.IdentityVerifier); + certificateAuthenticator, context.Binding.Scheme, bindingElement.IdentityVerifier, bindingElement.SslProtocols); } public override EndpointIdentity Identity @@ -164,6 +167,11 @@ namespace System.ServiceModel.Channels get { return this.scheme; } } + public SslProtocols SslProtocols + { + get { return this.sslProtocols; } + } + public override T GetProperty() { if (typeof(T) == typeof(IChannelBindingProvider) || typeof(T) == typeof(IStreamUpgradeChannelBindingProvider)) @@ -589,7 +597,7 @@ namespace System.ServiceModel.Channels try { sslStream.AuthenticateAsServer(this.parent.ServerCertificate, this.parent.RequireClientCertificate, - SslProtocols.Default, false); + this.parent.SslProtocols, false); } catch (AuthenticationException exception) { @@ -703,7 +711,7 @@ namespace System.ServiceModel.Channels this.sslStream = new SslStream(stream, false, this.acceptor.ValidateRemoteCertificate); return this.sslStream.BeginAuthenticateAsServer(this.acceptor.parent.ServerCertificate, - this.acceptor.parent.RequireClientCertificate, SslProtocols.Default, false, callback, this); + this.acceptor.parent.RequireClientCertificate, this.acceptor.parent.SslProtocols, false, callback, this); } protected override Stream OnCompleteAuthenticateAsServer(IAsyncResult result) @@ -910,7 +918,7 @@ namespace System.ServiceModel.Channels SslStream sslStream = new SslStream(stream, false, this.ValidateRemoteCertificate, selectionCallback); try { - sslStream.AuthenticateAsClient(string.Empty, clientCertificates, SslProtocols.Default, false); + sslStream.AuthenticateAsClient(string.Empty, clientCertificates, this.parent.SslProtocols, false); } catch (SecurityTokenValidationException tokenValidationException) { @@ -995,7 +1003,7 @@ namespace System.ServiceModel.Channels try { return this.sslStream.BeginAuthenticateAsClient(string.Empty, this.clientCertificates, - SslProtocols.Default, false, callback, this); + this.initiator.parent.SslProtocols, false, callback, this); } catch (SecurityTokenValidationException tokenValidationException) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportDefaults.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportDefaults.cs index ce6834f178..4de327474f 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportDefaults.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/TransportDefaults.cs @@ -8,6 +8,7 @@ namespace System.ServiceModel.Channels using System.Net.Security; using System.Net.WebSockets; using System.Runtime; + using System.Security.Authentication; using System.Security.Principal; using System.ServiceModel; using System.ServiceModel.Dispatcher; @@ -201,6 +202,10 @@ namespace System.ServiceModel.Channels internal const bool RequireClientCertificate = false; internal const int MaxFaultSize = MaxBufferSize; internal const int MaxSecurityFaultSize = 16384; + internal const SslProtocols SslProtocols = System.Security.Authentication.SslProtocols.Ssl3 | + System.Security.Authentication.SslProtocols.Tls | + System.Security.Authentication.SslProtocols.Tls11 | + System.Security.Authentication.SslProtocols.Tls12; // Calling CreateFault on an incoming message can expose some DoS-related security // vulnerabilities when a service is in streaming mode. See MB 47592 for more details. diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/UnsafeNativeMethods.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/UnsafeNativeMethods.cs index 647dce82c4..bade3dab69 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/UnsafeNativeMethods.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/UnsafeNativeMethods.cs @@ -1099,6 +1099,12 @@ namespace System.ServiceModel.Channels [MarshalAs(UnmanagedType.U1), Out] out bool pfEnabled ); + +#if !FEATURE_CORECLR + // On CoreCLR this is not the way to determine if a process is a tailored application (which means APPX). + // On CoreCLR AppX is determined by a flag past to the host which is exposed by AppDomain.IsAppXProcess in mscorlib. + // The reason for this if-def is to ensure nobody takes a dependency on this on CoreCLR. + // AppModel.h functions (Win8+) [DllImport(KERNEL32, CharSet = CharSet.None, EntryPoint = "GetCurrentPackageId")] [SecurityCritical] @@ -1128,6 +1134,7 @@ namespace System.ServiceModel.Channels /// Indicates weather the running application is an immersive (or modern) Windows 8 (or later) application. /// internal static Lazy IsTailoredApplication = new Lazy(() => _IsTailoredApplication()); +#endif //!FEATURE_CORECLR } [SuppressUnmanagedCodeSecurity] diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/WebSocketTransportDuplexSessionChannel.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/WebSocketTransportDuplexSessionChannel.cs index b342bddf9e..91558a6d54 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/WebSocketTransportDuplexSessionChannel.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Channels/WebSocketTransportDuplexSessionChannel.cs @@ -664,7 +664,7 @@ namespace System.ServiceModel.Channels new ArraySegment(internalBuffer, receivedByteCount, internalBuffer.Length - receivedByteCount), CancellationToken.None); - await receiveTask.ContinueOnCapturedContextFlow(); + await receiveTask.ConfigureAwait(false); result = receiveTask.Result; this.CheckCloseStatus(result); @@ -847,7 +847,8 @@ namespace System.ServiceModel.Channels if (this.streamWaitTask != null) { //// Wait until the previous stream message finished. - await this.streamWaitTask.Task.ContinueOnCapturedContextFlow(); + + await this.streamWaitTask.Task.ConfigureAwait(false); } this.streamWaitTask = new TaskCompletionSource(); @@ -857,7 +858,7 @@ namespace System.ServiceModel.Channels { if (!this.useStreaming) { - await this.ReadBufferedMessageAsync(); + await this.ReadBufferedMessageAsync().ConfigureAwait(false); } else { @@ -875,7 +876,8 @@ namespace System.ServiceModel.Channels Task receiveTask = this.webSocket.ReceiveAsync( new ArraySegment(buffer, 0, this.receiveBufferSize), CancellationToken.None); - await receiveTask.ContinueOnCapturedContextFlow(); + + await receiveTask.ConfigureAwait(false); WebSocketReceiveResult result = receiveTask.Result; this.CheckCloseStatus(result); diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IClassFactory.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IClassFactory.cs index 66772f888a..4d9c3b8699 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IClassFactory.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IClassFactory.cs @@ -11,4 +11,4 @@ internal interface IClassFactory [return: MarshalAs(UnmanagedType.Interface)] object CreateInstance([In, MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid); void LockServer([In, MarshalAs(UnmanagedType.Bool)]bool fLock); -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IContextSecurityPerimeter.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IContextSecurityPerimeter.cs index 06d679d8bc..d21b965591 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IContextSecurityPerimeter.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IContextSecurityPerimeter.cs @@ -16,4 +16,4 @@ namespace System.ServiceModel.ComIntegration void SetPerimeterFlag([MarshalAs(UnmanagedType.Bool)] bool flag); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IServerSecurity.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IServerSecurity.cs index 7fb9461b3c..a0d0fb6253 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IServerSecurity.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/IServerSecurity.cs @@ -30,4 +30,4 @@ namespace System.ServiceModel.ComIntegration bool IsImpersonating(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/SafeNativeMethods.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/SafeNativeMethods.cs index 5a64e2fec1..5b37e80a69 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/SafeNativeMethods.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ComIntegration/SafeNativeMethods.cs @@ -56,7 +56,7 @@ namespace System.ServiceModel.ComIntegration ACTIVATE_LOCAL = 0x08, ACTIVATE_REMOTE = 0x10 } - + enum TOKEN_INFORMATION_CLASS { TokenUser = 1, @@ -96,6 +96,7 @@ namespace System.ServiceModel.ComIntegration ERROR_INSUFFICIENT_BUFFER = 122, ERROR_NO_TOKEN = 1008, ERROR_NONE_MAPPED = 1332, + ERROR_NO_SUCH_DOMAIN = 1355, } enum EXTENDED_NAME_FORMAT @@ -112,6 +113,32 @@ namespace System.ServiceModel.ComIntegration NameDnsDomainName = 12 } + [Flags] + enum DSFlags : uint + { + DS_FORCE_REDISCOVERY = 0x00000001, + DS_DIRECTORY_SERVICE_REQUIRED = 0x00000010, + DS_DIRECTORY_SERVICE_PREFERRED = 0x00000020, + DS_GC_SERVER_REQUIRED = 0x00000040, + DS_PDC_REQUIRED = 0x00000080, + DS_BACKGROUND_ONLY = 0x00000100, + DS_IP_REQUIRED = 0x00000200, + DS_KDC_REQUIRED = 0x00000400, + DS_TIMESERV_REQUIRED = 0x00000800, + DS_WRITABLE_REQUIRED = 0x00001000, + DS_GOOD_TIMESERV_PREFERRED = 0x00002000, + DS_AVOID_SELF = 0x00004000, + DS_ONLY_LDAP_NEEDED = 0x00008000, + DS_IS_FLAT_NAME = 0x00010000, + DS_IS_DNS_NAME = 0x00020000, + DS_TRY_NEXTCLOSEST_SITE = 0x00040000, + DS_DIRECTORY_SERVICE_6_REQUIRED = 0x00080000, + DS_WEB_SERVICE_REQUIRED = 0x00100000, + DS_DIRECTORY_SERVICE_8_REQUIRED = 0x00200000, + DS_RETURN_DNS_NAME = 0x40000000, + DS_RETURN_FLAT_NAME = 0x80000000, + } + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] struct TagVariant { @@ -228,6 +255,7 @@ namespace System.ServiceModel.ComIntegration internal const String OLEAUT32 = "oleaut32.dll"; internal const String COMSVCS = "comsvcs.dll"; internal const String SECUR32 = "secur32.dll"; + internal const String NETAPI32 = "netapi32.dll"; internal const int ERROR_MORE_DATA = 0xEA; internal const int ERROR_SUCCESS = 0; @@ -493,7 +521,21 @@ namespace System.ServiceModel.ComIntegration [DllImport(SECUR32, CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.U1)] [ResourceExposure(ResourceScope.None)] - internal extern static bool TranslateName(string input, EXTENDED_NAME_FORMAT inputFormat, EXTENDED_NAME_FORMAT outputFormat, StringBuilder outputString, out uint size); + internal static extern bool TranslateName(string input, EXTENDED_NAME_FORMAT inputFormat, EXTENDED_NAME_FORMAT outputFormat, StringBuilder outputString, out uint size); + + [DllImport(NETAPI32, ExactSpelling = true, EntryPoint = "DsGetDcNameW", CharSet = CharSet.Unicode, SetLastError = true)] + [ResourceExposure(ResourceScope.None)] + internal static extern int DsGetDcName( + [In] string computerName, + [In] string domainName, + [In] IntPtr domainGuid, + [In] string siteName, + [In] uint flags, + [Out] out IntPtr domainControllerInfo); + + [DllImport(NETAPI32)] + [ResourceExposure(ResourceScope.None)] + internal static extern int NetApiBufferFree([In] IntPtr buffer); } internal static class InterfaceHelper diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ConfigurationStrings.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ConfigurationStrings.cs index 390b21cd4b..6d3b0516ad 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ConfigurationStrings.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ConfigurationStrings.cs @@ -401,6 +401,7 @@ namespace System.ServiceModel.Configuration internal const string Soap12WSAddressing10 = "Soap12WSAddressing10"; internal const string Soap12WSAddressingAugust2004 = "Soap12WSAddressingAugust2004"; internal const string SslCertificateAuthentication = "sslCertificateAuthentication"; + internal const string SslProtocols = "sslProtocols"; internal const string SslStreamSecuritySectionName = "sslStreamSecurity"; internal const string StandardEndpoint = "standardEndpoint"; internal const string StandardEndpointsSectionName = "standardEndpoints"; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/Properties.cs.REMOVED.git-id b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/Properties.cs.REMOVED.git-id index 2c0a46ea13..574f59fed7 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/Properties.cs.REMOVED.git-id +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/Properties.cs.REMOVED.git-id @@ -1 +1 @@ -0d026927dac6a667d11d34c7ee6cb903c3d5c1c6 \ No newline at end of file +35c78297859f7342bb6f1137a045ea1bf79b932c \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ServiceMetadataEndpointCollectionElement.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ServiceMetadataEndpointCollectionElement.cs index 63590402f6..4cac2ac309 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ServiceMetadataEndpointCollectionElement.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/ServiceMetadataEndpointCollectionElement.cs @@ -12,4 +12,4 @@ namespace System.ServiceModel.Configuration public partial class ServiceMetadataEndpointCollectionElement : StandardEndpointCollectionElement { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/SslStreamSecurityElement.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/SslStreamSecurityElement.cs index fdcc8f9805..025ebc7943 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/SslStreamSecurityElement.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/SslStreamSecurityElement.cs @@ -5,7 +5,9 @@ namespace System.ServiceModel.Configuration { using System.Configuration; + using System.Security.Authentication; using System.ServiceModel.Channels; + using System.ServiceModel.Security; public sealed partial class SslStreamSecurityElement : BindingElementExtensionElement { @@ -21,12 +23,22 @@ namespace System.ServiceModel.Configuration set { base[ConfigurationStrings.RequireClientCertificate] = value; } } + [ConfigurationProperty(ConfigurationStrings.SslProtocols, DefaultValue = TransportDefaults.SslProtocols)] + [ServiceModelEnumValidator(typeof(SslProtocolsHelper))] + public SslProtocols SslProtocols + { + get { return (SslProtocols)base[ConfigurationStrings.SslProtocols]; } + private set { base[ConfigurationStrings.SslProtocols] = value; } + } + + public override void ApplyConfiguration(BindingElement bindingElement) { base.ApplyConfiguration(bindingElement); SslStreamSecurityBindingElement sslBindingElement = (SslStreamSecurityBindingElement)bindingElement; sslBindingElement.RequireClientCertificate = this.RequireClientCertificate; + sslBindingElement.SslProtocols = this.SslProtocols; } protected internal override BindingElement CreateBindingElement() @@ -50,6 +62,7 @@ namespace System.ServiceModel.Configuration SslStreamSecurityElement source = (SslStreamSecurityElement)from; #pragma warning suppress 56506 // [....], base.CopyFrom() validates the argument this.RequireClientCertificate = source.RequireClientCertificate; + this.SslProtocols = source.SslProtocols; } protected internal override void InitializeFrom(BindingElement bindingElement) @@ -58,6 +71,7 @@ namespace System.ServiceModel.Configuration SslStreamSecurityBindingElement sslBindingElement = (SslStreamSecurityBindingElement)bindingElement; SetPropertyValueIfNotDefaultValue(ConfigurationStrings.RequireClientCertificate, sslBindingElement.RequireClientCertificate); + SetPropertyValueIfNotDefaultValue(ConfigurationStrings.SslProtocols, sslBindingElement.SslProtocols); } } } diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/TcpTransportSecurityElement.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/TcpTransportSecurityElement.cs index 8dd7f7a821..c07d01f40a 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/TcpTransportSecurityElement.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Configuration/TcpTransportSecurityElement.cs @@ -13,6 +13,7 @@ namespace System.ServiceModel.Configuration using System.ServiceModel; using System.ServiceModel.Security; using System.ComponentModel; + using System.Security.Authentication; public sealed partial class TcpTransportSecurityElement : ServiceModelConfigurationElement { @@ -39,6 +40,14 @@ namespace System.ServiceModel.Configuration private set { base[ConfigurationStrings.ExtendedProtectionPolicy] = value; } } + [ConfigurationProperty(ConfigurationStrings.SslProtocols, DefaultValue = TransportDefaults.SslProtocols)] + [ServiceModelEnumValidator(typeof(SslProtocolsHelper))] + public SslProtocols SslProtocols + { + get { return (SslProtocols)base[ConfigurationStrings.SslProtocols]; } + private set { base[ConfigurationStrings.SslProtocols] = value; } + } + internal void ApplyConfiguration(TcpTransportSecurity security) { if (security == null) @@ -48,6 +57,7 @@ namespace System.ServiceModel.Configuration security.ClientCredentialType = this.ClientCredentialType; security.ProtectionLevel = this.ProtectionLevel; security.ExtendedProtectionPolicy = ChannelBindingUtility.BuildPolicy(this.ExtendedProtectionPolicy); + security.SslProtocols = this.SslProtocols; } internal void InitializeFrom(TcpTransportSecurity security) @@ -59,6 +69,7 @@ namespace System.ServiceModel.Configuration SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ClientCredentialType, security.ClientCredentialType); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProtectionLevel, security.ProtectionLevel); ChannelBindingUtility.InitializeFrom(security.ExtendedProtectionPolicy, this.ExtendedProtectionPolicy); + SetPropertyValueIfNotDefaultValue(ConfigurationStrings.SslProtocols, security.SslProtocols); } } } diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/DispatcherBuilder.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/DispatcherBuilder.cs index f3625150b0..1106d1758c 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/DispatcherBuilder.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/DispatcherBuilder.cs @@ -788,6 +788,12 @@ namespace System.ServiceModel.Description } } // end foreach "endpoint" + // Clear performance counter cache. + if ((PerformanceCounters.PerformanceCountersEnabled || PerformanceCounters.MinimalPerformanceCountersEnabled) && ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + System.Diagnostics.PerformanceCounter.CloseSharedResources(); + } + if (canReceiveInTransaction) { BindingElementCollection bindingElements = binding.CreateBindingElements(); diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IPolicyImportExtension.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IPolicyImportExtension.cs index aef0d3ff6c..66d83a9cdb 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IPolicyImportExtension.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IPolicyImportExtension.cs @@ -8,4 +8,4 @@ namespace System.ServiceModel.Description { void ImportPolicy(MetadataImporter importer, PolicyConversionContext context); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlExportExtension.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlExportExtension.cs index 8f21363d28..263bff5c4b 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlExportExtension.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlExportExtension.cs @@ -10,4 +10,4 @@ namespace System.ServiceModel.Description void ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlImportExtension.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlImportExtension.cs index 992b4d989b..4166891415 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlImportExtension.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Description/IWsdlImportExtension.cs @@ -17,4 +17,4 @@ namespace System.ServiceModel.Description void ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext context); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ActivityType.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ActivityType.cs index 4c4431f847..951d2e5f3a 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ActivityType.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ActivityType.cs @@ -22,4 +22,4 @@ namespace System.ServiceModel.Diagnostics WmiPutInstance, NumItems, // leave this item at the end of the list. } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs index 89aa50b117..95b174c15c 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs @@ -77,9 +77,14 @@ namespace System.ServiceModel.Diagnostics this.instanceName = CreateFriendlyInstanceName(service, contract, uri); } - static internal string CreateFriendlyInstanceName(string service, string contract, string uri) + private static string GetFullInstanceName(string service, string contract, string uri) { // instance name is: serviceName.interfaceName.operationName@uri + return String.Format("{0}.{1}@{2}", service, contract, uri); + } + + private static string GetShortInstanceName(string service, string contract, string uri) + { int length = service.Length + contract.Length + uri.Length + 2; if (length > maxCounterLength) @@ -115,6 +120,32 @@ namespace System.ServiceModel.Diagnostics return service + "." + contract + "@" + uri.Replace('/', '|'); } + internal static string CreateFriendlyInstanceName(string service, string contract, string uri) + { + string shortInstanceName = GetShortInstanceName(service, contract, uri); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(service, contract, uri); + + return EnsureUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELENDPOINT.EndpointPerfCounters, shortInstanceName, fullInstanceName); + } + + internal static string GetFriendlyInstanceName(string service, string contract, string uri) + { + string shortInstanceName = GetShortInstanceName(service, contract, uri); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(service, contract, uri); + + return GetUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELENDPOINT.EndpointPerfCounters, shortInstanceName, fullInstanceName); + } + private static truncOptions GetCompressionTasks(int totalLen, int serviceLen, int contractLen, int uriLen) { truncOptions bitmask = 0; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersV2.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersV2.cs index 930153e8e2..447f3c6cdb 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersV2.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersV2.cs @@ -154,6 +154,18 @@ namespace System.ServiceModel.Diagnostics get { return this.endpointCounterSetInstance != null; } } + // Immediately disposes and nulls the CounterSetInstance. This differs from Dispose because Dispose is "lazy" in that + // it holds weak references to the instances so we don't get corrupted state if the values are updated later. This + // method is used in situations when we need to delete the instance immediately and know the values won't be updated. + internal void DeleteInstance() + { + if (this.endpointCounterSetInstance != null) + { + this.endpointCounterSetInstance.Dispose(); + this.endpointCounterSetInstance = null; + } + } + protected override void Dispose(bool disposing) { try diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/MessageLogger.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/MessageLogger.cs index 3b84da0fe1..10237200ca 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/MessageLogger.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/MessageLogger.cs @@ -489,7 +489,7 @@ namespace System.ServiceModel.Diagnostics { if ((source & MessageLoggingSource.Malformed) != 0) { - if (!TD.MessageLogWarning(data.ToString())) + if (TD.MessageLogWarningIsEnabled() && !TD.MessageLogWarning(data.ToString())) { if (TD.MessageLogEventSizeExceededIsEnabled()) { @@ -499,7 +499,7 @@ namespace System.ServiceModel.Diagnostics } else { - if (!TD.MessageLogInfo(data.ToString())) + if (TD.MessageLogInfoIsEnabled() && !TD.MessageLogInfo(data.ToString())) { if (TD.MessageLogEventSizeExceededIsEnabled()) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs index d6f84e4612..4e53f24b33 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs @@ -72,9 +72,15 @@ namespace System.ServiceModel.Diagnostics this.instanceName = CreateFriendlyInstanceName(service, contract, operationName, uri); } - static internal string CreateFriendlyInstanceName(string service, string contract, string operation, string uri) + + private static string GetFullInstanceName(string service, string contract, string operation, string uri) { // instance name is: serviceName.interfaceName.operationName@uri + return String.Format("{0}.{1}.{2}@{3}", service, contract, operation, uri); + } + + private static string GetShortInstanceName(string service, string contract, string operation, string uri) + { int length = service.Length + contract.Length + operation.Length + uri.Length + 3; if (length > maxCounterLength) @@ -117,6 +123,32 @@ namespace System.ServiceModel.Diagnostics return service + "." + contract + "." + operation + "@" + uri.Replace('/', '|'); } + internal static string CreateFriendlyInstanceName(string service, string contract, string operation, string uri) + { + string shortInstanceName = GetShortInstanceName(service, contract, operation, uri); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(service, contract, operation, uri); + + return EnsureUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELOPERATION.OperationPerfCounters, shortInstanceName, fullInstanceName); + } + + internal static string GetFriendlyInstanceName(string service, string contract, string operation, string uri) + { + string shortInstanceName = GetShortInstanceName(service, contract, operation, uri); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(service, contract, operation, uri); + + return GetUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELOPERATION.OperationPerfCounters, shortInstanceName, fullInstanceName); + } + static truncOptions GetCompressionTasks(int totalLen, int serviceLen, int contractLen, int operationLen, int uriLen) { truncOptions bitmask = 0; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersV2.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersV2.cs index 697a2e1163..0226391b1c 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersV2.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersV2.cs @@ -139,6 +139,18 @@ namespace System.ServiceModel.Diagnostics get { return this.operationCounterSetInstance != null; } } + // Immediately disposes and nulls the CounterSetInstance. This differs from Dispose because Dispose is "lazy" in that + // it holds weak references to the instances so we don't get corrupted state if the values are updated later. This + // method is used in situations when we need to delete the instance immediately and know the values won't be updated. + internal void DeleteInstance() + { + if (this.operationCounterSetInstance != null) + { + this.operationCounterSetInstance.Dispose(); + this.operationCounterSetInstance = null; + } + } + protected override void Dispose(bool disposing) { try diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersBase.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersBase.cs index b2988a8b22..3043e5afe7 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersBase.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersBase.cs @@ -33,11 +33,67 @@ namespace System.ServiceModel.Diagnostics get; } + private static string GetInstanceNameWithHash(string instanceName, string fullInstanceName) + { + return String.Format("{0}{1}", instanceName, StringUtil.GetNonRandomizedHashCode(fullInstanceName).ToString("X", CultureInfo.InvariantCulture)); + } + + protected static string EnsureUniqueInstanceName(string categoryName, string instanceName, string fullInstanceName) + { + if (String.IsNullOrEmpty(categoryName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("categoryName"); + if (String.IsNullOrEmpty(instanceName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("instanceName"); + if (String.IsNullOrEmpty(fullInstanceName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("fullInstanceName"); + + try + { + // If the instance name is already used, append a hash of the full name to it. + if (PerformanceCounterCategory.InstanceExists(instanceName, categoryName)) + { + return GetInstanceNameWithHash(instanceName, fullInstanceName); + } + } + catch + { + // If an exception is thrown, return the instance name without modification. + } + + return instanceName; + } + + protected static string GetUniqueInstanceName(string categoryName, string instanceName, string fullInstanceName) + { + if (String.IsNullOrEmpty(categoryName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("categoryName"); + if (String.IsNullOrEmpty(instanceName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("instanceName"); + if (String.IsNullOrEmpty(fullInstanceName)) + throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNullOrEmptyString("fullInstanceName"); + + try + { + // If the instance name with the hash appended exists, return it. + string nameWithHash = GetInstanceNameWithHash(instanceName, fullInstanceName); + if (PerformanceCounterCategory.InstanceExists(nameWithHash, categoryName)) + { + return nameWithHash; + } + } + catch + { + // If an exception is thrown, return the instance name without modification. + } + + return instanceName; + } + // remove count chars from string and add a 2 char hash code to beginning or end, as specified. protected static string GetHashedString(string str, int startIndex, int count, bool hashAtEnd) { string returnVal = str.Remove(startIndex, count); - string hash = ((uint)str.GetHashCode() % 99).ToString("00", CultureInfo.InvariantCulture); + string hash = ((uint)StringUtil.GetNonRandomizedHashCode(str) % 99).ToString("00", CultureInfo.InvariantCulture); return hashAtEnd ? returnVal + hash : hash + returnVal; } diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersFactory.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersFactory.cs index 5f540b16b9..d5dbfcb93e 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersFactory.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/PerformanceCountersFactory.cs @@ -9,6 +9,8 @@ namespace System.ServiceModel.Diagnostics static class PerformanceCountersFactory { + private static bool categoriesExist = false; + static internal ServicePerformanceCountersBase CreateServiceCounters(ServiceHostBase serviceHost) { if (!CheckPermissions()) @@ -20,6 +22,7 @@ namespace System.ServiceModel.Diagnostics { try { + EnsureCategoriesExistIfNeeded(); var counters = new ServicePerformanceCountersV2(serviceHost); // Workaround Sys.Diag.PerformanceData problem: // Ensure that all three categories are initialized so other processes can still @@ -60,6 +63,7 @@ namespace System.ServiceModel.Diagnostics { try { + EnsureCategoriesExistIfNeeded(); return new EndpointPerformanceCountersV2(service, contract, uri); } #pragma warning suppress 56500 // covered by FxCOP @@ -94,6 +98,7 @@ namespace System.ServiceModel.Diagnostics { try { + EnsureCategoriesExistIfNeeded(); return new OperationPerformanceCountersV2(service, contract, operationName, uri); } #pragma warning suppress 56500 // covered by FxCOP @@ -139,5 +144,81 @@ namespace System.ServiceModel.Diagnostics return false; } + + // If EnsureUniquePerformanceCounterInstanceName is enabled, PerformanceCountersBase.cs will be checking if instances + // exist in each of these categories, so we need to ensure the categories all exist. This works around System.Diagnostics + // calls using PerformanceCounterLib to cache which categories do/don't exist. + private static void EnsureCategoriesExistIfNeeded() + { + if (categoriesExist || !ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return; + } + + OperationPerformanceCountersV2 operationCounter = null; + EndpointPerformanceCountersV2 endpointCounter = null; + ServicePerformanceCountersV2 serviceCounter = null; + + try + { + if (PerformanceCounterCategory.Exists(PerformanceCounterStrings.SERVICEMODELOPERATION.OperationPerfCounters) && + PerformanceCounterCategory.Exists(PerformanceCounterStrings.SERVICEMODELENDPOINT.EndpointPerfCounters) && + PerformanceCounterCategory.Exists(PerformanceCounterStrings.SERVICEMODELSERVICE.ServicePerfCounters)) + { + categoriesExist = true; + return; + } + + // Categories do not exist. Update PerformanceCounterLib's cache using dummy counters. + const string dummyValue = "_WCF_Admin"; + + + // Older operating systems (such as windows 7) report the category as not existing unless a counter instance + // has been created in it. Create one instance in each of the categories to ensure they will exist in the cache + // that System.Diagnostics calls use. + ServiceHost dummyServiceHost = new ServiceHost(typeof(object), new Uri("http://" + dummyValue)); + operationCounter = new OperationPerformanceCountersV2(dummyValue, dummyValue, dummyValue, dummyValue); + endpointCounter = new EndpointPerformanceCountersV2(dummyValue, dummyValue, dummyValue); + serviceCounter = new ServicePerformanceCountersV2(dummyServiceHost); + + // Throw away cached categories, then read from the categories to cause the cache to be repopulated. + PerformanceCounter.CloseSharedResources(); + PerformanceCounterCategory.Exists(dummyValue); + } + catch (UnauthorizedAccessException) + { + // Don't have permission to read performance counters. Trace a warning. + if (DiagnosticUtility.ShouldTraceWarning) + { + TraceUtility.TraceEvent(TraceEventType.Warning, + TraceCode.PerformanceCountersFailedForService, + SR.GetString(SR.EnsureCategoriesExistFailedPermission)); + } + } + catch + { + // Failed to ensure all of the categories exist. Catch the exception and try to create the counter anyway. + } + finally + { + // Delete the dummy counters, we don't need them anymore. + if (operationCounter != null) + { + operationCounter.DeleteInstance(); + } + + if (endpointCounter != null) + { + endpointCounter.DeleteInstance(); + } + + if (serviceCounter != null) + { + serviceCounter.DeleteInstance(); + } + + categoriesExist = true; + } + } } } diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs index 547633b753..0443a521d5 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs @@ -143,16 +143,31 @@ namespace System.ServiceModel.Diagnostics get { return (int)PerfCounters.TotalCounters; } } - static internal string CreateFriendlyInstanceName(ServiceHostBase serviceHost) + private static string GetServiceUri(ServiceHostBase serviceHost, ServiceInfo serviceInfo) { - // instance name is: serviceName@uri - ServiceInfo serviceInfo = new ServiceInfo(serviceHost); - string serviceName = serviceInfo.ServiceName; string uri; if (!TryGetFullVirtualPath(serviceHost, out uri)) { uri = serviceInfo.FirstAddress; } + return uri; + } + + private static string GetFullInstanceName(ServiceHostBase serviceHost) + { + // instance name is: serviceName@uri + ServiceInfo serviceInfo = new ServiceInfo(serviceHost); + string serviceName = serviceInfo.ServiceName; + string uri = GetServiceUri(serviceHost, serviceInfo); + return String.Format("{0}@{1}", serviceName, uri); + } + + private static string GetShortInstanceName(ServiceHostBase serviceHost) + { + ServiceInfo serviceInfo = new ServiceInfo(serviceHost); + string serviceName = serviceInfo.ServiceName; + string uri = GetServiceUri(serviceHost, serviceInfo); + int length = serviceName.Length + uri.Length + 2; if (length > maxCounterLength) @@ -181,6 +196,32 @@ namespace System.ServiceModel.Diagnostics return serviceName + "@" + uri.Replace('/', '|'); } + internal static string CreateFriendlyInstanceName(ServiceHostBase serviceHost) + { + string shortInstanceName = GetShortInstanceName(serviceHost); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(serviceHost); + + return EnsureUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELSERVICE.ServicePerfCounters, shortInstanceName, fullInstanceName); + } + + internal static string GetFriendlyInstanceName(ServiceHostBase serviceHost) + { + string shortInstanceName = GetShortInstanceName(serviceHost); + if (!ServiceModelAppSettings.EnsureUniquePerformanceCounterInstanceNames) + { + return shortInstanceName; + } + + string fullInstanceName = GetFullInstanceName(serviceHost); + + return GetUniqueInstanceName(PerformanceCounterStrings.SERVICEMODELSERVICE.ServicePerfCounters, shortInstanceName, fullInstanceName); + } + static bool TryGetFullVirtualPath(ServiceHostBase serviceHost, out string uri) { VirtualPathExtension pathExtension = serviceHost.Extensions.Find(); diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersV2.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersV2.cs index 9e53c72fe2..b037f388f4 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersV2.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersV2.cs @@ -232,6 +232,18 @@ using System.ServiceModel.Administration; get { return this.serviceCounterSetInstance != null; } } + // Immediately disposes and nulls the CounterSetInstance. This differs from Dispose because Dispose is "lazy" in that + // it holds weak references to the instances so we don't get corrupted state if the values are updated later. This + // method is used in situations when we need to delete the instance immediately and know the values won't be updated. + internal void DeleteInstance() + { + if (this.serviceCounterSetInstance != null) + { + this.serviceCounterSetInstance.Dispose(); + this.serviceCounterSetInstance = null; + } + } + protected override void Dispose(bool disposing) { try diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/TraceUtility.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/TraceUtility.cs index c51655adf8..17d2b24eaf 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/TraceUtility.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Diagnostics/TraceUtility.cs @@ -554,6 +554,24 @@ namespace System.ServiceModel.Diagnostics return retval; } + + internal static ServiceModelActivity ExtractActivity(RequestContext request) + { + try + { + return TraceUtility.ExtractActivity(request.RequestMessage); + } + catch (Exception e) + { + if (Fx.IsFatal(e)) + { + throw; + } + } + + return null; + } + internal static Guid ExtractActivityId(Message message) { if (TraceUtility.MessageFlowTracingOnly) diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ChannelHandler.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ChannelHandler.cs index 317a6f9a56..d4c7285a86 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ChannelHandler.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ChannelHandler.cs @@ -5,6 +5,7 @@ namespace System.ServiceModel.Dispatcher { using System; + using System.Diagnostics; using System.Globalization; using System.Runtime; using System.Runtime.CompilerServices; @@ -769,7 +770,7 @@ namespace System.ServiceModel.Dispatcher bool HandleError(Exception e, ref ErrorHandlerFaultInfo faultInfo) { - if (!(e != null)) + if (e == null) { Fx.Assert(SR.GetString(SR.GetString(SR.SFxNonExceptionThrown))); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.GetString(SR.SFxNonExceptionThrown)))); @@ -944,7 +945,8 @@ namespace System.ServiceModel.Dispatcher return false; } - ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? TraceUtility.ExtractActivity(request.RequestMessage) : null; + ServiceModelActivity activity = DiagnosticUtility.ShouldUseActivity ? TraceUtility.ExtractActivity(request) : null; + using (ServiceModelActivity.BoundOperation(activity)) { if (this.HandleRequestAsReply(request)) @@ -1440,7 +1442,7 @@ namespace System.ServiceModel.Dispatcher { if (this.isConcurrent) { - this.isPumpAcquired = 0; + Interlocked.Exchange(ref this.isPumpAcquired, 0); } } @@ -1793,8 +1795,6 @@ namespace System.ServiceModel.Dispatcher } this.requestInfo.ChannelHandlerOwnsInstanceContextThrottle = (this.requestInfo.ExistingInstanceContext == null); - - if (this.DispatchAndReleasePump(request, false, null)) { this.EnsurePump(); @@ -1802,9 +1802,42 @@ namespace System.ServiceModel.Dispatcher } } + bool TryRetrievingInstanceContext(RequestContext request) + { + try + { + return TryRetrievingInstanceContextCore(request); + } + catch (Exception ex) + { + if (Fx.IsFatal(ex)) + { + throw; + } + + DiagnosticUtility.TraceHandledException(ex, TraceEventType.Error); + + try + { + request.Close(); + } + catch (Exception e) + { + if (Fx.IsFatal(e)) + { + throw; + } + + request.Abort(); + } + + return false; + } + } + //Return: False denotes failure, Caller should discard the request. // : True denotes operation is sucessful. - bool TryRetrievingInstanceContext(RequestContext request) + bool TryRetrievingInstanceContextCore(RequestContext request) { bool releasePump = true; try @@ -1870,6 +1903,7 @@ namespace System.ServiceModel.Dispatcher } this.HandleError(e, request, channel); + return false; } finally @@ -1949,10 +1983,7 @@ namespace System.ServiceModel.Dispatcher { if (this.isConcurrent) { - if (this.isPumpAcquired != 0 || Interlocked.CompareExchange(ref this.isPumpAcquired, 1, 0) != 0) - { - return false; - } + return Interlocked.CompareExchange(ref this.isPumpAcquired, 1, 0) == 0; } return true; diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ImmutableDispatchRuntime.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ImmutableDispatchRuntime.cs index cb52945280..caf32a6274 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ImmutableDispatchRuntime.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ImmutableDispatchRuntime.cs @@ -1030,7 +1030,7 @@ namespace System.ServiceModel.Dispatcher void ProcessMessage31(ref MessageRpc rpc) { - rpc.NextProcessor = this.ProcessMessage4; + rpc.NextProcessor = this.processMessage4; if (this.transaction != null) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ServiceThrottle.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ServiceThrottle.cs index b7fa151262..1712f11c32 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ServiceThrottle.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Dispatcher/ServiceThrottle.cs @@ -50,16 +50,23 @@ namespace System.ServiceModel.Dispatcher { get { - lock (this.ThisLock) + if (this.calls == null) { - if (this.calls == null) + lock (this.ThisLock) { - this.calls = new FlowThrottle(this.GotCall, ServiceThrottle.DefaultMaxConcurrentCallsCpuCount, - ServiceThrottle.MaxConcurrentCallsPropertyName, ServiceThrottle.MaxConcurrentCallsConfigName); - this.calls.SetRatio(this.RatioCallsToken); + if (this.calls == null) + { + FlowThrottle callsFt = new FlowThrottle(this.GotCall, ServiceThrottle.DefaultMaxConcurrentCallsCpuCount, + ServiceThrottle.MaxConcurrentCallsPropertyName, ServiceThrottle.MaxConcurrentCallsConfigName); + + callsFt.SetRatio(this.RatioCallsToken); + + this.calls = callsFt; + } } - return this.calls; } + + return this.calls; } } @@ -67,16 +74,23 @@ namespace System.ServiceModel.Dispatcher { get { - lock (this.ThisLock) + if (this.sessions == null) { - if (this.sessions == null) + lock (this.ThisLock) { - this.sessions = new FlowThrottle(this.GotSession, ServiceThrottle.DefaultMaxConcurrentSessionsCpuCount, - ServiceThrottle.MaxConcurrentSessionsPropertyName, ServiceThrottle.MaxConcurrentSessionsConfigName); - this.sessions.SetRatio(this.RatioSessionsToken); + if (this.sessions == null) + { + FlowThrottle sessionsFt = new FlowThrottle(this.GotSession, ServiceThrottle.DefaultMaxConcurrentSessionsCpuCount, + ServiceThrottle.MaxConcurrentSessionsPropertyName, ServiceThrottle.MaxConcurrentSessionsConfigName); + + sessionsFt.SetRatio(this.RatioSessionsToken); + + this.sessions = sessionsFt; + } } - return this.sessions; } + + return this.sessions; } } @@ -84,16 +98,22 @@ namespace System.ServiceModel.Dispatcher { get { - lock (this.ThisLock) + if (this.dynamic == null) { - if (this.dynamic == null) + lock (this.ThisLock) { - this.dynamic = new QuotaThrottle(this.GotDynamic, new object()); - this.dynamic.Owner = "ServiceHost"; + if (this.dynamic == null) + { + QuotaThrottle dynamicQt = new QuotaThrottle(this.GotDynamic, new object()); + dynamicQt.Owner = "ServiceHost"; + + this.dynamic = dynamicQt; + } } - this.UpdateIsActive(); - return this.dynamic; } + + this.UpdateIsActive(); + return this.dynamic; } } @@ -158,20 +178,27 @@ namespace System.ServiceModel.Dispatcher { get { - lock (this.ThisLock) + if (this.instanceContexts == null) { - if (this.instanceContexts == null) + lock (this.ThisLock) { - this.instanceContexts = new FlowThrottle(this.GotInstanceContext, Int32.MaxValue, - ServiceThrottle.MaxConcurrentInstancesPropertyName, ServiceThrottle.MaxConcurrentInstancesConfigName); - this.instanceContexts.SetRatio(this.RatioInstancesToken); - if (this.servicePerformanceCounters != null) + if (this.instanceContexts == null) { - InitializeInstancePerfCounterSettings(); + FlowThrottle instanceContextsFt = new FlowThrottle(this.GotInstanceContext, Int32.MaxValue, + ServiceThrottle.MaxConcurrentInstancesPropertyName, ServiceThrottle.MaxConcurrentInstancesConfigName); + instanceContextsFt.SetRatio(this.RatioInstancesToken); + + if (this.servicePerformanceCounters != null) + { + InitializeInstancePerfCounterSettings(instanceContextsFt); + } + + this.instanceContexts = instanceContextsFt; } } - return this.instanceContexts; } + + return this.instanceContexts; } } @@ -191,7 +218,7 @@ namespace System.ServiceModel.Dispatcher //instance throttle is created through the behavior, set the perf counter callbacks if initialized if (this.instanceContexts != null) { - InitializeInstancePerfCounterSettings(); + InitializeInstancePerfCounterSettings(this.instanceContexts); } //this.calls and this.sessions throttles are created by the constructor. Set the perf counter callbacks @@ -199,14 +226,14 @@ namespace System.ServiceModel.Dispatcher InitializeSessionsPerfCounterSettings(); } - void InitializeInstancePerfCounterSettings() + void InitializeInstancePerfCounterSettings(FlowThrottle instanceContextsFt) { - Fx.Assert(this.instanceContexts != null, "Expect instanceContext to be initialized"); + Fx.Assert(instanceContextsFt != null, "Expect instanceContext to be initialized"); Fx.Assert(this.servicePerformanceCounters != null, "expect servicePerformanceCounters to be set"); - this.instanceContexts.SetAcquired(this.AcquiredInstancesToken); - this.instanceContexts.SetReleased(this.ReleasedInstancesToken); - this.instanceContexts.SetRatio(this.RatioInstancesToken); - this.servicePerformanceCounters.SetThrottleBase((int)ServicePerformanceCounters.PerfCounters.InstancesPercentMaxInstancesBase, this.instanceContexts.Capacity); + instanceContextsFt.SetAcquired(this.AcquiredInstancesToken); + instanceContextsFt.SetReleased(this.ReleasedInstancesToken); + instanceContextsFt.SetRatio(this.RatioInstancesToken); + this.servicePerformanceCounters.SetThrottleBase((int)ServicePerformanceCounters.PerfCounters.InstancesPercentMaxInstancesBase, instanceContextsFt.Capacity); } void InitializeCallsPerfCounterSettings() diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/EndpointTrait.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/EndpointTrait.cs index a1805b2d60..cc42d3bda8 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/EndpointTrait.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/EndpointTrait.cs @@ -9,4 +9,4 @@ namespace System.ServiceModel { public abstract ChannelFactory CreateChannelFactory(); } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/LocalAppContextSwitches.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/LocalAppContextSwitches.cs new file mode 100644 index 0000000000..616b1feddc --- /dev/null +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/LocalAppContextSwitches.cs @@ -0,0 +1,45 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +namespace System.ServiceModel +{ + using System; + using System.Runtime.CompilerServices; + + // When adding a quirk, name it such that false is new behavior and true is old behavior. + // You are opting IN to old behavior. The new behavior is default. + // For example, we want to enable the functionality to explicitly add a connection close header + // in 4.6 and above. So we set DisableExplicitConnectionCloseHeader to true if running 4.5.2 or less. + internal static class LocalAppContextSwitches + { + private const string DisableExplicitConnectionCloseHeaderString = "Switch.System.ServiceModel.DisableExplicitConnectionCloseHeader"; + private const string AllowUnsignedToHeaderString = "Switch.System.ServiceModel.AllowUnsignedToHeader"; + + private static int disableExplicitConnectionCloseHeader; + private static int allowUnsignedToHeader; + + public static bool DisableExplicitConnectionCloseHeader + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return LocalAppContext.GetCachedSwitchValue(DisableExplicitConnectionCloseHeaderString, ref disableExplicitConnectionCloseHeader); + } + } + + public static bool AllowUnsignedToHeader + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get + { + return LocalAppContext.GetCachedSwitchValue(AllowUnsignedToHeaderString, ref allowUnsignedToHeader); + } + } + + public static void SetDefaultsLessOrEqual_452() + { + // Define the switches that should be true for 4.5.2 or less, false for 4.6+. + LocalAppContext.DefineSwitchDefault(DisableExplicitConnectionCloseHeaderString, true); + } + } +} diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/OSVersion.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/OSVersion.cs index b70de21180..165d8db22b 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/OSVersion.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/OSVersion.cs @@ -46,4 +46,4 @@ namespace System.ServiceModel /// PostWin8, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/SecurityUtils.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/SecurityUtils.cs index e24e7b2ecc..913840d035 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/SecurityUtils.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/SecurityUtils.cs @@ -18,6 +18,7 @@ namespace System.ServiceModel.Security using System.Net.Security; using System.Runtime; using System.Security; + using System.Security.Authentication; using System.Security.Authentication.ExtendedProtection; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; @@ -105,6 +106,28 @@ namespace System.ServiceModel.Security } } + static class SslProtocolsHelper + { + internal static bool IsDefined(SslProtocols value) + { + SslProtocols allValues = SslProtocols.None; + foreach (var protocol in Enum.GetValues(typeof(SslProtocols))) + { + allValues |= (SslProtocols)protocol; + } + return (value & allValues) == value; + } + + internal static void Validate(SslProtocols value) + { + if (!IsDefined(value)) + { + throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("value", (int)value, + typeof(SslProtocols))); + } + } + } + static class TokenImpersonationLevelHelper { internal static bool IsDefined(TokenImpersonationLevel value) diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/TransportSecurityProtocol.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/TransportSecurityProtocol.cs index cf865bbb42..93c2c9b13a 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/TransportSecurityProtocol.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/TransportSecurityProtocol.cs @@ -240,6 +240,13 @@ namespace System.ServiceModel.Security securityHeader.ExpectEndorsingTokens = expectEndorsingTokens; securityHeader.MaxReceivedMessageSize = factory.SecurityBindingElement.MaxReceivedMessageSize; securityHeader.ReaderQuotas = factory.SecurityBindingElement.ReaderQuotas; + + // Due to compatibility, only honor this setting if this app setting is enabled + if (ServiceModelAppSettings.UseConfiguredTransportSecurityHeaderLayout) + { + securityHeader.Layout = factory.SecurityHeaderLayout; + } + TimeoutHelper timeoutHelper = new TimeoutHelper(timeout); if (!factory.ActAsInitiator) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/WSSecurityOneDotZeroReceiveSecurityHeader.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/WSSecurityOneDotZeroReceiveSecurityHeader.cs index ee27b7d35d..fdf3f0ce69 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Security/WSSecurityOneDotZeroReceiveSecurityHeader.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Security/WSSecurityOneDotZeroReceiveSecurityHeader.cs @@ -222,7 +222,7 @@ namespace System.ServiceModel.Security } if (!isHeaderEncrypted && reader.IsStartElement(SecurityXXX2005Strings.EncryptedHeader, SecurityXXX2005Strings.Namespace)) - { + { XmlDictionaryReader localreader = headers.GetReaderAtHeader(i); localreader.ReadStartElement(SecurityXXX2005Strings.EncryptedHeader, SecurityXXX2005Strings.Namespace); @@ -234,7 +234,7 @@ namespace System.ServiceModel.Security { isHeaderEncrypted = true; } - } + } } this.ElementManager.VerifyUniquenessAndSetHeaderId(id, i); @@ -611,9 +611,27 @@ namespace System.ServiceModel.Security throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.TransportSecuredMessageMissingToHeader))); XmlDictionaryReader toHeaderReader = this.Message.Headers.GetReaderAtHeader(headerIndex); id = toHeaderReader.GetAttribute(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace); - if (id == null) - throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.UnsignedToHeaderInTransportSecuredMessage))); - signedXml.EnsureDigestValidity(id, toHeaderReader); + + // DevDiv:938534 - We added a flag that allow unsigned headers. If this is set, we do not throw an Exception but move on to CompleteSignatureVerification() + if (LocalAppContextSwitches.AllowUnsignedToHeader) + { + // The lack of an id indicates that the sender did not wish to sign the header. We can safely assume that null indicates this header is not signed. + // If id is not null, then we need to validate the Digest and ensure signature is valid. The exception is thrown deeper in the System.IdentityModel stack. + if (id != null) + { + signedXml.EnsureDigestValidityIfIdMatches(id, toHeaderReader); + } + } + else + { + // default behavior for all platforms + if (id == null) + { + // + throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.GetString(SR.UnsignedToHeaderInTransportSecuredMessage))); + } + signedXml.EnsureDigestValidity(id, toHeaderReader); + } } signedXml.CompleteSignatureVerification(); return token; @@ -692,7 +710,7 @@ namespace System.ServiceModel.Security } } - // This check makes sure that if RequireSignedPrimaryToken is true (ProtectTokens is enabled on sbe) then the incoming message + // This check makes sure that if RequireSignedPrimaryToken is true (ProtectTokens is enabled on sbe) then the incoming message // should have the primary signature over the primary(signing)token. if (isPrimarySignature && this.RequireSignedPrimaryToken && !this.ElementManager.IsPrimaryTokenSigned) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAppSettings.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAppSettings.cs new file mode 100644 index 0000000000..b7c7db2a42 --- /dev/null +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAppSettings.cs @@ -0,0 +1,99 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// + +namespace System.ServiceModel +{ + using System.Collections.Specialized; + using System.Configuration; + using System.Diagnostics.CodeAnalysis; + using System.Runtime; + + // Due to friend relationships with other assemblies, naming this class as AppSettings causes ambiguity when building those assemblies + internal static class ServiceModelAppSettings + { + internal const string HttpTransportPerFactoryConnectionPoolString = "wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory"; + internal const string EnsureUniquePerformanceCounterInstanceNamesString = "wcf:ensureUniquePerformanceCounterInstanceNames"; + internal const string UseConfiguredTransportSecurityHeaderLayoutString = "wcf:useConfiguredTransportSecurityHeaderLayout"; + const bool DefaultHttpTransportPerFactoryConnectionPool = false; + const bool DefaultEnsureUniquePerformanceCounterInstanceNames = false; + const bool DefaultUseConfiguredTransportSecurityHeaderLayout = false; + static bool httpTransportPerFactoryConnectionPool; + static bool ensureUniquePerformanceCounterInstanceNames; + static bool useConfiguredTransportSecurityHeaderLayout; + static volatile bool settingsInitalized = false; + static object appSettingsLock = new object(); + + internal static bool HttpTransportPerFactoryConnectionPool + { + get + { + EnsureSettingsLoaded(); + + return httpTransportPerFactoryConnectionPool; + } + } + + internal static bool EnsureUniquePerformanceCounterInstanceNames + { + get + { + EnsureSettingsLoaded(); + + return ensureUniquePerformanceCounterInstanceNames; + } + } + + internal static bool UseConfiguredTransportSecurityHeaderLayout + { + get + { + EnsureSettingsLoaded(); + + return useConfiguredTransportSecurityHeaderLayout; + } + } + + [SuppressMessage(FxCop.Category.ReliabilityBasic, "Reliability104:CaughtAndHandledExceptionsRule", + Justification = "Handle the configuration exceptions here to avoid regressions on customer's existing scenarios")] + static void EnsureSettingsLoaded() + { + if (!settingsInitalized) + { + lock (appSettingsLock) + { + if (!settingsInitalized) + { + NameValueCollection appSettingsSection = null; + try + { + appSettingsSection = ConfigurationManager.AppSettings; + } + catch (ConfigurationErrorsException) + { + } + finally + { + if ((appSettingsSection == null) || !bool.TryParse(appSettingsSection[HttpTransportPerFactoryConnectionPoolString], out httpTransportPerFactoryConnectionPool)) + { + httpTransportPerFactoryConnectionPool = DefaultHttpTransportPerFactoryConnectionPool; + } + + if ((appSettingsSection == null) || !bool.TryParse(appSettingsSection[EnsureUniquePerformanceCounterInstanceNamesString], out ensureUniquePerformanceCounterInstanceNames)) + { + ensureUniquePerformanceCounterInstanceNames = DefaultEnsureUniquePerformanceCounterInstanceNames; + } + + if ((appSettingsSection == null) || !bool.TryParse(appSettingsSection[UseConfiguredTransportSecurityHeaderLayoutString], out useConfiguredTransportSecurityHeaderLayout)) + { + useConfiguredTransportSecurityHeaderLayout = DefaultUseConfiguredTransportSecurityHeaderLayout; + } + + settingsInitalized = true; + } + } + } + } + } + } +} diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAttributeTargets.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAttributeTargets.cs index a509ec937b..6e73e4d044 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAttributeTargets.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelAttributeTargets.cs @@ -20,4 +20,4 @@ namespace System.ServiceModel public const AttributeTargets ContractBehavior = ServiceBehavior | ClientBehavior; public const AttributeTargets OperationBehavior = AttributeTargets.Method; } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelStrings.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelStrings.cs index b90c5b928a..f8d14752a3 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelStrings.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/ServiceModelStrings.cs @@ -8,4 +8,4 @@ namespace System.ServiceModel public abstract int Count { get; } public abstract string this[int index] { get; } } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/StringUtil.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/StringUtil.cs new file mode 100644 index 0000000000..cb8e8ef58a --- /dev/null +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/StringUtil.cs @@ -0,0 +1,63 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +namespace System.ServiceModel +{ + internal static class StringUtil + { + private static readonly bool randomizedStringHashingEnabled; + + static StringUtil() + { + // StringComparer.InvariantCultureIgnoreCase.GetHashCode is a stable hash between 32 and 64 bits. + // Test the result of this GetHashCode against a known test vector to see if randomized hashing is enabled. + randomizedStringHashingEnabled = StringComparer.InvariantCultureIgnoreCase.GetHashCode("The quick brown fox jumps over the lazy dog.") != 0x703e662e; + } + + // This should be used instead of String.GetHashCode if the value should be + // stable even if UseRandomizedStringHashing is enabled. + internal static int GetNonRandomizedHashCode(string str) + { + if (!randomizedStringHashingEnabled) + { + return str.GetHashCode(); + } + + return GetStableHashCode(str); + } + + // This is copied from the 32 bit implementation from String.GetHashCode. + // Since ServiceModel is compiled for MSIL, we can't have different functionality + // for 32 and 64 bits. + [System.Security.SecuritySafeCritical] + private static int GetStableHashCode(string str) + { + unsafe + { + fixed (char* src = str) + { + int hash1 = (5381 << 16) + 5381; + int hash2 = hash1; + + // 32 bit machines. + int* pint = (int*)src; + int len = str.Length; + while (len > 2) + { + hash1 = ((hash1 << 5) + hash1 + (hash1 >> 27)) ^ pint[0]; + hash2 = ((hash2 << 5) + hash2 + (hash2 >> 27)) ^ pint[1]; + pint += 2; + len -= 4; + } + + if (len > 0) + { + hash1 = ((hash1 << 5) + hash1 + (hash1 >> 27)) ^ pint[0]; + } + + return hash1 + (hash2 * 1566083941); + } + } + } + } +} diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Syndication/Rss20FeedFormatter.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Syndication/Rss20FeedFormatter.cs index 2b294d1ace..a417e2b9dc 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Syndication/Rss20FeedFormatter.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Syndication/Rss20FeedFormatter.cs @@ -502,9 +502,8 @@ namespace System.ServiceModel.Syndication } } } - reader.ReadStartElement(); - link.Uri = new Uri(reader.ReadString(), UriKind.RelativeOrAbsolute); - reader.ReadEndElement(); + string uri = reader.ReadElementString(); + link.Uri = new Uri(uri, UriKind.RelativeOrAbsolute); return link; } @@ -655,10 +654,17 @@ namespace System.ServiceModel.Syndication } else if (reader.IsStartElement(Rss20Constants.PubDateTag, Rss20Constants.Rss20Namespace)) { + bool canReadContent = !reader.IsEmptyElement; reader.ReadStartElement(); - string str = reader.ReadString(); - result.PublishDate = DateFromString(str, reader); - reader.ReadEndElement(); + if (canReadContent) + { + string str = reader.ReadString(); + if (!string.IsNullOrEmpty(str)) + { + result.PublishDate = DateFromString(str, reader); + } + reader.ReadEndElement(); + } } else if (reader.IsStartElement(Rss20Constants.SourceTag, Rss20Constants.Rss20Namespace)) { @@ -691,9 +697,7 @@ namespace System.ServiceModel.Syndication } } } - reader.ReadStartElement(); - string feedTitle = reader.ReadString(); - reader.ReadEndElement(); + string feedTitle = reader.ReadElementString(); feed.Title = new TextSyndicationContent(feedTitle); result.SourceFeed = feed; } @@ -947,9 +951,17 @@ namespace System.ServiceModel.Syndication } else if (reader.IsStartElement(Rss20Constants.LastBuildDateTag, Rss20Constants.Rss20Namespace)) { + bool canReadContent = !reader.IsEmptyElement; reader.ReadStartElement(); - result.LastUpdatedTime = DateFromString(reader.ReadString(), reader); - reader.ReadEndElement(); + if (canReadContent) + { + string str = reader.ReadString(); + if (!string.IsNullOrEmpty(str)) + { + result.LastUpdatedTime = DateFromString(str, reader); + } + reader.ReadEndElement(); + } } else if (reader.IsStartElement(Rss20Constants.CategoryTag, Rss20Constants.Rss20Namespace)) { diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/TcpTransportSecurity.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/TcpTransportSecurity.cs index af674bcdf0..cecfed85e3 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/TcpTransportSecurity.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/TcpTransportSecurity.cs @@ -4,6 +4,7 @@ namespace System.ServiceModel { using System; + using System.Security.Authentication; using System.Security.Authentication.ExtendedProtection; using System.ServiceModel.Channels; using System.ServiceModel.Security; @@ -19,12 +20,14 @@ namespace System.ServiceModel TcpClientCredentialType clientCredentialType; ProtectionLevel protectionLevel; ExtendedProtectionPolicy extendedProtectionPolicy; + SslProtocols sslProtocols; public TcpTransportSecurity() { this.clientCredentialType = DefaultClientCredentialType; this.protectionLevel = DefaultProtectionLevel; this.extendedProtectionPolicy = ChannelBindingUtility.DefaultPolicy; + this.sslProtocols = TransportDefaults.SslProtocols; } [DefaultValue(DefaultClientCredentialType)] @@ -78,6 +81,17 @@ namespace System.ServiceModel } } + [DefaultValue(TransportDefaults.SslProtocols)] + public SslProtocols SslProtocols + { + get { return this.sslProtocols; } + set + { + SslProtocolsHelper.Validate(value); + this.sslProtocols = value; + } + } + SslStreamSecurityBindingElement CreateSslBindingElement(bool requireClientCertificate) { if (this.protectionLevel != ProtectionLevel.EncryptAndSign) @@ -88,17 +102,20 @@ namespace System.ServiceModel SslStreamSecurityBindingElement result = new SslStreamSecurityBindingElement(); result.RequireClientCertificate = requireClientCertificate; + result.SslProtocols = sslProtocols; return result; } - static bool IsSslBindingElement(BindingElement element, TcpTransportSecurity transportSecurity, out bool requireClientCertificate) + static bool IsSslBindingElement(BindingElement element, TcpTransportSecurity transportSecurity, out bool requireClientCertificate, out SslProtocols sslProtocols) { requireClientCertificate = false; + sslProtocols = TransportDefaults.SslProtocols; SslStreamSecurityBindingElement ssl = element as SslStreamSecurityBindingElement; if (ssl == null) return false; transportSecurity.ProtectionLevel = ProtectionLevel.EncryptAndSign; requireClientCertificate = ssl.RequireClientCertificate; + sslProtocols = ssl.SslProtocols; return true; } @@ -110,7 +127,8 @@ namespace System.ServiceModel internal static bool SetTransportProtectionOnly(BindingElement transport, TcpTransportSecurity transportSecurity) { bool requireClientCertificate; - return IsSslBindingElement(transport, transportSecurity, out requireClientCertificate); + SslProtocols sslProtocols; + return IsSslBindingElement(transport, transportSecurity, out requireClientCertificate, out sslProtocols); } internal BindingElement CreateTransportProtectionAndAuthentication() @@ -130,15 +148,17 @@ namespace System.ServiceModel internal static bool SetTransportProtectionAndAuthentication(BindingElement transport, TcpTransportSecurity transportSecurity) { bool requireClientCertificate = false; + SslProtocols sslProtocols = TransportDefaults.SslProtocols; if (transport is WindowsStreamSecurityBindingElement) { transportSecurity.ClientCredentialType = TcpClientCredentialType.Windows; transportSecurity.ProtectionLevel = ((WindowsStreamSecurityBindingElement)transport).ProtectionLevel; return true; } - else if (IsSslBindingElement(transport, transportSecurity, out requireClientCertificate)) + else if (IsSslBindingElement(transport, transportSecurity, out requireClientCertificate, out sslProtocols)) { transportSecurity.ClientCredentialType = requireClientCertificate ? TcpClientCredentialType.Certificate : TcpClientCredentialType.None; + transportSecurity.SslProtocols = sslProtocols; return true; } return false; @@ -148,6 +168,7 @@ namespace System.ServiceModel { return this.ClientCredentialType != TcpTransportSecurity.DefaultClientCredentialType || this.ProtectionLevel != TcpTransportSecurity.DefaultProtectionLevel + || this.SslProtocols != TransportDefaults.SslProtocols || ShouldSerializeExtendedProtectionPolicy(); } diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/Transactions/IsolationFlags.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/Transactions/IsolationFlags.cs index 927e14c670..b4c249c430 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/Transactions/IsolationFlags.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/Transactions/IsolationFlags.cs @@ -21,4 +21,4 @@ namespace System.ServiceModel.Transactions Optimistic = 0x00000010, ReadOnly = 0x00000020 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.ServiceModel/System/ServiceModel/UpnEndpointIdentity.cs b/external/referencesource/System.ServiceModel/System/ServiceModel/UpnEndpointIdentity.cs index c00f1e0d9a..ee6af2c46a 100644 --- a/external/referencesource/System.ServiceModel/System/ServiceModel/UpnEndpointIdentity.cs +++ b/external/referencesource/System.ServiceModel/System/ServiceModel/UpnEndpointIdentity.cs @@ -80,7 +80,11 @@ namespace System.ServiceModel try { downlevelName = windowsIdentity.Name; - upnName = GetUpnFromDownlevelName(downlevelName); + + if (this.IsMachineJoinedToDomain()) + { + upnName = GetUpnFromDownlevelName(downlevelName); + } } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) @@ -89,13 +93,34 @@ namespace System.ServiceModel { throw; } + DiagnosticUtility.TraceHandledException(e, TraceEventType.Warning); } + // if the AD cannot be queried for the fully qualified domain name, // fall back to the downlevel UPN name return upnName ?? downlevelName; } + bool IsMachineJoinedToDomain() + { + IntPtr pDomainControllerInfo = IntPtr.Zero; + + try + { + int result = SafeNativeMethods.DsGetDcName(null, null, IntPtr.Zero, null, (uint)DSFlags.DS_DIRECTORY_SERVICE_REQUIRED, out pDomainControllerInfo); + + return result != (int)Win32Error.ERROR_NO_SUCH_DOMAIN; + } + finally + { + if (pDomainControllerInfo != IntPtr.Zero) + { + SafeNativeMethods.NetApiBufferFree(pDomainControllerInfo); + } + } + } + // Duplicate code from SecurityImpersonationBehavior string GetUpnFromDownlevelName(string downlevelName) { @@ -108,6 +133,7 @@ namespace System.ServiceModel { throw DiagnosticUtility.ExceptionUtility.ThrowHelperWarning(new InvalidOperationException(SR.GetString(SR.DownlevelNameCannotMapToUpn, downlevelName))); } + string shortDomainName = downlevelName.Substring(0, delimiterPos + 1); string userName = downlevelName.Substring(delimiterPos + 1); string fullDomainName; diff --git a/external/referencesource/System.Web.ApplicationServices/Properties/AssemblyInfo.cs b/external/referencesource/System.Web.ApplicationServices/Properties/AssemblyInfo.cs index b643d49d37..d3dbff8619 100644 --- a/external/referencesource/System.Web.ApplicationServices/Properties/AssemblyInfo.cs +++ b/external/referencesource/System.Web.ApplicationServices/Properties/AssemblyInfo.cs @@ -9,4 +9,4 @@ using System.Runtime.CompilerServices; [module: SuppressMessage("Microsoft.Naming", "CA1701:ResourceStringCompoundWordsShouldBeCasedCorrectly", MessageId = "username", Scope = "resource", Target = "System.Web.ApplicationServicesStrings.resources", - Justification = "The use of the word is correct in a technical context.")] + Justification = "The use of the word is correct in a technical context.")] \ No newline at end of file diff --git a/external/referencesource/System.Web.Entity.Design/System/Data/WebControls/Design/EntityDataSourceDesignerHelper.cs b/external/referencesource/System.Web.Entity.Design/System/Data/WebControls/Design/EntityDataSourceDesignerHelper.cs index 3b53951fe8..652acc5872 100644 --- a/external/referencesource/System.Web.Entity.Design/System/Data/WebControls/Design/EntityDataSourceDesignerHelper.cs +++ b/external/referencesource/System.Web.Entity.Design/System/Data/WebControls/Design/EntityDataSourceDesignerHelper.cs @@ -70,6 +70,7 @@ namespace System.Web.UI.Design.WebControls private bool _forceSchemaRetrieval; private readonly EntityDataSourceDesigner _owner; private bool _canLoadWebConfig; + private bool _usingEntityFrameworkVersionHigherThanFive = false; #endregion internal EntityDataSourceDesignerHelper(EntityDataSource entityDataSource, bool interactiveMode) @@ -96,7 +97,7 @@ namespace System.Web.UI.Design.WebControls } Debug.Assert(_owner != null, "expected non-null owner"); - Debug.Assert(_webApplication != null, "expected non-null web application service"); + Debug.Assert(_webApplication != null, "expected non-null web application service"); } internal void AddSystemWebEntityReference() @@ -627,9 +628,16 @@ namespace System.Web.UI.Design.WebControls catch (Exception ex) { StringBuilder exceptionMessage = new StringBuilder(); - exceptionMessage.AppendLine(Strings.Error_MetadataLoadError); - exceptionMessage.AppendLine(); - exceptionMessage.Append(ex.Message); + if (_usingEntityFrameworkVersionHigherThanFive) + { + exceptionMessage.Append(Strings.Error_UnsupportedVersionOfEntityFramework); + } + else + { + exceptionMessage.AppendLine(Strings.Error_MetadataLoadError); + exceptionMessage.AppendLine(); + exceptionMessage.Append(ex.Message); + } ShowError(exceptionMessage.ToString()); } } @@ -657,9 +665,17 @@ namespace System.Web.UI.Design.WebControls { foreach (Type type in typeDiscoverySvc.GetTypes(typeof(object), false /*excludeGlobalTypes*/)) { - if (!_assemblies.Contains(type.Assembly) && !IsSystemAssembly(type.Assembly.FullName)) + var assembly = type.Assembly; + if (!_usingEntityFrameworkVersionHigherThanFive + && assembly.GetName().Name.Equals("EntityFramework", StringComparison.InvariantCultureIgnoreCase) + && assembly.GetName().Version.Major > 5) { - _assemblies.Add(type.Assembly); + _usingEntityFrameworkVersionHigherThanFive = true; + ShowError(Strings.Error_UnsupportedVersionOfEntityFramework); + } + if (!_assemblies.Contains(assembly) && !IsSystemAssembly(assembly.FullName)) + { + _assemblies.Add(assembly); } } } diff --git a/external/referencesource/System.Web.Entity/AssemblyInfo.cs b/external/referencesource/System.Web.Entity/AssemblyInfo.cs index 2cab554ad9..48281823db 100644 --- a/external/referencesource/System.Web.Entity/AssemblyInfo.cs +++ b/external/referencesource/System.Web.Entity/AssemblyInfo.cs @@ -3,8 +3,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // // -// @owner [....] -// @backupOwner [....] +// @owner barryfr +// @backupOwner cmeek //--------------------------------------------------------------------- // Ensures that this library never satisfies a link demand by virtue of being a GACed diff --git a/external/referencesource/System.Web.Extensions/Handlers/ScriptModule.cs b/external/referencesource/System.Web.Extensions/Handlers/ScriptModule.cs index c6e323ff26..150fb37f35 100644 --- a/external/referencesource/System.Web.Extensions/Handlers/ScriptModule.cs +++ b/external/referencesource/System.Web.Extensions/Handlers/ScriptModule.cs @@ -143,6 +143,10 @@ namespace System.Web.Handlers { response.Cache.SetCacheability(HttpCacheability.NoCache); response.ContentType = "text/plain"; + // DevDiv#961281 + // Allow apps to access to the redirect location + context.Items[PageRequestManager.AsyncPostBackRedirectLocationKey] = redirectLocation; + // Preserve redirected state: TFS#882879 response.IsRequestBeingRedirected = true; diff --git a/external/referencesource/System.Web.Extensions/ui/EmbeddedResourceFinder.cs b/external/referencesource/System.Web.Extensions/ui/EmbeddedResourceFinder.cs index 4695543de1..56f254eac2 100644 --- a/external/referencesource/System.Web.Extensions/ui/EmbeddedResourceFinder.cs +++ b/external/referencesource/System.Web.Extensions/ui/EmbeddedResourceFinder.cs @@ -9,4 +9,4 @@ // work properly is the assembly name is different from // the namespace. The work around is to use a type which is // outside the root namespace. -internal class EmbeddedResourceFinder { } +internal class EmbeddedResourceFinder { } \ No newline at end of file diff --git a/external/referencesource/System.Web.Extensions/ui/PageRequestManager.cs b/external/referencesource/System.Web.Extensions/ui/PageRequestManager.cs index 191bab69f4..b643255390 100644 --- a/external/referencesource/System.Web.Extensions/ui/PageRequestManager.cs +++ b/external/referencesource/System.Web.Extensions/ui/PageRequestManager.cs @@ -49,6 +49,7 @@ namespace System.Web.UI { internal const string AsyncPostBackErrorKey = "System.Web.UI.PageRequestManager:AsyncPostBackError"; internal const string AsyncPostBackErrorMessageKey = "System.Web.UI.PageRequestManager:AsyncPostBackErrorMessage"; internal const string AsyncPostBackErrorHttpCodeKey = "System.Web.UI.PageRequestManager:AsyncPostBackErrorHttpCode"; + internal const string AsyncPostBackRedirectLocationKey = "System.Web.UI.PageRequestManager:AsyncPostBackRedirectLocation"; private const string PageTitleToken = "pageTitle"; private const string FocusToken = "focus"; private const string AsyncPostFormField = "__ASYNCPOST"; diff --git a/external/referencesource/System.Web.Mobile/GlobalSuppressions.cs.REMOVED.git-id b/external/referencesource/System.Web.Mobile/GlobalSuppressions.cs.REMOVED.git-id index 59d0a7e3e4..2851571356 100644 --- a/external/referencesource/System.Web.Mobile/GlobalSuppressions.cs.REMOVED.git-id +++ b/external/referencesource/System.Web.Mobile/GlobalSuppressions.cs.REMOVED.git-id @@ -1 +1 @@ -620078002876de5d58461ad5a61fb6f8bb3f3dae \ No newline at end of file +87c20afb68987704a259c1d3389e54a33ed1ef7c \ No newline at end of file diff --git a/external/referencesource/System.Web.Mobile/UI/MobileControls/Design/Util/InterchangeableLists.cs b/external/referencesource/System.Web.Mobile/UI/MobileControls/Design/Util/InterchangeableLists.cs index 5d76164de8..28f745fc7c 100644 --- a/external/referencesource/System.Web.Mobile/UI/MobileControls/Design/Util/InterchangeableLists.cs +++ b/external/referencesource/System.Web.Mobile/UI/MobileControls/Design/Util/InterchangeableLists.cs @@ -45,7 +45,7 @@ namespace System.Web.UI.Design.MobileControls.Util // This call is required by the Windows.Forms Form Designer. InitializeComponent(); - // + // TODO: Add any initialization after the InitForm call _downButton.Image = GenericUI.SortDownIcon; _upButton.Image = GenericUI.SortUpIcon; UpdateButtonEnabling(); @@ -337,4 +337,4 @@ namespace System.Web.UI.Design.MobileControls.Util } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Configuration/Protocols.cs b/external/referencesource/System.Web.Services/System/Web/Services/Configuration/Protocols.cs index 4e4279c6b3..f54892bf82 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Configuration/Protocols.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Configuration/Protocols.cs @@ -19,4 +19,4 @@ namespace System.Web.Services.Configuration // composite flag AnyHttpSoap = 0x21, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryClientProtocol.cs b/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryClientProtocol.cs index de45dfdd88..aafe6f1c77 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryClientProtocol.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryClientProtocol.cs @@ -453,15 +453,15 @@ namespace System.Web.Services.Discovery { while (currentDir.Length > 0) { if (currentDir.Length <= fullPath.Length && string.Compare(currentDir, fullPath.Substring(0, currentDir.Length), StringComparison.OrdinalIgnoreCase) == 0) { answer += fullPath.Substring(currentDir.Length); - if (answer.StartsWith("\\", StringComparison.Ordinal)) + if (answer.StartsWith(""+Path.DirectorySeparatorChar, StringComparison.Ordinal)) answer = answer.Substring(1); return answer; } - answer += "..\\"; + answer += ".." + Path.DirectorySeparatorChar; if (currentDir.Length < 2) break; else { - int lastSlash = currentDir.LastIndexOf('\\', currentDir.Length - 2); + int lastSlash = currentDir.LastIndexOf(Path.DirectorySeparatorChar, currentDir.Length - 2); currentDir = currentDir.Substring(0, lastSlash + 1); } } diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryRequestHandler.cs b/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryRequestHandler.cs index 4d6c3ff086..50ae58825a 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryRequestHandler.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Discovery/DiscoveryRequestHandler.cs @@ -81,7 +81,7 @@ namespace System.Web.Services.Discovery { // Determine start url path for search DynamicDiscoSearcher searcher; Uri searchStartUrl = context.Request.Url; - string escapedUri = Uri.EscapeUriString(searchStartUrl.ToString()).Replace("#", "%23"); + string escapedUri = RuntimeUtils.EscapeUri(searchStartUrl); string searchStartUrlDir = GetDirPartOfPath( escapedUri ); // URL path without file name string strLocalPath = GetDirPartOfPath(searchStartUrl.LocalPath); diff --git a/external/referencesource/System.Web.Services/System/Web/Services/NativeMethods.cs b/external/referencesource/System.Web.Services/System/Web/Services/NativeMethods.cs index c13cc27ace..a7748c42bd 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/NativeMethods.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/NativeMethods.cs @@ -24,4 +24,4 @@ namespace System.Web.Services { internal static extern int GetModuleHandle(String modName); } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DiscoveryServerProtocol.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DiscoveryServerProtocol.cs index 2c5dbfdcae..80582549c7 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DiscoveryServerProtocol.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DiscoveryServerProtocol.cs @@ -238,7 +238,7 @@ namespace System.Web.Services.Protocols { // if not create a new DiscoveryServerType and cache it // bool excludeSchemeHostPortFromCachingKey = this.IsCacheUnderPressure(typeof(DiscoveryServerProtocol), Type); - string escapedUri = Uri.EscapeUriString(Request.Url.ToString()).Replace("#", "%23"); + string escapedUri = RuntimeUtils.EscapeUri(Request.Url); serverType = new DiscoveryServerType(Type, escapedUri, excludeSchemeHostPortFromCachingKey); AddToCache(typeof(DiscoveryServerProtocol), Type, serverType, excludeSchemeHostPortFromCachingKey); } diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DocumentationServerProtocol.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DocumentationServerProtocol.cs index 20d424cf6d..f8fb6d44a5 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DocumentationServerProtocol.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/DocumentationServerProtocol.cs @@ -119,7 +119,7 @@ namespace System.Web.Services.Protocols { // // bool excludeSchemeHostPortFromCachingKey = this.IsCacheUnderPressure(typeof(DocumentationServerProtocol), Type); - string escapedUri = Uri.EscapeUriString(Request.Url.ToString()).Replace("#", "%23"); + string escapedUri = RuntimeUtils.EscapeUri(Request.Url); serverType = new DocumentationServerType(Type, escapedUri, excludeSchemeHostPortFromCachingKey); AddToCache(typeof(DocumentationServerProtocol), Type, serverType, excludeSchemeHostPortFromCachingKey); } diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/RuntimeUtils.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/RuntimeUtils.cs index 90342b65ff..f2ed4a2f16 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/RuntimeUtils.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/RuntimeUtils.cs @@ -86,5 +86,13 @@ namespace System.Web.Services.Protocols { return true; return false; } + + internal static string EscapeUri(Uri uri) { + if (null == uri) { + throw new ArgumentNullException("uri"); + } + + return uri.GetComponents(UriComponents.SerializationInfoString, UriFormat.UriEscaped).Replace("#", "%23"); + } } } diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/ScatterGatherStream.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/ScatterGatherStream.cs index abb1f1b12d..8f27b78ecf 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/ScatterGatherStream.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/ScatterGatherStream.cs @@ -368,4 +368,4 @@ namespace System.Web.Services.Protocols { } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServerMessage.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServerMessage.cs index 0f24a7100b..39d0dd2ae7 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServerMessage.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServerMessage.cs @@ -58,7 +58,7 @@ namespace System.Web.Services.Protocols { /// [To be supplied.] /// public override string Url { - get { return Uri.EscapeUriString(protocol.Request.Url.ToString()).Replace("#", "%23"); } + get { return RuntimeUtils.EscapeUri(protocol.Request.Url); } } /// diff --git a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServiceRoutingStyle.cs b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServiceRoutingStyle.cs index 194e68e41d..0614e69cd1 100644 --- a/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServiceRoutingStyle.cs +++ b/external/referencesource/System.Web.Services/System/Web/Services/Protocols/SoapServiceRoutingStyle.cs @@ -14,4 +14,4 @@ namespace System.Web.Services.Protocols { RequestElement, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web/Abstractions/HttpContextWrapper.cs b/external/referencesource/System.Web/Abstractions/HttpContextWrapper.cs index 45b0e533ff..c9320500e0 100644 --- a/external/referencesource/System.Web/Abstractions/HttpContextWrapper.cs +++ b/external/referencesource/System.Web/Abstractions/HttpContextWrapper.cs @@ -125,7 +125,7 @@ namespace System.Web { public override bool IsPostNotification { get { - return _context.IsDebuggingEnabled; + return _context.IsPostNotification; } } diff --git a/external/referencesource/System.Web/Abstractions/HttpRequestBase.cs b/external/referencesource/System.Web/Abstractions/HttpRequestBase.cs index 5942b4f520..5c20e85e25 100644 --- a/external/referencesource/System.Web/Abstractions/HttpRequestBase.cs +++ b/external/referencesource/System.Web/Abstractions/HttpRequestBase.cs @@ -247,6 +247,12 @@ namespace System.Web { } } + public virtual ITlsTokenBindingInfo TlsTokenBindingInfo { + get { + throw new NotImplementedException(); + } + } + public virtual int TotalBytes { get { throw new NotImplementedException(); diff --git a/external/referencesource/System.Web/Abstractions/HttpRequestWrapper.cs b/external/referencesource/System.Web/Abstractions/HttpRequestWrapper.cs index c7b67b4f6a..63072b5fe4 100644 --- a/external/referencesource/System.Web/Abstractions/HttpRequestWrapper.cs +++ b/external/referencesource/System.Web/Abstractions/HttpRequestWrapper.cs @@ -258,6 +258,12 @@ namespace System.Web { } } + public override ITlsTokenBindingInfo TlsTokenBindingInfo { + get { + return _httpRequest.TlsTokenBindingInfo; + } + } + public override int TotalBytes { get { return _httpRequest.TotalBytes; @@ -331,7 +337,7 @@ namespace System.Web { public override Stream GetBufferlessInputStream(bool disableMaxRequestLength) { return _httpRequest.GetBufferlessInputStream(disableMaxRequestLength); } - + public override void InsertEntityBody() { _httpRequest.InsertEntityBody(); } diff --git a/external/referencesource/System.Web/Abstractions/HttpResponseBase.cs b/external/referencesource/System.Web/Abstractions/HttpResponseBase.cs index f7bebb6de9..3d0639d182 100644 --- a/external/referencesource/System.Web/Abstractions/HttpResponseBase.cs +++ b/external/referencesource/System.Web/Abstractions/HttpResponseBase.cs @@ -13,6 +13,7 @@ namespace System.Web { using System.Runtime.CompilerServices; using System.Text; using System.Threading; + using System.Threading.Tasks; using System.Web.Caching; using System.Web.Routing; @@ -361,6 +362,10 @@ namespace System.Web { throw new NotImplementedException(); } + public virtual Task FlushAsync() { + throw new NotImplementedException(); + } + [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", Justification = "Matches HttpResponse class")] public virtual void Pics(String value) { @@ -504,5 +509,13 @@ namespace System.Web { public virtual void WriteSubstitution(HttpResponseSubstitutionCallback callback) { throw new NotImplementedException(); } + + public virtual void PushPromise(string path) { + throw new NotImplementedException(); + } + + public virtual void PushPromise(string path, string method, NameValueCollection headers) { + throw new NotImplementedException(); + } } } diff --git a/external/referencesource/System.Web/Abstractions/HttpResponseWrapper.cs b/external/referencesource/System.Web/Abstractions/HttpResponseWrapper.cs index 165e96e3ec..ea862607c4 100644 --- a/external/referencesource/System.Web/Abstractions/HttpResponseWrapper.cs +++ b/external/referencesource/System.Web/Abstractions/HttpResponseWrapper.cs @@ -12,6 +12,7 @@ namespace System.Web { using System.Runtime.CompilerServices; using System.Text; using System.Threading; + using System.Threading.Tasks; using System.Web.Caching; using System.Web.Routing; @@ -356,6 +357,10 @@ namespace System.Web { _httpResponse.Flush(); } + public override Task FlushAsync() { + return _httpResponse.FlushAsync(); + } + public override void Pics(string value) { _httpResponse.Pics(value); } @@ -471,5 +476,13 @@ namespace System.Web { public override void WriteSubstitution(HttpResponseSubstitutionCallback callback) { _httpResponse.WriteSubstitution(callback); } + + public override void PushPromise(string path) { + _httpResponse.PushPromise(path); + } + + public override void PushPromise(string path, string method, NameValueCollection headers) { + _httpResponse.PushPromise(path, method, headers); + } } } diff --git a/external/referencesource/System.Web/AspNetSynchronizationContext.cs b/external/referencesource/System.Web/AspNetSynchronizationContext.cs index 05da4054b6..50d1538c9b 100644 --- a/external/referencesource/System.Web/AspNetSynchronizationContext.cs +++ b/external/referencesource/System.Web/AspNetSynchronizationContext.cs @@ -10,6 +10,7 @@ namespace System.Web { using System.Diagnostics.CodeAnalysis; using System.Runtime.ExceptionServices; using System.Threading; + using System.Threading.Tasks; using System.Web.Util; internal sealed class AspNetSynchronizationContext : AspNetSynchronizationContextBase { @@ -129,6 +130,11 @@ namespace System.Web { _state.Helper.QueueAsynchronous(() => callback(state)); } + // The method is used to post async func. + internal void PostAsync(Func callback, Object state) { + _state.Helper.QueueAsynchronousAsync(callback, state); + } + internal override void ProhibitVoidAsyncOperations() { _state.AllowVoidAsyncOperations = false; diff --git a/external/referencesource/System.Web/BufferAllocator.cs b/external/referencesource/System.Web/BufferAllocator.cs index 4981c68ab3..cc768f8aa4 100644 --- a/external/referencesource/System.Web/BufferAllocator.cs +++ b/external/referencesource/System.Web/BufferAllocator.cs @@ -12,6 +12,7 @@ namespace System.Web { using System.Collections; + using System.Collections.Generic; using System.IO; using System.Globalization; @@ -20,10 +21,31 @@ namespace System.Web { ////////////////////////////////////////////////////////////////////////////// // Generic buffer recycling + internal interface IBufferAllocator { + object GetBuffer(); + void ReuseBuffer(object buffer); + void ReleaseAllBuffers(); + int BufferSize { get; } + } + + internal interface IBufferAllocator : IBufferAllocator { + new T[] GetBuffer(); + T[] GetBuffer(int minSize); + void ReuseBuffer(T[] buffer); + } + + internal interface IAllocatorProvider { + IBufferAllocator CharBufferAllocator { get; } + IBufferAllocator IntBufferAllocator { get; } + IBufferAllocator IntPtrBufferAllocator { get; } + + void TrimMemory(); + } + /* * Base class for allocator doing buffer recycling */ - internal abstract class BufferAllocator { + internal abstract class BufferAllocator : IBufferAllocator { private int _maxFree; private int _numFree; private Stack _buffers; @@ -46,7 +68,7 @@ namespace System.Web { _maxFree = maxFree * s_ProcsFudgeFactor; } - internal void ReleaseAllBuffers() { + public void ReleaseAllBuffers() { if (_numFree > 0) { lock (this) { _buffers.Clear(); @@ -55,7 +77,7 @@ namespace System.Web { } } - internal /*public*/ Object GetBuffer() { + public object GetBuffer() { Object buffer = null; if (_numFree > 0) { @@ -73,7 +95,7 @@ namespace System.Web { return buffer; } - internal void ReuseBuffer(Object buffer) { + public void ReuseBuffer(object buffer) { if (_numFree < _maxFree) { lock(this) { if (_numFree < _maxFree) { @@ -88,6 +110,7 @@ namespace System.Web { * To be implemented by a derived class */ abstract protected Object AllocBuffer(); + abstract public int BufferSize { get; } } /* @@ -103,6 +126,12 @@ namespace System.Web { protected override Object AllocBuffer() { return new byte[_bufferSize]; } + + public override int BufferSize { + get { + return _bufferSize; + } + } } /* @@ -120,6 +149,12 @@ namespace System.Web { protected override Object AllocBuffer() { return new char[_bufferSize]; } + + public override int BufferSize { + get { + return _bufferSize; + } + } } /* @@ -137,6 +172,12 @@ namespace System.Web { protected override Object AllocBuffer() { return new int[_arraySize]; } + + public override int BufferSize { + get { + return _arraySize; + } + } } /* @@ -154,6 +195,231 @@ namespace System.Web { protected override Object AllocBuffer() { return new IntPtr[_arraySize]; } + + public override int BufferSize { + get { + return _arraySize; + } + } } + + + /* + * Simple Buffer Allocator - Reusable buffers pool + * Thread UNSAFE! Lock free. Caller must guarantee non-concurent access. + * Use as member of already pooled instances (like HttpApplication) that prohibit concurent access to avoid taking locks + */ + internal class SimpleBufferAllocator : IBufferAllocator { + private Stack _buffers; + private readonly int _bufferSize; + + public SimpleBufferAllocator(int bufferSize) { + if (bufferSize <= 0) { + throw new ArgumentOutOfRangeException("bufferSize"); + } + + _buffers = new Stack(); + _bufferSize = bufferSize; + } + + public T[] GetBuffer() { + return GetBufferImpl(); + } + + public T[] GetBuffer(int minSize) { + if (minSize < 0) { + throw new ArgumentOutOfRangeException("minSize"); + } + + T[] buffer = null; + + if (minSize <= BufferSize) { + // Get from the pool + buffer = GetBufferImpl(); + } + else { + // Allocate a new buffer. It will not be reused later + buffer = AllocBuffer(minSize); + } + + return buffer; + } + + object IBufferAllocator.GetBuffer() { + return GetBufferImpl(); + } + + public void ReuseBuffer(T[] buffer) { + ReuseBufferImpl(buffer); + } + + void IBufferAllocator.ReuseBuffer(object buffer) { + ReuseBufferImpl((T[]) buffer); + } + + public void ReleaseAllBuffers() { + _buffers.Clear(); + } + + public int BufferSize { + get { + return _bufferSize; + } + } + + private T[] GetBufferImpl() { + T[] buffer = null; + + if (_buffers.Count > 0) { + // Get an exisitng buffer + buffer = _buffers.Pop(); + } + else { + // Create a new buffer + buffer = AllocBuffer(BufferSize); + } + + return buffer; + } + + private void ReuseBufferImpl(T[] buffer) { + // Accept back only buffers that match the orirignal buffer size + if (buffer != null && buffer.Length == BufferSize) { + _buffers.Push(buffer); + } + } + + private static T[] AllocBuffer(int size) { + return new T[size]; + } + } + + + /* + * Adapter to convert IBufferAllocator to generic IBufferAllocator<> + */ + class BufferAllocatorWrapper : IBufferAllocator { + private IBufferAllocator _allocator; + + public BufferAllocatorWrapper(IBufferAllocator allocator) { + Debug.Assert(allocator != null); + + _allocator = allocator; + } + + public T[] GetBuffer() { + return (T[])_allocator.GetBuffer(); + } + + public T[] GetBuffer(int minSize) { + if (minSize < 0) { + throw new ArgumentOutOfRangeException("minSize"); + } + + T[] buffer = null; + + if (minSize <= BufferSize) { + // Get from the allocator + buffer = (T[])_allocator.GetBuffer(); + } + else { + // Allocate a new buffer. It will not be reused later + buffer = new T[minSize]; + } + + return buffer; + } + + public void ReuseBuffer(T[] buffer) { + // Accept back only buffers that match the orirignal buffer size + if (buffer != null && buffer.Length == BufferSize) { + _allocator.ReuseBuffer(buffer); + } + } + + object IBufferAllocator.GetBuffer() { + return _allocator.GetBuffer(); + } + + void IBufferAllocator.ReuseBuffer(object buffer) { + ReuseBuffer((T[])buffer); + } + + public void ReleaseAllBuffers() { + _allocator.ReleaseAllBuffers(); + } + + public int BufferSize { + get { + return _allocator.BufferSize; + } + } + } + + + /* + * Provider for different buffer allocators + */ + internal class AllocatorProvider : IAllocatorProvider { + private IBufferAllocator _charAllocator = null; + private IBufferAllocator _intAllocator = null; + private IBufferAllocator _intPtrAllocator = null; + + public IBufferAllocator CharBufferAllocator { + get { + return _charAllocator; + } + + set { + if (value == null) { + throw new ArgumentNullException("value"); + } + + _charAllocator = value; + } + } + + public IBufferAllocator IntBufferAllocator { + get { + return _intAllocator; + } + + set { + if (value == null) { + throw new ArgumentNullException("value"); + } + + _intAllocator = value; + } + } + + public IBufferAllocator IntPtrBufferAllocator { + get { + return _intPtrAllocator; + } + + set { + if (value == null) { + throw new ArgumentNullException("value"); + } + + _intPtrAllocator = value; + } + } + + public void TrimMemory() { + if (_charAllocator != null) { + _charAllocator.ReleaseAllBuffers(); + } + + if (_intAllocator != null) { + _intAllocator.ReleaseAllBuffers(); + } + + if (_intPtrAllocator != null) { + _intPtrAllocator.ReleaseAllBuffers(); + } + } + } } diff --git a/external/referencesource/System.Web/Compilation/BuildManagerHost.cs b/external/referencesource/System.Web/Compilation/BuildManagerHost.cs index 121ee730af..5f1591c4ea 100644 --- a/external/referencesource/System.Web/Compilation/BuildManagerHost.cs +++ b/external/referencesource/System.Web/Compilation/BuildManagerHost.cs @@ -666,7 +666,7 @@ internal class BuildManagerHost : MarshalByRefObject, IRegisteredObject { hashCodeCombiner = new HashCodeCombiner(); } - hashCodeCombiner.AddInt(_stringDictionary[virtualDependency].GetHashCode()); + hashCodeCombiner.AddInt(StringUtil.GetNonRandomizedHashCode((string)_stringDictionary[virtualDependency])); continue; } diff --git a/external/referencesource/System.Web/Compilation/BuildResultCache.cs b/external/referencesource/System.Web/Compilation/BuildResultCache.cs index 700233c709..1e3bfd5a82 100644 --- a/external/referencesource/System.Web/Compilation/BuildResultCache.cs +++ b/external/referencesource/System.Web/Compilation/BuildResultCache.cs @@ -456,7 +456,10 @@ internal abstract class DiskBuildResultCache: BuildResultCache { // as it will not be used in future. if (HostingEnvironment.ShutdownInitiated) { BuildResultCompiledAssemblyBase compiledResult = result as BuildResultCompiledAssemblyBase; - if (compiledResult != null) + + // DevDiv2 880034: check if ResultAssembly is null before calling GetName(). + // UsesExistingAssembly could be true in updatable compilation scenarios. + if (compiledResult != null && compiledResult.ResultAssembly != null && !compiledResult.UsesExistingAssembly) MarkAssemblyAndRelatedFilesForDeletion(compiledResult.ResultAssembly.GetName().Name); return; } diff --git a/external/referencesource/System.Web/Compilation/CompilationLock.cs b/external/referencesource/System.Web/Compilation/CompilationLock.cs index 7ed6960eed..5872f0ea61 100644 --- a/external/referencesource/System.Web/Compilation/CompilationLock.cs +++ b/external/referencesource/System.Web/Compilation/CompilationLock.cs @@ -169,7 +169,8 @@ internal static class CompilationLock { // Create the mutex (or just get it if another process created it). // Make the mutex unique per application - int hashCode = ("CompilationLock" + HttpRuntime.AppDomainAppId.ToLower(CultureInfo.InvariantCulture)).GetHashCode(); + int hashCode = StringUtil.GetNonRandomizedHashCode("CompilationLock" + HttpRuntime.AppDomainAppId.ToLower(CultureInfo.InvariantCulture)); + _mutex = new CompilationMutex( "CL" + hashCode.ToString("x", CultureInfo.InvariantCulture), diff --git a/external/referencesource/System.Web/Configuration/BuildProvider.cs b/external/referencesource/System.Web/Configuration/BuildProvider.cs index 76cc4b645f..f19c19721b 100644 --- a/external/referencesource/System.Web/Configuration/BuildProvider.cs +++ b/external/referencesource/System.Web/Configuration/BuildProvider.cs @@ -70,7 +70,7 @@ namespace System.Web.Configuration { return (o != null && StringUtil.EqualsIgnoreCase(Extension, o.Extension) && Type == o.Type); } public override int GetHashCode() { - return HashCodeCombiner.CombineHashCodes(Extension.ToLower(CultureInfo.InvariantCulture).GetHashCode(), + return HashCodeCombiner.CombineHashCodes(StringUtil.GetNonRandomizedHashCode(Extension.ToLower(CultureInfo.InvariantCulture)), Type.GetHashCode()); } diff --git a/external/referencesource/System.Web/Configuration/FolderLevelBuildProvider.cs b/external/referencesource/System.Web/Configuration/FolderLevelBuildProvider.cs index 8d7d681ac6..bec2a0d62a 100644 --- a/external/referencesource/System.Web/Configuration/FolderLevelBuildProvider.cs +++ b/external/referencesource/System.Web/Configuration/FolderLevelBuildProvider.cs @@ -61,7 +61,7 @@ namespace System.Web.Configuration { return (o != null && StringUtil.EqualsIgnoreCase(Name, o.Name) && Type == o.Type); } public override int GetHashCode() { - return HashCodeCombiner.CombineHashCodes(Name.ToLower(CultureInfo.InvariantCulture).GetHashCode(), + return HashCodeCombiner.CombineHashCodes(StringUtil.GetNonRandomizedHashCode(Name.ToLower(CultureInfo.InvariantCulture)), Type.GetHashCode()); } diff --git a/external/referencesource/System.Web/Configuration/HttpCapabilitiesBase.cs b/external/referencesource/System.Web/Configuration/HttpCapabilitiesBase.cs index 7cd78d448a..e2f95210c4 100644 --- a/external/referencesource/System.Web/Configuration/HttpCapabilitiesBase.cs +++ b/external/referencesource/System.Web/Configuration/HttpCapabilitiesBase.cs @@ -404,7 +404,8 @@ namespace System.Web.Configuration { return null; } - Regex regex = new Regex("\\.NET CLR (?'clrVersion'[0-9\\.]*)"); + // Adding timeout for Regex in case of malicious UA string causing DoS + Regex regex = RegexUtil.CreateRegex("\\.NET CLR (?'clrVersion'[0-9\\.]*)", RegexOptions.None); MatchCollection matches = regex.Matches(ua); if (matches.Count == 0) { diff --git a/external/referencesource/System.Web/Configuration/MachineKeySection.cs b/external/referencesource/System.Web/Configuration/MachineKeySection.cs index ec0608ac24..11d8924310 100644 --- a/external/referencesource/System.Web/Configuration/MachineKeySection.cs +++ b/external/referencesource/System.Web/Configuration/MachineKeySection.cs @@ -106,8 +106,8 @@ namespace System.Web.Configuration internal byte[] ValidationKeyInternal { get { RuntimeDataInitialize(); return (byte[])_ValidationKey.Clone(); } } internal byte[] DecryptionKeyInternal { get { RuntimeDataInitialize(); return (byte[])_DecryptionKey.Clone(); } } - internal static int HashSize { get { s_config.RuntimeDataInitialize(); return _HashSize; } } - internal static int ValidationKeySize { get { s_config.RuntimeDataInitialize(); return _AutoGenValidationKeySize; } } + internal static int HashSize { get { EnsureConfig(); s_config.RuntimeDataInitialize(); return _HashSize; } } + internal static int ValidationKeySize { get { EnsureConfig(); s_config.RuntimeDataInitialize(); return _AutoGenValidationKeySize; } } static MachineKeySection() { @@ -369,7 +369,7 @@ namespace System.Web.Configuration } if (fAppSpecific) { - int dwCode = StringComparer.InvariantCultureIgnoreCase.GetHashCode( appName ); + int dwCode = StringUtil.GetNonRandomizedStringComparerHashCode(appName); _ValidationKey[0] = (byte)(dwCode & 0xff); _ValidationKey[1] = (byte)((dwCode & 0xff00) >> 8); _ValidationKey[2] = (byte)((dwCode & 0xff0000) >> 16); @@ -377,7 +377,7 @@ namespace System.Web.Configuration } if (fAppIdSpecific) { - int dwCode = StringComparer.InvariantCultureIgnoreCase.GetHashCode( appId ); + int dwCode = StringUtil.GetNonRandomizedStringComparerHashCode(appId); _ValidationKey[4] = (byte)(dwCode & 0xff); _ValidationKey[5] = (byte)((dwCode & 0xff00) >> 8); _ValidationKey[6] = (byte)((dwCode & 0xff0000) >> 16); @@ -425,7 +425,7 @@ namespace System.Web.Configuration } if (fAppSpecific) { - int dwCode = StringComparer.InvariantCultureIgnoreCase.GetHashCode(appName); + int dwCode = StringUtil.GetNonRandomizedStringComparerHashCode(appName); _DecryptionKey[0] = (byte)(dwCode & 0xff); _DecryptionKey[1] = (byte)((dwCode & 0xff00) >> 8); _DecryptionKey[2] = (byte)((dwCode & 0xff0000) >> 16); @@ -433,7 +433,7 @@ namespace System.Web.Configuration } if (fAppIdSpecific) { - int dwCode = StringComparer.InvariantCultureIgnoreCase.GetHashCode(appId); + int dwCode = StringUtil.GetNonRandomizedStringComparerHashCode(appId); _DecryptionKey[4] = (byte)(dwCode & 0xff); _DecryptionKey[5] = (byte)((dwCode & 0xff00) >> 8); _DecryptionKey[6] = (byte)((dwCode & 0xff0000) >> 16); diff --git a/external/referencesource/System.Web/Configuration/MembershipSection.cs b/external/referencesource/System.Web/Configuration/MembershipSection.cs index f3ea42245b..a58f233ea6 100644 --- a/external/referencesource/System.Web/Configuration/MembershipSection.cs +++ b/external/referencesource/System.Web/Configuration/MembershipSection.cs @@ -48,6 +48,7 @@ namespace System.Web.Configuration { minRequiredPasswordLength="int" The minimum number of characters required in a password minRequiredNonAlphanumericCharacters="int" The minimum number of non-alphanumeric characters that are required in a password passwordStrengthRegularExpression="string" The regular expression used to test the password strength + passwordStrengthRegexTimeout="int" The timeout in milliseconds for the regex we use to check password strength --> @@ -60,6 +61,7 @@ namespace System.Web.Configuration { minRequiredPasswordLength="7" minRequireNonAlphanumericCharacters="1" passwordStrengthRegularExpression="" + passwordStrengthRegexTimeout="2000" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" diff --git a/external/referencesource/System.Web/Configuration/RegexWorker.cs b/external/referencesource/System.Web/Configuration/RegexWorker.cs index 34d9ce4cda..2d1059b687 100644 --- a/external/referencesource/System.Web/Configuration/RegexWorker.cs +++ b/external/referencesource/System.Web/Configuration/RegexWorker.cs @@ -88,7 +88,8 @@ namespace System.Web.Configuration { target = String.Empty; } - Regex regex = new Regex(regexExpression, RegexOptions.ExplicitCapture); + // Adding timeout for Regex in case of malicious string causing DoS + Regex regex = RegexUtil.CreateRegex(regexExpression, RegexOptions.ExplicitCapture); Match match = regex.Match(target); if(match.Success == false) { return false; diff --git a/external/referencesource/System.Web/Configuration/RuntimeConfig.cs b/external/referencesource/System.Web/Configuration/RuntimeConfig.cs index 165eb0320c..71507e5148 100644 --- a/external/referencesource/System.Web/Configuration/RuntimeConfig.cs +++ b/external/referencesource/System.Web/Configuration/RuntimeConfig.cs @@ -59,7 +59,6 @@ namespace System.Web.Configuration { // For config implemented with IConfigurationSectionHandler, this // may return null, non-null, or throw an exception. // - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] static internal RuntimeConfig GetConfig(HttpContext context) { if (!HttpConfigurationSystem.UseHttpConfigurationSystem) { return GetClientRuntimeConfig(); @@ -359,7 +358,6 @@ namespace System.Web.Configuration { } internal PagesSection Pages { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { return (PagesSection) GetSection("system.web/pages", typeof(PagesSection), ResultsIndex.Pages); } diff --git a/external/referencesource/System.Web/Configuration/TicketCompatibilityMode.cs b/external/referencesource/System.Web/Configuration/TicketCompatibilityMode.cs index 98dde74111..167e0fdaf8 100644 --- a/external/referencesource/System.Web/Configuration/TicketCompatibilityMode.cs +++ b/external/referencesource/System.Web/Configuration/TicketCompatibilityMode.cs @@ -9,4 +9,4 @@ namespace System.Web.Configuration { Framework20 = 0, Framework40 = 1, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web/ErrorFormatter.cs b/external/referencesource/System.Web/ErrorFormatter.cs index 7e3585ba61..da1e84b81c 100644 --- a/external/referencesource/System.Web/ErrorFormatter.cs +++ b/external/referencesource/System.Web/ErrorFormatter.cs @@ -1851,6 +1851,7 @@ namespace System.Web { protected string _message; private Exception _e; private StringCollection _adaptiveMiscContent = new StringCollection(); + private bool _allowSourceCode; internal ConfigErrorFormatter(System.Configuration.ConfigurationException e) : base(null /*virtualPath*/, e.Filename, null, e.Line) { @@ -1861,6 +1862,11 @@ namespace System.Web { _adaptiveMiscContent.Add(_message); } + public bool AllowSourceCode { + get { return _allowSourceCode; } + set { _allowSourceCode = value; } + } + protected override Encoding SourceFileEncoding { get { return Encoding.UTF8; } } @@ -1892,6 +1898,16 @@ namespace System.Web { protected override StringCollection AdaptiveMiscContent { get { return _adaptiveMiscContent;} } + + protected override string ColoredSquareContent { + get { + if (!AllowSourceCode) { + return SR.GetString(SR.Generic_Err_Remote_Desc); + } + + return base.ColoredSquareContent; + } + } } /* diff --git a/external/referencesource/System.Web/EtwTrace.cs b/external/referencesource/System.Web/EtwTrace.cs index cfbe331a35..8a5b641c7e 100644 --- a/external/referencesource/System.Web/EtwTrace.cs +++ b/external/referencesource/System.Web/EtwTrace.cs @@ -185,7 +185,6 @@ namespace System.Web { return verbosity; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal static bool IsTraceEnabled(int level, int flag) { if (level < _traceLevel && ((flag & _traceFlags) != EtwTraceFlags.None)) return true; diff --git a/external/referencesource/System.Web/GlobalSuppressions.cs.REMOVED.git-id b/external/referencesource/System.Web/GlobalSuppressions.cs.REMOVED.git-id index fe70d1d998..1aae129d7d 100644 --- a/external/referencesource/System.Web/GlobalSuppressions.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/GlobalSuppressions.cs.REMOVED.git-id @@ -1 +1 @@ -06e9d1dc4fafc6cc8aa615dea6155959fce3b251 \ No newline at end of file +a08a78cade267cf2dc03c9b1a531fa6d60318d42 \ No newline at end of file diff --git a/external/referencesource/System.Web/GlobalSuppressions3.cs b/external/referencesource/System.Web/GlobalSuppressions3.cs index 204e6dcca4..7a9617468f 100644 --- a/external/referencesource/System.Web/GlobalSuppressions3.cs +++ b/external/referencesource/System.Web/GlobalSuppressions3.cs @@ -136,4 +136,4 @@ using System.Diagnostics.CodeAnalysis; [module: SuppressMessage("Microsoft.Usage","CA2213:DisposableFieldsShouldBeDisposed", MessageId="_rawContent", Scope="member", Target="System.Web.HttpBufferlessInputStream.#Dispose(System.Boolean)", Justification="Baselined from previous FxCop.")] [module: SuppressMessage("Microsoft.Usage","CA1806:DoNotIgnoreMethodResults", MessageId="System.Web.UnsafeNativeMethods.StartPrefetchActivity(System.UInt32)", Scope="member", Target="System.Web.HttpRuntime.#HostingInit(System.Web.Hosting.HostingEnvironmentFlags,System.Security.Policy.PolicyLevel,System.Exception)", Justification="Baselined from previous FxCop.")] -#endregion +#endregion \ No newline at end of file diff --git a/external/referencesource/System.Web/Hosting/AppDomainFactory.cs b/external/referencesource/System.Web/Hosting/AppDomainFactory.cs index c14cfb1e9c..530e00340c 100644 --- a/external/referencesource/System.Web/Hosting/AppDomainFactory.cs +++ b/external/referencesource/System.Web/Hosting/AppDomainFactory.cs @@ -190,14 +190,18 @@ namespace System.Web.Hosting { _appManager.Close(); } - internal static String ConstructSimpleAppName(string virtPath) { + internal static String ConstructSimpleAppName(string virtPath, bool isDevEnvironment) { // devdiv 710164: Still repro - ctrl-f5 a WAP project might show "Cannot create/shadow copy when a file exists" error // since the hash file lists are different, IISExpress launched by VS cannot reuse the build result from VS build. // It deletes the build files generated by CBM and starts another round of build. This causes interruption between IISExpress and VS // and leads to this shallow copy exception. // fix: make the dev IISExpress build to a special drop location + // devdiv 1038337: execution permission cannot be acquired under partial trust with ctrl-f5. + // We previously use HostingEnvironment to determine whether it is under dev environment and the returned string. However, + // for partial trust scenario, this method is called before HostingEnvironment has been initialized, we thus may return a wrong value. + // To fix it, we requir the caller to pass in a flag indicating whether it is under dev environment. if (virtPath.Length <= 1) { // root? - if (!BuildManagerHost.InClientBuildManager && HostingEnvironment.IsDevelopmentEnvironment) + if (!BuildManagerHost.InClientBuildManager && isDevEnvironment) return "vs"; else return "root"; diff --git a/external/referencesource/System.Web/Hosting/ApplicationHost.cs b/external/referencesource/System.Web/Hosting/ApplicationHost.cs index 0bd1944ed0..d465bcd978 100644 --- a/external/referencesource/System.Web/Hosting/ApplicationHost.cs +++ b/external/referencesource/System.Web/Hosting/ApplicationHost.cs @@ -49,7 +49,8 @@ namespace System.Web.Hosting { ApplicationManager appManager = ApplicationManager.GetApplicationManager(); - String appId = (String.Concat(virtualDir, physicalDir).GetHashCode()).ToString("x"); + String appId = StringUtil.GetNonRandomizedHashCode(String.Concat(virtualDir, physicalDir)).ToString("x"); + ObjectHandle h = appManager.CreateInstanceInNewWorkerAppDomain( hostType, appId, VirtualPath.CreateNonRelative(virtualDir), physicalDir); diff --git a/external/referencesource/System.Web/Hosting/ApplicationManager.cs b/external/referencesource/System.Web/Hosting/ApplicationManager.cs index 491956b790..e02ad7fb55 100644 --- a/external/referencesource/System.Web/Hosting/ApplicationManager.cs +++ b/external/referencesource/System.Web/Hosting/ApplicationManager.cs @@ -57,6 +57,7 @@ namespace System.Web.Hosting { public sealed class ApplicationManager : MarshalByRefObject { + private const string _clrQuirkAppSettingsAppContextPrefix = "AppContext.SetSwitch:"; private const string _regexMatchTimeoutKey = "REGEX_DEFAULT_MATCH_TIMEOUT"; private static readonly StrongName _mwiV1StrongName = GetMicrosoftWebInfrastructureV1StrongName(); @@ -734,6 +735,14 @@ namespace System.Web.Hosting { } } + // ApplicationManager is loaded into the default AppDomain + // ASP.NET doesn't set string hash randomization for the defaul AppDomain, so we can assume the existing CLR implementation here is unchanged + // Note, it won't work if is used, because the entire process is subject to string hash randomization + internal int GetNonRandomizedStringComparerHashCode(string s, bool ignoreCase) { + StringComparer comparer = ignoreCase ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture; + return comparer.GetHashCode(s); + } + // // communication with hosting environments // @@ -972,8 +981,10 @@ namespace System.Web.Hosting { customLoaderException.Throw(); } - // DevDiv #392603 - disallow running applications when string hash code randomization is enabled - if (EnvironmentInfo.IsStringHashCodeRandomizationEnabled) { + // We support randomized string hash code, but not for the default AppDomain + // Don't allow string hash randomization for the defaul AppDomain (i.e. ) + // Application should use AppSettings instead to opt-in. + if (EnvironmentInfo.IsStringHashCodeRandomizationDetected) { throw new ConfigurationErrorsException(SR.GetString(SR.Require_stable_string_hash_codes)); } @@ -1009,7 +1020,7 @@ namespace System.Web.Hosting { // in the AppDomain data guarantees that it is available before the first call to the config system. FrameworkName targetFrameworkName = httpRuntimeSection.GetTargetFrameworkName(); if (targetFrameworkName != null) { - appDomainAdditionalData[BinaryCompatibility.TargetFrameworkKey] = targetFrameworkName; + appDomainAdditionalData[System.Web.Util.BinaryCompatibility.TargetFrameworkKey] = targetFrameworkName; } if (!skipAdditionalConfigChecks) { @@ -1028,7 +1039,39 @@ namespace System.Web.Hosting { AppSettingsSection appSettingsSection = appConfig.AppSettings; KeyValueConfigurationElement useTaskFriendlySynchronizationContextElement = appSettingsSection.Settings["aspnet:UseTaskFriendlySynchronizationContext"]; if (!(useTaskFriendlySynchronizationContextElement != null && Boolean.TryParse(useTaskFriendlySynchronizationContextElement.Value, out requireHostExecutionContextManager))) { - requireHostExecutionContextManager = new BinaryCompatibility(targetFrameworkName).TargetsAtLeastFramework45 ? true : false; + requireHostExecutionContextManager = new System.Web.Util.BinaryCompatibility(targetFrameworkName).TargetsAtLeastFramework45 ? true : false; + } + + // DevDiv #390704 - Add support for randomized string hash algorithm + KeyValueConfigurationElement useRandomizedStringHashAlgorithmElement = appSettingsSection.Settings["aspnet:UseRandomizedStringHashAlgorithm"]; + bool useRandomizedStringHashAlgorithm = false; + if (useRandomizedStringHashAlgorithmElement != null && Boolean.TryParse(useRandomizedStringHashAlgorithmElement.Value, out useRandomizedStringHashAlgorithm)) { + switches.UseRandomizedStringHashAlgorithm = useRandomizedStringHashAlgorithm; + } + + // DevDiv #1041102 - Allow specifying quirks via switches + // The keys must begin with "AppContext.SetSwitch" and have a non-zero key name length, + // and the values must be parseable as Booleans. + Dictionary clrQuirks = null; + foreach (KeyValueConfigurationElement element in appSettingsSection.Settings) { + if (element.Key != null && element.Key.Length > _clrQuirkAppSettingsAppContextPrefix.Length && element.Key.StartsWith(_clrQuirkAppSettingsAppContextPrefix, StringComparison.OrdinalIgnoreCase)) { + bool value; + if (Boolean.TryParse(element.Value, out value)) { + if (clrQuirks == null) { + clrQuirks = new Dictionary(); + } + + clrQuirks[element.Key.Substring(_clrQuirkAppSettingsAppContextPrefix.Length)] = value; + } + } + } + + if (clrQuirks != null && clrQuirks.Count > 0) { + if (hostingParameters == null) { + hostingParameters = new HostingEnvironmentParameters(); + } + + hostingParameters.ClrQuirksSwitches = clrQuirks.ToArray(); } // DevDiv #248126 - Allow configuration of FileChangeMonitor behavior @@ -1057,8 +1100,10 @@ namespace System.Web.Hosting { // we only do this check if [the default value] is specified, since the // element can only be set at machine-level in a hosted environment. DeploymentSection deploymentSection = (DeploymentSection)appConfig.GetSection("system.web/deployment"); + bool isDevEnvironment = false; if (deploymentSection != null && !deploymentSection.Retail && EnvironmentInfo.WasLaunchedFromDevelopmentEnvironment) { appDomainAdditionalData[".devEnvironment"] = true; + isDevEnvironment = true; // DevDiv #275724 - Allow LocalDB support in partial trust scenarios // Normally LocalDB requires full trust since it's the equivalent of unmanaged code execution. If this is @@ -1092,7 +1137,7 @@ namespace System.Web.Hosting { SecurityPolicySection securityPolicySection = (SecurityPolicySection)appConfig.GetSection("system.web/securityPolicy"); CompilationSection compilationSection = (CompilationSection)appConfig.GetSection("system.web/compilation"); FullTrustAssembliesSection fullTrustAssembliesSection = (FullTrustAssembliesSection)appConfig.GetSection("system.web/fullTrustAssemblies"); - policyLevel = GetPartialTrustPolicyLevel(trustSection, securityPolicySection, compilationSection, physicalPath, virtualPath); + policyLevel = GetPartialTrustPolicyLevel(trustSection, securityPolicySection, compilationSection, physicalPath, virtualPath, isDevEnvironment); permissionSet = policyLevel.GetNamedPermissionSet(trustSection.PermissionSetName); if (permissionSet == null) { throw new ConfigurationErrorsException(SR.GetString(SR.Permission_set_not_found, trustSection.PermissionSetName)); @@ -1331,10 +1376,14 @@ setup, } } + + // devdiv 1038337: execution permission cannot be acquired under partial trust with ctrl-f5. + // We build the codegen path in default domain. In order to build the right path, + // caller must pass in a flag indicating whether it is under dev environment. [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Justification = "We carefully control this method's caller.")] private static PolicyLevel GetPartialTrustPolicyLevel( TrustSection trustSection, SecurityPolicySection securityPolicySection, - CompilationSection compilationSection, string physicalPath, VirtualPath virtualPath) { + CompilationSection compilationSection, string physicalPath, VirtualPath virtualPath, bool isDevEnvironment) { if (securityPolicySection == null || securityPolicySection.TrustLevels[trustSection.Level] == null) { throw new ConfigurationErrorsException(SR.GetString(SR.Unable_to_get_policy_file, trustSection.Level), String.Empty, 0); } @@ -1405,7 +1454,7 @@ setup, tempDirectory = Path.Combine(tempDirectory, HttpRuntime.codegenDirName); } String simpleAppName = System.Web.Hosting.AppManagerAppDomainFactory.ConstructSimpleAppName( - VirtualPath.GetVirtualPathStringNoTrailingSlash(virtualPath)); + VirtualPath.GetVirtualPathStringNoTrailingSlash(virtualPath), isDevEnvironment); String binDir = Path.Combine(tempDirectory, simpleAppName); binDir = FileUtil.RemoveTrailingDirectoryBackSlash(binDir); String binDirUrl = HttpRuntime.MakeFileUrl(binDir); @@ -1727,6 +1776,7 @@ setup, private sealed class AppDomainSwitches { public bool UseLegacyCas; + public bool UseRandomizedStringHashAlgorithm; public void Apply(AppDomainSetup setup) { List switches = new List(); @@ -1736,6 +1786,10 @@ setup, switches.Add("NetFx40_LegacySecurityPolicy"); } + if (UseRandomizedStringHashAlgorithm) { + switches.Add("UseRandomizedStringHashAlgorithm"); + } + if (switches.Count > 0) { setup.SetCompatibilitySwitches(switches); } @@ -1747,10 +1801,10 @@ setup, // This prevents accidental misuse of this type via querying the environment after user code has had a chance to // run, which could potentially affect the environment itself. private static class EnvironmentInfo { - public static readonly bool IsStringHashCodeRandomizationEnabled = GetIsStringHashCodeRandomizationEnabled(); + public static readonly bool IsStringHashCodeRandomizationDetected = GetIsStringHashCodeRandomizationDetected(); public static readonly bool WasLaunchedFromDevelopmentEnvironment = GetWasLaunchedFromDevelopmentEnvironmentValue(); - private static bool GetIsStringHashCodeRandomizationEnabled() { + private static bool GetIsStringHashCodeRandomizationDetected() { // known test vector return (StringComparer.InvariantCultureIgnoreCase.GetHashCode("The quick brown fox jumps over the lazy dog.") != 0x703e662e); } diff --git a/external/referencesource/System.Web/Hosting/HostingEnvironment.cs b/external/referencesource/System.Web/Hosting/HostingEnvironment.cs index 1dda494cbe..d5d2c15e35 100644 --- a/external/referencesource/System.Web/Hosting/HostingEnvironment.cs +++ b/external/referencesource/System.Web/Hosting/HostingEnvironment.cs @@ -86,6 +86,11 @@ namespace System.Web.Hosting { get; set; } + + public KeyValuePair[] ClrQuirksSwitches { + get; + set; + } } public sealed class HostingEnvironment : MarshalByRefObject { @@ -279,6 +284,10 @@ namespace System.Web.Hosting { BuildManagerHost.SupportsMultiTargeting = true; } + // Set CLR quirks switches before the config system is initialized since config might depend on them + if (_hostingParameters != null && _hostingParameters.ClrQuirksSwitches != null && _hostingParameters.ClrQuirksSwitches.Length > 0) { + SetClrQuirksSwitches(_hostingParameters.ClrQuirksSwitches); + } // // init config system using private config if applicable @@ -434,6 +443,32 @@ namespace System.Web.Hosting { } } + private static void SetClrQuirksSwitches(KeyValuePair[] switches) { + // First, see if the static API AppContext.SetSwitch even exists. + // Type.GetType will return null if the type doesn't exist; it will throw on catastrophic failure. + + Type appContextType = Type.GetType("System.AppContext, " + AssemblyRef.Mscorlib); + if (appContextType == null) { + return; // wrong version of mscorlib - do nothing + } + + Action setter = (Action)Delegate.CreateDelegate( + typeof(Action), + appContextType, + "SetSwitch", + ignoreCase: false, + throwOnBindFailure: false); + if (setter == null) { + return; // wrong version of mscorlib - do nothing + } + + // Finally, set each switch individually. + + foreach (var sw in switches) { + setter(sw.Key, sw.Value); + } + } + // If an exception was thrown during initialization, return it. public static Exception InitializationException { diff --git a/external/referencesource/System.Web/Hosting/IIS7WorkerRequest.cs.REMOVED.git-id b/external/referencesource/System.Web/Hosting/IIS7WorkerRequest.cs.REMOVED.git-id index 015ec8b645..8487209524 100644 --- a/external/referencesource/System.Web/Hosting/IIS7WorkerRequest.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/Hosting/IIS7WorkerRequest.cs.REMOVED.git-id @@ -1 +1 @@ -104c2e5619eb888ddfb4a78df758a7759c7319be \ No newline at end of file +11db9517311df13fd3dac1b168d64148dc88a659 \ No newline at end of file diff --git a/external/referencesource/System.Web/Hosting/IISUnsafeMethods.cs b/external/referencesource/System.Web/Hosting/IISUnsafeMethods.cs index c2282b5b8f..c1fd851c79 100644 --- a/external/referencesource/System.Web/Hosting/IISUnsafeMethods.cs +++ b/external/referencesource/System.Web/Hosting/IISUnsafeMethods.cs @@ -682,5 +682,30 @@ namespace System.Web.Hosting { [In, MarshalAs(UnmanagedType.BStr)] string sectionName, [In, MarshalAs(UnmanagedType.BStr)] string propertyName, [Out, MarshalAs(UnmanagedType.Struct)] out object value); // marshaled as VARIANT + + [DllImport(_IIS_NATIVE_DLL)] + [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "We carefully control this method's callers.")] + internal static extern int MgdPushPromise( + [In] IntPtr context, + [In, MarshalAs(UnmanagedType.LPWStr)] string path, + [In, MarshalAs(UnmanagedType.LPWStr)] string queryString, + [In, MarshalAs(UnmanagedType.LPStr)] string method, + [In] int numHeaders, + [In, MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)] string[] headersNames, + [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] string[] headersValues); + + [DllImport(_IIS_NATIVE_DLL)] + [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "We carefully control this method's callers.")] + internal static extern bool MgdIsAppPoolShuttingDown(); + + [DllImport(_IIS_NATIVE_DLL)] + [SuppressMessage("Microsoft.Security", "CA2118:ReviewSuppressUnmanagedCodeSecurityUsage", Justification = "We carefully control this method's callers.")] + internal static extern int MgdGetTlsTokenBindingIdentifiers( + [In] IntPtr pHandler, + [In, Out] ref IntPtr tokenBindingHandle, + [Out] out IntPtr providedToken, + [Out] out uint providedTokenSize, + [Out] out IntPtr referredToken, + [Out] out uint referredTokenSize); } } diff --git a/external/referencesource/System.Web/Hosting/IPipelineRuntime.cs b/external/referencesource/System.Web/Hosting/IPipelineRuntime.cs index 49dc623a3b..222d02f8af 100644 --- a/external/referencesource/System.Web/Hosting/IPipelineRuntime.cs +++ b/external/referencesource/System.Web/Hosting/IPipelineRuntime.cs @@ -573,7 +573,17 @@ namespace System.Web.Hosting { } context.NotificationContext = new NotificationContext(flags /*CurrentNotificationFlags*/, isReEntry); + + Action verifierCheck = null; + if (AppVerifier.IsAppVerifierEnabled) { + verifierCheck = AppVerifier.GetRequestNotificationStatusCheckDelegate(context, (RequestNotification)currentNotification, isPostNotification); + } + status = HttpRuntime.ProcessRequestNotification(wr, context); + + if (verifierCheck != null) { + AppVerifier.InvokeVerifierCheck(verifierCheck, status); + } } finally { if (status != RequestNotificationStatus.Pending) { diff --git a/external/referencesource/System.Web/Hosting/ISAPIWorkerRequest.cs.REMOVED.git-id b/external/referencesource/System.Web/Hosting/ISAPIWorkerRequest.cs.REMOVED.git-id index 0283ea8d29..e6c2eb8d26 100644 --- a/external/referencesource/System.Web/Hosting/ISAPIWorkerRequest.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/Hosting/ISAPIWorkerRequest.cs.REMOVED.git-id @@ -1 +1 @@ -6b26e37c0094170dda0b90f622c5fbe3165344f7 \ No newline at end of file +ce3d178ea98df8349b79281a9f46ddb56a0a5d73 \ No newline at end of file diff --git a/external/referencesource/System.Web/Hosting/ProcessHost.cs b/external/referencesource/System.Web/Hosting/ProcessHost.cs index 7e7540030b..84ef7393ae 100644 --- a/external/referencesource/System.Web/Hosting/ProcessHost.cs +++ b/external/referencesource/System.Web/Hosting/ProcessHost.cs @@ -567,7 +567,7 @@ namespace System.Web.Hosting { ISAPIApplicationHost appHost = CreateAppHost(appId, null); - // get app domaoin protocol handler type from config + // get app domain protocol handler type from config Type handlerType = GetAppDomainProtocolHandlerType(protocolId); AppDomainProtocolHandler handler = null; @@ -986,7 +986,7 @@ namespace System.Web.Hosting { internal static void PreloadApplicationIfNotShuttingdown (string appId, LockableAppDomainContext ac) { // If GL_STOP_LISTENING wasn't triggered, the reset is likely due to a configuration change. - if (ProcessHost.DefaultHost != null && !HostingEnvironment.StopListeningWasCalled) { + if (ProcessHost.DefaultHost != null && !UnsafeIISMethods.MgdIsAppPoolShuttingDown()) { // Start the new app on another thread instead of hijacking the current app unloading thread ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object o) { lock (ac) { @@ -1007,7 +1007,7 @@ namespace System.Web.Hosting { })); } } - + // New for Dev10. // creates a new AppDomain, preloads and calls user code in it internal void PreloadApplicationIfRequired( diff --git a/external/referencesource/System.Web/Hosting/TlsTokenBindingInfo.cs b/external/referencesource/System.Web/Hosting/TlsTokenBindingInfo.cs new file mode 100644 index 0000000000..32c9a84a3b --- /dev/null +++ b/external/referencesource/System.Web/Hosting/TlsTokenBindingInfo.cs @@ -0,0 +1,31 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ + +namespace System.Web.Hosting { + using System; + + internal sealed class TlsTokenBindingInfo : ITlsTokenBindingInfo { + private readonly byte[] _providedTokenBindingId; + private readonly byte[] _referredTokenBindingId; + + internal TlsTokenBindingInfo(byte[] providedTokenBindingId, byte[] referredTokenBindingId) { + _providedTokenBindingId = providedTokenBindingId; + _referredTokenBindingId = referredTokenBindingId; + } + + public byte[] GetProvidedTokenBindingId() { + return (_providedTokenBindingId != null) + ? (byte[])_providedTokenBindingId.Clone() + : null; + } + + public byte[] GetReferredTokenBindingId() { + return (_referredTokenBindingId != null) + ? (byte[])_referredTokenBindingId.Clone() + : null; + } + } +} diff --git a/external/referencesource/System.Web/HttpApplication.cs.REMOVED.git-id b/external/referencesource/System.Web/HttpApplication.cs.REMOVED.git-id index 6362b52f9d..ff673950e1 100644 --- a/external/referencesource/System.Web/HttpApplication.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/HttpApplication.cs.REMOVED.git-id @@ -1 +1 @@ -9f8015b252708419b3e2b686ecb1830663b5796e \ No newline at end of file +eff422558e332b96b845c2f140b46d0117076596 \ No newline at end of file diff --git a/external/referencesource/System.Web/HttpCachePolicy.cs b/external/referencesource/System.Web/HttpCachePolicy.cs index ca6e24574f..5cdde5d300 100644 --- a/external/referencesource/System.Web/HttpCachePolicy.cs +++ b/external/referencesource/System.Web/HttpCachePolicy.cs @@ -315,9 +315,10 @@ namespace System.Web { HttpCacheValidateHandler handler = _validationCallbackInfo[i].handler; string targetTypeName = System.Web.UI.Util.GetAssemblyQualifiedTypeName(handler.Method.ReflectedType); string methodName = handler.Method.Name; - callbackInfos[i] = targetTypeName; - callbackInfos[i+1] = methodName; + callbackInfos[2 * i] = targetTypeName; + callbackInfos[2 * i + 1] = methodName; } + _validationCallbackInfoForSerialization = callbackInfos; } @@ -339,7 +340,7 @@ namespace System.Web { throw new SerializationException(SR.GetString(SR.Type_cannot_be_resolved, targetTypeName)); } HttpCacheValidateHandler handler = (HttpCacheValidateHandler) Delegate.CreateDelegate(typeof(HttpCacheValidateHandler), target, methodName); - callbackInfos[i] = new ValidationCallbackInfo(handler, null); + callbackInfos[i / 2] = new ValidationCallbackInfo(handler, null); } _validationCallbackInfo = callbackInfos; } diff --git a/external/referencesource/System.Web/HttpContext.cs b/external/referencesource/System.Web/HttpContext.cs index 357c37bbc9..4d02a0a8a8 100644 --- a/external/referencesource/System.Web/HttpContext.cs +++ b/external/referencesource/System.Web/HttpContext.cs @@ -757,6 +757,15 @@ namespace System.Web { } else { _appInstance = value; + + // Use HttpApplication instance custom allocator provider + if (_isIntegratedPipeline) { + // The provider allows null - everyone should fallback to default implementation + IAllocatorProvider allocator = _appInstance != null ? _appInstance.AllocatorProvider : null; + + _response.SetAllocatorProvider(allocator); + ((IIS7WorkerRequest)_wr).AllocatorProvider = allocator; + } } } } @@ -902,7 +911,6 @@ namespace System.Web { /// /// public HttpRequest Request { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { if (HideRequestResponse) throw new HttpException(SR.GetString(SR.Request_not_available)); @@ -918,7 +926,6 @@ namespace System.Web { /// /// public HttpResponse Response { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { if (HideRequestResponse || HasWebSocketRequestTransitionCompleted) throw new HttpException(SR.GetString(SR.Response_not_available)); @@ -1723,7 +1730,6 @@ namespace System.Web { */ - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal void BeginCancellablePeriod() { // It could be caused by an exception in OnThreadStart if (Volatile.Read(ref _timeoutStartTimeUtcTicks) == -1) { @@ -1741,7 +1747,6 @@ namespace System.Web { Interlocked.CompareExchange(ref _timeoutState, 0, 1); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal void WaitForExceptionIfCancelled() { while (Volatile.Read(ref _timeoutState) == -1) Thread.Sleep(100); @@ -2256,7 +2261,7 @@ namespace System.Web { return CultureUtil.CreateReadOnlyCulture(userLanguages, requireSpecific); } catch { - return CultureUtil.CreateReadOnlyCulture(configString, requireSpecific); + return CultureUtil.CreateReadOnlyCulture(configString.Substring(5 /* "auto:".Length */), requireSpecific); } } else { diff --git a/external/referencesource/System.Web/HttpHeaderCollection.cs b/external/referencesource/System.Web/HttpHeaderCollection.cs index b5d194025a..806a1aaf8f 100644 --- a/external/referencesource/System.Web/HttpHeaderCollection.cs +++ b/external/referencesource/System.Web/HttpHeaderCollection.cs @@ -146,7 +146,7 @@ namespace System.Web { string svValue = replace ? value : base.Get(name); HttpServerVarsCollection serverVars = _request.ServerVariables as HttpServerVarsCollection; if (serverVars != null) { - serverVars.SynchronizeServerVariable("HTTP_" + name.ToUpper(CultureInfo.InvariantCulture).Replace('-', '_'), svValue); + serverVars.SynchronizeServerVariable("HTTP_" + name.ToUpper(CultureInfo.InvariantCulture).Replace('-', '_'), svValue, ensurePopulated: false); } // invalidate Params collection @@ -194,7 +194,7 @@ namespace System.Web { // update managed copy of server variable HttpServerVarsCollection serverVars = _request.ServerVariables as HttpServerVarsCollection; if (serverVars != null) { - serverVars.SynchronizeServerVariable("HTTP_" + name.ToUpper(CultureInfo.InvariantCulture).Replace('-', '_'), null); + serverVars.SynchronizeServerVariable("HTTP_" + name.ToUpper(CultureInfo.InvariantCulture).Replace('-', '_'), null, ensurePopulated: false); } // invalidate Params collection diff --git a/external/referencesource/System.Web/HttpRequest.cs.REMOVED.git-id b/external/referencesource/System.Web/HttpRequest.cs.REMOVED.git-id index dbe1061dd3..4c840df167 100644 --- a/external/referencesource/System.Web/HttpRequest.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/HttpRequest.cs.REMOVED.git-id @@ -1 +1 @@ -5b5f88b5ccea0f72ee2d5c09476a5b202afa70db \ No newline at end of file +9ad5bc288ab09d9e6a76dedf6e473bc26a2f3645 \ No newline at end of file diff --git a/external/referencesource/System.Web/HttpResponse.cs.REMOVED.git-id b/external/referencesource/System.Web/HttpResponse.cs.REMOVED.git-id index 490b9c0c31..7fbe9fa049 100644 --- a/external/referencesource/System.Web/HttpResponse.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/HttpResponse.cs.REMOVED.git-id @@ -1 +1 @@ -4292770411d315dce8698bcaa7064db3d106730c \ No newline at end of file +b92ce62520ba19dc4df09601e85545381237d6a8 \ No newline at end of file diff --git a/external/referencesource/System.Web/HttpRuntime.cs.REMOVED.git-id b/external/referencesource/System.Web/HttpRuntime.cs.REMOVED.git-id index 59418b3334..e2b30fb99b 100644 --- a/external/referencesource/System.Web/HttpRuntime.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/HttpRuntime.cs.REMOVED.git-id @@ -1 +1 @@ -52b6fd197e0ad170fec98322839d3ac5136b6565 \ No newline at end of file +23b97ec0eefb4c4f39cb11ab4e5f20f0f3ddb94a \ No newline at end of file diff --git a/external/referencesource/System.Web/HttpServerVarsCollection.cs b/external/referencesource/System.Web/HttpServerVarsCollection.cs index 68622b1950..aef84223a5 100644 --- a/external/referencesource/System.Web/HttpServerVarsCollection.cs +++ b/external/referencesource/System.Web/HttpServerVarsCollection.cs @@ -13,6 +13,7 @@ namespace System.Web { using System; using System.Collections; + using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Runtime.Serialization; using System.Security.Permissions; @@ -24,6 +25,7 @@ namespace System.Web { private bool _populated; private HttpRequest _request; private IIS7WorkerRequest _iis7workerRequest; + private List _unsyncedEntries; // We preallocate the base collection with a size that should be sufficient // to store all server variables w/o having to expand @@ -47,7 +49,6 @@ namespace System.Web { _request = null; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal void AddStatic(String name, String value) { if (value == null) value = String.Empty; @@ -61,7 +62,6 @@ namespace System.Web { BaseAdd(name, new HttpServerVarsCollectionEntry(name, var)); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] private String GetServerVar(Object e) { HttpServerVarsCollectionEntry entry = (HttpServerVarsCollectionEntry)e; return (entry != null) ? entry.GetValue(_request) : null; @@ -77,6 +77,22 @@ namespace System.Web { MakeReadWrite(); _request.FillInServerVariablesCollection(); + // Add all unsynchronized entries, if any + if (_unsyncedEntries != null) { + foreach (var entry in _unsyncedEntries) { + var existingEntry = (HttpServerVarsCollectionEntry)BaseGet(entry.Name); + if (existingEntry != null && existingEntry.IsDynamic) { + // Exisiting dynamic server variables cannot be modified - ignore the new value + continue; + } + + InvalidateCachedArrays(); + BaseSet(entry.Name, entry); // Update an existing entry, or create one if it's new + } + + _unsyncedEntries.Clear(); + } + if (_iis7workerRequest == null) { MakeReadOnly(); } @@ -239,13 +255,23 @@ namespace System.Web { } // updates managed copy of server variable with current value from native header block - internal void SynchronizeServerVariable(String name, String value) { + internal void SynchronizeServerVariable(String name, String value, bool ensurePopulated = true) { if (name == null) { throw new ArgumentNullException("name"); } if (value != null) { - SetServerVariableManagedOnly(name, value); + if (this._populated || ensurePopulated) { + SetServerVariableManagedOnly(name, value); + } + else { + // Lazy synchronization - when populate is indeed required + if (_unsyncedEntries == null) { + _unsyncedEntries = new List(); + } + + _unsyncedEntries.Add(new HttpServerVarsCollectionEntry(name, value)); + } } else { base.Remove(name); @@ -295,19 +321,16 @@ namespace System.Web { _request.InvalidateParams(); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public override String Get(int index) { Populate(); return GetServerVar(BaseGet(index)); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public override String[] GetValues(int index) { String s = Get(index); return(s != null) ? new String[1] { s} : null; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public override String GetKey(int index) { Populate(); return base.GetKey(index); diff --git a/external/referencesource/System.Web/HttpWriter.cs b/external/referencesource/System.Web/HttpWriter.cs index 13aebbf55a..9627b3231b 100644 --- a/external/referencesource/System.Web/HttpWriter.cs +++ b/external/referencesource/System.Web/HttpWriter.cs @@ -39,6 +39,8 @@ namespace System.Web { internal const int MAX_FREE_CHAR_BUFFERS = 64; // keep this number of unused buffers internal const int MAX_BYTES_TO_COPY = 128; // copy results of char conversion vs using recycleable buffers internal const int MAX_RESOURCE_BYTES_TO_COPY = 4*1024; // resource strings below this size are copied to buffers + internal const int INT_BUFFER_SIZE = 128; // default size for int[] buffers + internal const int INTPTR_BUFFER_SIZE = 128; // default size for IntPtr[] buffers } /* @@ -86,11 +88,6 @@ namespace System.Web { internal sealed class HttpResponseBufferElement : HttpBaseMemoryResponseBufferElement, IHttpResponseElement { private byte[] _data; - private static UbyteBufferAllocator s_Allocator = - new UbyteBufferAllocator(BufferingParams.OUTPUT_BUFFER_SIZE, - BufferingParams.MAX_FREE_OUTPUT_BUFFERS); - - /* * Constructor that accepts the data buffer and holds on to it */ @@ -798,9 +795,8 @@ namespace System.Web { private int _charBufferFree; private ArrayList _substElements = null; - private static CharBufferAllocator s_Allocator = - new CharBufferAllocator(BufferingParams.CHAR_BUFFER_SIZE, - BufferingParams.MAX_FREE_CHAR_BUFFERS); + static IAllocatorProvider s_DefaultAllocator = null; + IAllocatorProvider _allocator = null; // Use only via HttpWriter.AllocationProvider to ensure proper fallback // cached data from the response // can be invalidated via UpdateResponseXXX methods @@ -824,9 +820,10 @@ namespace System.Web { _buffers = new ArrayList(); _lastBuffer = null; - _charBuffer = (char[])s_Allocator.GetBuffer(); - _charBufferLength = _charBuffer.Length; - _charBufferFree = _charBufferLength; + // Setup the buffer on demand using CharBuffer property + _charBuffer = null; + _charBufferLength = 0; + _charBufferFree = 0; UpdateResponseBuffering(); @@ -933,7 +930,7 @@ namespace System.Web { // recycle char buffers if (_charBuffer != null) { - s_Allocator.ReuseBuffer(_charBuffer); + AllocatorProvider.CharBufferAllocator.ReuseBuffer(_charBuffer); _charBuffer = null; } @@ -942,13 +939,39 @@ namespace System.Web { } internal static void ReleaseAllPooledBuffers() { - s_Allocator.ReleaseAllBuffers(); + if (s_DefaultAllocator != null) { + s_DefaultAllocator.TrimMemory(); + } } internal void ClearSubstitutionBlocks() { _substElements = null; } + internal IAllocatorProvider AllocatorProvider { + private get { + if (_allocator == null) { + if (s_DefaultAllocator == null) { + // Create default static allocator + IBufferAllocator charAllocator = new CharBufferAllocator(BufferingParams.CHAR_BUFFER_SIZE, BufferingParams.MAX_FREE_CHAR_BUFFERS); + + AllocatorProvider alloc = new AllocatorProvider(); + alloc.CharBufferAllocator = new BufferAllocatorWrapper(charAllocator); + + Interlocked.CompareExchange(ref s_DefaultAllocator, alloc, null); + } + + _allocator = s_DefaultAllocator; + } + + return _allocator; + } + + set { + _allocator = value; + } + } + private void RecycleBufferElements() { if (_buffers != null) { @@ -968,6 +991,19 @@ namespace System.Web { _charBufferFree = _charBufferLength; } + private char[] CharBuffer { + get { + if (_charBuffer == null) { + _charBuffer = AllocatorProvider.CharBufferAllocator.GetBuffer(); + + _charBufferLength = _charBuffer.Length; + _charBufferFree = _charBufferLength; + } + + return _charBuffer; + } + } + private void FlushCharBuffer(bool flushEncoder) { int numChars = _charBufferLength - _charBufferFree; @@ -986,7 +1022,7 @@ namespace System.Web { if (estByteSize <= BufferingParams.MAX_BYTES_TO_COPY || !_responseBufferingOn) { // small size -- allocate intermediate buffer and copy into the output buffer byte[] byteBuffer = new byte[estByteSize]; - int realByteSize = _responseEncoder.GetBytes(_charBuffer, 0, numChars, + int realByteSize = _responseEncoder.GetBytes(CharBuffer, 0, numChars, byteBuffer, 0, flushEncoder); BufferData(byteBuffer, 0, realByteSize, false); } @@ -1004,7 +1040,7 @@ namespace System.Web { // byte buffers must be long enough to keep everything in char buffer Debug.Assert(free >= estByteSize); - _lastBuffer.AppendEncodedChars(_charBuffer, 0, numChars, _responseEncoder, flushEncoder); + _lastBuffer.AppendEncodedChars(CharBuffer, 0, numChars, _responseEncoder, flushEncoder); } _charBufferFree = _charBufferLength; @@ -1561,11 +1597,13 @@ namespace System.Web { return; } + char[] buffer = CharBuffer; + if (_charBufferFree == 0) { FlushCharBuffer(false); } - _charBuffer[_charBufferLength - _charBufferFree] = ch; + buffer[_charBufferLength - _charBufferFree] = ch; _charBufferFree--; if (!_responseBufferingOn) { @@ -1595,13 +1633,15 @@ namespace System.Web { if (count == 0) return; + char[] charBuffer = CharBuffer; + while (count > 0) { if (_charBufferFree == 0) { FlushCharBuffer(false); } int n = (count < _charBufferFree) ? count : _charBufferFree; - System.Array.Copy(buffer, index, _charBuffer, _charBufferLength - _charBufferFree, n); + System.Array.Copy(buffer, index, charBuffer, _charBufferLength - _charBufferFree, n); _charBufferFree -= n; index += n; count -= n; @@ -1623,13 +1663,15 @@ namespace System.Web { if (s == null) return; + char[] buffer = CharBuffer; + if (s.Length == 0) { // Ensure flush if string is empty } else if (s.Length < _charBufferFree) { // fast path - 99% of string writes will not overrun the buffer // avoid redundant arg checking in string.CopyTo - StringUtil.UnsafeStringCopy(s, 0, _charBuffer, _charBufferLength - _charBufferFree, s.Length); + StringUtil.UnsafeStringCopy(s, 0, buffer, _charBufferLength - _charBufferFree, s.Length); _charBufferFree -= s.Length; } else { @@ -1645,7 +1687,7 @@ namespace System.Web { n = (count < _charBufferFree) ? count : _charBufferFree; // avoid redundant arg checking in string.CopyTo - StringUtil.UnsafeStringCopy(s, index, _charBuffer, _charBufferLength - _charBufferFree, n); + StringUtil.UnsafeStringCopy(s, index, buffer, _charBufferLength - _charBufferFree, n); _charBufferFree -= n; index += n; @@ -1682,13 +1724,15 @@ namespace System.Web { return; } + char[] buffer = CharBuffer; + if (count == 0) { // Ensure flush if string is empty } else if (count < _charBufferFree) { // fast path - 99% of string writes will not overrun the buffer // avoid redundant arg checking in string.CopyTo - StringUtil.UnsafeStringCopy(s, index, _charBuffer, _charBufferLength - _charBufferFree, count); + StringUtil.UnsafeStringCopy(s, index, buffer, _charBufferLength - _charBufferFree, count); _charBufferFree -= count; } else { @@ -1702,7 +1746,7 @@ namespace System.Web { n = (count < _charBufferFree) ? count : _charBufferFree; // avoid redundant arg checking in string.CopyTo - StringUtil.UnsafeStringCopy(s, index, _charBuffer, _charBufferLength - _charBufferFree, n); + StringUtil.UnsafeStringCopy(s, index, buffer, _charBufferLength - _charBufferFree, n); _charBufferFree -= n; index += n; @@ -1756,12 +1800,14 @@ namespace System.Web { // It turns out this is way more efficient than the TextWriter version of // WriteLine which ends up calling Write with a 2 char array + char[] buffer = CharBuffer; + if (_charBufferFree < 2) FlushCharBuffer(false); int pos = _charBufferLength - _charBufferFree; - _charBuffer[pos] = '\r'; - _charBuffer[pos + 1] = '\n'; + buffer[pos] = '\r'; + buffer[pos + 1] = '\n'; _charBufferFree -= 2; if (!_responseBufferingOn) diff --git a/external/referencesource/System.Web/ITlsTokenBindingInfo.cs b/external/referencesource/System.Web/ITlsTokenBindingInfo.cs new file mode 100644 index 0000000000..c363db89f8 --- /dev/null +++ b/external/referencesource/System.Web/ITlsTokenBindingInfo.cs @@ -0,0 +1,36 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +//------------------------------------------------------------------------------ + +namespace System.Web { + using System; + + // Represents token binding information for a request. + // TLS token bindings help mitigate the risk of impersonation by an + // attacker in the event an authenticated client's bearer tokens are + // somehow exfiltrated from the client's machine. + // More info: https://datatracker.ietf.org/doc/draft-popov-token-binding/ + public interface ITlsTokenBindingInfo { + // Gets the 'provided' token binding identifier associated with + // the request. This method could return null if the client did + // not supply a 'provided' token binding or if the client did + // not supply a valid proof of possession for the associated + // private key. + // + // The caller should treat this token binding id as an opaque blob + // and should not try to parse it. + byte[] GetProvidedTokenBindingId(); + + // Gets the 'referred' token binding identifier associated with + // the request. This method could return null if the client did + // not supply a 'referred' token binding or if the client did + // not supply a valid proof of possession for the associated + // private key. + // + // The caller should treat this token binding id as an opaque blob + // and should not try to parse it. + byte[] GetReferredTokenBindingId(); + } +} diff --git a/external/referencesource/System.Web/IntraPartitionAPIs/xsp/PerfCounterEnum.cs b/external/referencesource/System.Web/IntraPartitionAPIs/xsp/PerfCounterEnum.cs new file mode 100644 index 0000000000..5df7d83c27 --- /dev/null +++ b/external/referencesource/System.Web/IntraPartitionAPIs/xsp/PerfCounterEnum.cs @@ -0,0 +1,131 @@ +//------------------------------------------------------------------------------ +// +// Copyright (c) Microsoft Corporation. All Rights Reserved. +// Information Contained Herein is Proprietary and Confidential. +// +//------------------------------------------------------------------------------ + +/* + * PerfCounters class + */ +namespace System.Web { + + // Global enums + internal enum GlobalPerfCounter { + + APPLICATION_RESTARTS = 0, + APPLICATIONS_RUNNING = 1, + REQUESTS_DISCONNECTED = 2, + REQUEST_EXECUTION_TIME = 3, + REQUESTS_REJECTED = 4, + REQUESTS_QUEUED = 5, + WPS_RUNNING = 6, + WPS_RESTARTS = 7, + REQUEST_WAIT_TIME = 8, + STATE_SERVER_SESSIONS_ACTIVE = 9, + STATE_SERVER_SESSIONS_ABANDONED = 10, + STATE_SERVER_SESSIONS_TIMED_OUT = 11, + STATE_SERVER_SESSIONS_TOTAL = 12, + REQUESTS_CURRENT = 13, + GLOBAL_AUDIT_SUCCESS = 14, + GLOBAL_AUDIT_FAIL = 15, + GLOBAL_EVENTS_ERROR = 16, + GLOBAL_EVENTS_HTTP_REQ_ERROR = 17, + GLOBAL_EVENTS_HTTP_INFRA_ERROR = 18, + REQUESTS_IN_NATIVE_QUEUE = 19, + + } + + internal enum AppPerfCounter { + + ANONYMOUS_REQUESTS = 20, + TOTAL_CACHE_ENTRIES = 21, + TOTAL_CACHE_TURNOVER_RATE = 22, + TOTAL_CACHE_HITS = 23, + TOTAL_CACHE_MISSES = 24, + TOTAL_CACHE_RATIO_BASE = 25, + API_CACHE_ENTRIES = 26, + API_CACHE_TURNOVER_RATE = 27, + API_CACHE_HITS = 28, + API_CACHE_MISSES = 29, + API_CACHE_RATIO_BASE = 30, + OUTPUT_CACHE_ENTRIES = 31, + OUTPUT_CACHE_TURNOVER_RATE = 32, + OUTPUT_CACHE_HITS = 33, + OUTPUT_CACHE_MISSES = 34, + OUTPUT_CACHE_RATIO_BASE = 35, + COMPILATIONS = 36, + DEBUGGING_REQUESTS = 37, + ERRORS_PRE_PROCESSING = 38, + ERRORS_COMPILING = 39, + ERRORS_DURING_REQUEST = 40, + ERRORS_UNHANDLED = 41, + ERRORS_TOTAL = 42, + PIPELINES = 43, + REQUEST_BYTES_IN = 44, + REQUEST_BYTES_OUT = 45, + REQUESTS_EXECUTING = 46, + REQUESTS_FAILED = 47, + REQUESTS_NOT_FOUND = 48, + REQUESTS_NOT_AUTHORIZED = 49, + REQUESTS_IN_APPLICATION_QUEUE = 50, + REQUESTS_TIMED_OUT = 51, + REQUESTS_SUCCEDED = 52, + REQUESTS_TOTAL = 53, + SESSIONS_ACTIVE = 54, + SESSIONS_ABANDONED = 55, + SESSIONS_TIMED_OUT = 56, + SESSIONS_TOTAL = 57, + TRANSACTIONS_ABORTED = 58, + TRANSACTIONS_COMMITTED = 59, + TRANSACTIONS_PENDING = 60, + TRANSACTIONS_TOTAL = 61, + SESSION_STATE_SERVER_CONNECTIONS = 62, + SESSION_SQL_SERVER_CONNECTIONS = 63, + EVENTS_TOTAL = 64, + EVENTS_APP = 65, + EVENTS_ERROR = 66, + EVENTS_HTTP_REQ_ERROR = 67, + EVENTS_HTTP_INFRA_ERROR = 68, + EVENTS_WEB_REQ = 69, + AUDIT_SUCCESS = 70, + AUDIT_FAIL = 71, + MEMBER_SUCCESS = 72, + MEMBER_FAIL = 73, + FORMS_AUTH_SUCCESS = 74, + FORMS_AUTH_FAIL = 75, + VIEWSTATE_MAC_FAIL = 76, + APP_REQUEST_EXEC_TIME = 77, + APP_REQUEST_DISCONNECTED = 78, + APP_REQUESTS_REJECTED = 79, + APP_REQUEST_WAIT_TIME = 80, + CACHE_PERCENT_MACH_MEM_LIMIT_USED = 81, + CACHE_PERCENT_MACH_MEM_LIMIT_USED_BASE = 82, + CACHE_PERCENT_PROC_MEM_LIMIT_USED = 83, + CACHE_PERCENT_PROC_MEM_LIMIT_USED_BASE = 84, + CACHE_TOTAL_TRIMS = 85, + CACHE_API_TRIMS = 86, + CACHE_OUTPUT_TRIMS = 87, + APP_CPU_USED = 88, + APP_CPU_USED_BASE = 89, + APP_MEMORY_USED = 90, + REQUEST_BYTES_IN_WEBSOCKETS = 91, + REQUEST_BYTES_OUT_WEBSOCKETS = 92, + REQUESTS_EXECUTING_WEBSOCKETS = 93, + REQUESTS_FAILED_WEBSOCKETS = 94, + REQUESTS_SUCCEEDED_WEBSOCKETS = 95, + REQUESTS_TOTAL_WEBSOCKETS = 96, + + } + + // StateService enums + internal enum StateServicePerfCounter { + + STATE_SERVICE_SESSIONS_ACTIVE = 97, + STATE_SERVICE_SESSIONS_ABANDONED = 98, + STATE_SERVICE_SESSIONS_TIMED_OUT = 99, + STATE_SERVICE_SESSIONS_TOTAL = 100, + + } +} + diff --git a/external/referencesource/System.Web/LegacyAspNetSynchronizationContext.cs b/external/referencesource/System.Web/LegacyAspNetSynchronizationContext.cs index 3cc6471e6c..2bbdf1b4f3 100644 --- a/external/referencesource/System.Web/LegacyAspNetSynchronizationContext.cs +++ b/external/referencesource/System.Web/LegacyAspNetSynchronizationContext.cs @@ -19,7 +19,7 @@ namespace System.Web { internal sealed class LegacyAspNetSynchronizationContext : AspNetSynchronizationContextBase { private HttpApplication _application; - private Action _appVerifierCallback; + private Action _appVerifierCallback; private bool _disabled; private bool _syncCaller; private bool _invalidOperationEncountered; @@ -34,14 +34,14 @@ namespace System.Web { _lastCompletionCallbackLock = new object(); } - private void CheckForRequestCompletionIfRequired() { + private void CheckForRequestStateIfRequired() { if (_appVerifierCallback != null) { - _appVerifierCallback(); + _appVerifierCallback(false); } } private void CallCallback(SendOrPostCallback callback, Object state) { - CheckForRequestCompletionIfRequired(); + CheckForRequestStateIfRequired(); // don't take app lock for [....] caller to avoid deadlocks in case they poll for result if (_syncCaller) { diff --git a/external/referencesource/System.Web/OutputCacheModule.cs b/external/referencesource/System.Web/OutputCacheModule.cs index 426b94d53e..de6b2d7c02 100644 --- a/external/referencesource/System.Web/OutputCacheModule.cs +++ b/external/referencesource/System.Web/OutputCacheModule.cs @@ -352,7 +352,7 @@ namespace System.Web.Caching { return 0; } for (int i = startIndex; i < contentEncodings.Length; i++) { - if (contentEncodings[i] == acceptEncodingWithoutWeight) { + if (StringUtil.EqualsIgnoreCase(contentEncodings[i], acceptEncodingWithoutWeight)) { return i; // found } } @@ -393,7 +393,7 @@ namespace System.Web.Caching { int acceptEncodingLength = acceptEncoding.Length; int maxSearchIndex = acceptEncodingLength - codingLength; while (startSearchIndex < maxSearchIndex) { - int indexStart = acceptEncoding.IndexOf(coding, startSearchIndex, StringComparison.Ordinal); + int indexStart = acceptEncoding.IndexOf(coding, startSearchIndex, StringComparison.OrdinalIgnoreCase); if (indexStart == -1) { break; // not found diff --git a/external/referencesource/System.Web/PerfCounters.cs b/external/referencesource/System.Web/PerfCounters.cs index 8ec096c786..de258ce7d5 100644 --- a/external/referencesource/System.Web/PerfCounters.cs +++ b/external/referencesource/System.Web/PerfCounters.cs @@ -86,7 +86,6 @@ namespace System.Web { // Make sure webengine.dll is loaded before attempting to call into it (ASURT 98531) - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal static void IncrementCounter(AppPerfCounter counter) { if (_instance != null) UnsafeNativeMethods.PerfIncrementCounter(_instance.UnsafeHandle, (int) counter); @@ -97,13 +96,11 @@ namespace System.Web { UnsafeNativeMethods.PerfDecrementCounter(_instance.UnsafeHandle, (int) counter); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal static void IncrementCounterEx(AppPerfCounter counter, int delta) { if (_instance != null) UnsafeNativeMethods.PerfIncrementCounterEx(_instance.UnsafeHandle, (int) counter, delta); } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal static void SetCounter(AppPerfCounter counter, int value) { if (_instance != null) UnsafeNativeMethods.PerfSetCounter(_instance.UnsafeHandle, (int) counter, value); @@ -127,7 +124,6 @@ namespace System.Web { return -1; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] internal static void IncrementGlobalCounter(GlobalPerfCounter counter) { if (_global != IntPtr.Zero) UnsafeNativeMethods.PerfIncrementCounter(_global, (int) counter); diff --git a/external/referencesource/System.Web/Properties/AssemblyInfo.cs b/external/referencesource/System.Web/Properties/AssemblyInfo.cs index b41f9f2532..03328e0a58 100644 --- a/external/referencesource/System.Web/Properties/AssemblyInfo.cs +++ b/external/referencesource/System.Web/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ using System.Web.Security; [assembly:System.Runtime.InteropServices.TypeLibVersion(2, 4)] // Opts into the VS loading icons from the FrameworkIcon Satellite assemblies found under VSIP\Icons -[assembly:System.Drawing.BitmapSuffixInSatelliteAssemblyAttribute()] +[assembly:System.Drawing.BitmapSuffixInSatelliteAssemblyAttribute()] \ No newline at end of file diff --git a/external/referencesource/System.Web/Security/ADMembershipProvider.cs.REMOVED.git-id b/external/referencesource/System.Web/Security/ADMembershipProvider.cs.REMOVED.git-id index c9f55811a9..18ec4a381f 100644 --- a/external/referencesource/System.Web/Security/ADMembershipProvider.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/Security/ADMembershipProvider.cs.REMOVED.git-id @@ -1 +1 @@ -86b5c0a6f2c00fb083dda0132b35aa86179280a6 \ No newline at end of file +6fc96d5a48329aa8e7ef17bceda3f17990c6df42 \ No newline at end of file diff --git a/external/referencesource/System.Web/Security/AntiXss/GlobalSuppressions.cs b/external/referencesource/System.Web/Security/AntiXss/GlobalSuppressions.cs index 8c90454923..9d76e56b8f 100644 --- a/external/referencesource/System.Web/Security/AntiXss/GlobalSuppressions.cs +++ b/external/referencesource/System.Web/Security/AntiXss/GlobalSuppressions.cs @@ -55,4 +55,4 @@ using System.Diagnostics.CodeAnalysis; [module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Ol", Scope = "member", Target = "System.Web.Security.AntiXss.LowerMidCodeCharts.#OlChiki", Justification = "AntiXSS baseline.")] [module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Li", Scope = "member", Target = "System.Web.Security.AntiXss.UpperCodeCharts.#KayahLi", Justification = "AntiXSS baseline.")] [module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Yi", Scope = "member", Target = "System.Web.Security.AntiXss.UpperMidCodeCharts.#YiSyllables", Justification = "AntiXSS baseline.")] -[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Yi", Scope = "member", Target = "System.Web.Security.AntiXss.UpperMidCodeCharts.#YiRadicals", Justification = "AntiXSS baseline.")] +[module: SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Yi", Scope = "member", Target = "System.Web.Security.AntiXss.UpperMidCodeCharts.#YiRadicals", Justification = "AntiXSS baseline.")] \ No newline at end of file diff --git a/external/referencesource/System.Web/Security/IVType.cs b/external/referencesource/System.Web/Security/IVType.cs index 4752ea1cf0..e3c5cc23b0 100644 --- a/external/referencesource/System.Web/Security/IVType.cs +++ b/external/referencesource/System.Web/Security/IVType.cs @@ -26,4 +26,4 @@ namespace System.Web.Configuration // multiple times. Hash = 2, } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web/Security/MembershipPasswordAttribute.cs b/external/referencesource/System.Web/Security/MembershipPasswordAttribute.cs index a9814daaea..b50ac700a5 100644 --- a/external/referencesource/System.Web/Security/MembershipPasswordAttribute.cs +++ b/external/referencesource/System.Web/Security/MembershipPasswordAttribute.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text.RegularExpressions; + using System.Web.Util; /// /// Validates whether a password field meets the current Membership Provider's password requirements. @@ -143,6 +144,9 @@ } } } + + // The timeout for the regex we use to check password strength + public int? PasswordStrengthRegexTimeout { get; set; } #endregion #region Overriden Methods @@ -189,7 +193,8 @@ Regex passwordStrengthRegex; try { - passwordStrengthRegex = new Regex(passwordStrengthRegularExpression); + // Adding timeout for Regex in case of malicious string causing DoS + passwordStrengthRegex = RegexUtil.CreateRegex(passwordStrengthRegularExpression, RegexOptions.None, PasswordStrengthRegexTimeout); } catch (ArgumentException ex) { throw new InvalidOperationException(SR.GetString(SR.MembershipPasswordAttribute_InvalidRegularExpression), ex); diff --git a/external/referencesource/System.Web/Security/RolePrincipal.cs b/external/referencesource/System.Web/Security/RolePrincipal.cs index 3f15fb6896..a54f497b9d 100644 --- a/external/referencesource/System.Web/Security/RolePrincipal.cs +++ b/external/referencesource/System.Web/Security/RolePrincipal.cs @@ -98,7 +98,7 @@ namespace System.Web.Security { private void InitFromEncryptedTicket( string encryptedTicket ) { - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_ROLE_BEGIN, HttpContext.Current.WorkerRequest); if (string.IsNullOrEmpty(encryptedTicket)) @@ -140,14 +140,14 @@ namespace System.Web.Security { RenewIfOld(); - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) EtwTrace.Trace( EtwTraceType.ETW_TYPE_ROLE_END, HttpContext.Current.WorkerRequest, "RolePrincipal", _Identity.Name); return; Exit: Init(); _CachedListChanged = true; - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_ROLE_END, HttpContext.Current.WorkerRequest, "RolePrincipal", _Identity.Name); return; } diff --git a/external/referencesource/System.Web/Security/Roles.cs b/external/referencesource/System.Web/Security/Roles.cs index 32ccd2df1e..a875365eda 100644 --- a/external/referencesource/System.Web/Security/Roles.cs +++ b/external/referencesource/System.Web/Security/Roles.cs @@ -93,7 +93,7 @@ namespace System.Web.Security { // authorization static public bool IsUserInRole(string username, string roleName) { - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_ROLE_BEGIN, HttpContext.Current.WorkerRequest); EnsureEnabled(); @@ -111,7 +111,7 @@ namespace System.Web.Security { isUserInRole = Provider.IsUserInRole(username, roleName); return isUserInRole; } finally { - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) { + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.AppSvc)) { string status = SR.Resources.GetString(isUserInRole ? SR.Etw_Success : SR.Etw_Failure, CultureInfo.InstalledUICulture); EtwTrace.Trace(EtwTraceType.ETW_TYPE_ROLE_IS_USER_IN_ROLE, HttpContext.Current.WorkerRequest, isRolePrincipal ? "RolePrincipal" : Provider.GetType().FullName, username, roleName, status); @@ -129,7 +129,7 @@ namespace System.Web.Security { static public string[] GetRolesForUser (string username){ - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) EtwTrace.Trace(EtwTraceType.ETW_TYPE_ROLE_BEGIN, HttpContext.Current.WorkerRequest); EnsureEnabled(); @@ -150,7 +150,7 @@ namespace System.Web.Security { } return roles; } finally { - if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc)) { + if (HostingEnvironment.IsHosted && EtwTrace.IsTraceEnabled(EtwTraceLevel.Information, EtwTraceFlags.AppSvc) && HttpContext.Current != null) { if (EtwTrace.IsTraceEnabled(EtwTraceLevel.Verbose, EtwTraceFlags.AppSvc)) { string roleNames = null; if (roles != null && roles.Length > 0) diff --git a/external/referencesource/System.Web/Security/SQLMembershipProvider.cs b/external/referencesource/System.Web/Security/SQLMembershipProvider.cs index 3204cb7551..af1cf0fced 100644 --- a/external/referencesource/System.Web/Security/SQLMembershipProvider.cs +++ b/external/referencesource/System.Web/Security/SQLMembershipProvider.cs @@ -77,7 +77,7 @@ namespace System.Web.Security { _AppName = value; } } - + private string _sqlConnectionString; private bool _EnablePasswordRetrieval; private bool _EnablePasswordReset; @@ -94,6 +94,7 @@ namespace System.Web.Security { private MembershipPasswordFormat _PasswordFormat; private MembershipPasswordCompatibilityMode _LegacyPasswordCompatibilityMode = MembershipPasswordCompatibilityMode.Framework20; private string s_HashAlgorithm = null; + private int? _passwordStrengthRegexTimeout; private const int PASSWORD_SIZE = 14; @@ -124,6 +125,7 @@ namespace System.Web.Security { _PasswordAttemptWindow = SecUtility.GetIntValue( config, "passwordAttemptWindow", 10, false, 0 ); _MinRequiredPasswordLength = SecUtility.GetIntValue( config, "minRequiredPasswordLength", 7, false, 128 ); _MinRequiredNonalphanumericCharacters = SecUtility.GetIntValue( config, "minRequiredNonalphanumericCharacters", 1, true, 128 ); + _passwordStrengthRegexTimeout = SecUtility.GetNullableIntValue(config, "passwordStrengthRegexTimeout"); _PasswordStrengthRegularExpression = config["passwordStrengthRegularExpression"]; if( _PasswordStrengthRegularExpression != null ) @@ -203,6 +205,7 @@ namespace System.Web.Security { config.Remove("minRequiredNonalphanumericCharacters"); config.Remove("passwordStrengthRegularExpression"); config.Remove("passwordCompatMode"); + config.Remove("passwordStrengthRegexTimeout"); if (config.Count > 0) { string attribUnrecognized = config.GetKey(0); if (!String.IsNullOrEmpty(attribUnrecognized)) @@ -331,7 +334,7 @@ namespace System.Web.Security { if( PasswordStrengthRegularExpression.Length > 0 ) { - if( !Regex.IsMatch( password, PasswordStrengthRegularExpression ) ) + if( !RegexUtil.IsMatch( password, PasswordStrengthRegularExpression, RegexOptions.None, _passwordStrengthRegexTimeout ) ) { status = MembershipCreateStatus.InvalidPassword; return null; @@ -422,7 +425,7 @@ namespace System.Web.Security { throw; } } - + ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// @@ -580,7 +583,7 @@ namespace System.Web.Security { if( PasswordStrengthRegularExpression.Length > 0 ) { - if( !Regex.IsMatch( newPassword, PasswordStrengthRegularExpression ) ) + if( !RegexUtil.IsMatch( newPassword, PasswordStrengthRegularExpression, RegexOptions.None, _passwordStrengthRegexTimeout ) ) { throw new ArgumentException(SR.GetString(SR.Password_does_not_match_regular_expression, "newPassword")); diff --git a/external/referencesource/System.Web/State/sqlstateclientmanager.cs b/external/referencesource/System.Web/State/sqlstateclientmanager.cs index ff98e5f683..0f991d742f 100644 --- a/external/referencesource/System.Web/State/sqlstateclientmanager.cs +++ b/external/referencesource/System.Web/State/sqlstateclientmanager.cs @@ -392,7 +392,8 @@ namespace System.Web.SessionState { if (s_usePartition) { throw new HttpException( SR.GetString(SR.Cant_connect_sql_session_database_partition_resolver, - s_configPartitionResolverType, conn.DataSource, conn.Database)); + s_configPartitionResolverType, conn.DataSource, conn.Database), + e); } else { throw new HttpException( diff --git a/external/referencesource/System.Web/System.Web.txt.REMOVED.git-id b/external/referencesource/System.Web/System.Web.txt.REMOVED.git-id index 7d136be550..70370c956a 100644 --- a/external/referencesource/System.Web/System.Web.txt.REMOVED.git-id +++ b/external/referencesource/System.Web/System.Web.txt.REMOVED.git-id @@ -1 +1 @@ -81be1e2a632fc13b356b8ff87751f824b2fab989 \ No newline at end of file +a98718381d95c9093f35a4a393544943139770b4 \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/ConflictOptions.cs b/external/referencesource/System.Web/UI/ConflictOptions.cs index 6fce0c1620..916a363e5a 100644 --- a/external/referencesource/System.Web/UI/ConflictOptions.cs +++ b/external/referencesource/System.Web/UI/ConflictOptions.cs @@ -23,4 +23,4 @@ namespace System.Web.UI { /// CompareAllValues = 1 } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/Control.cs.REMOVED.git-id b/external/referencesource/System.Web/UI/Control.cs.REMOVED.git-id index 4b81a71a98..b3425820b3 100644 --- a/external/referencesource/System.Web/UI/Control.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/UI/Control.cs.REMOVED.git-id @@ -1 +1 @@ -1a9686a27e5ed415605485f8f16e5724c00e1b37 \ No newline at end of file +7a21a881ad31bc5c73e652ddcd35b79bf8875b50 \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/ControlCollection.cs b/external/referencesource/System.Web/UI/ControlCollection.cs index 29e193397d..61aacfdc5b 100644 --- a/external/referencesource/System.Web/UI/ControlCollection.cs +++ b/external/referencesource/System.Web/UI/ControlCollection.cs @@ -192,7 +192,6 @@ namespace System.Web.UI { /// /// public virtual int Count { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { return _size; } @@ -363,14 +362,12 @@ namespace System.Web.UI { } object IEnumerator.Current { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { return Current; } } public Control Current { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { if (index == -1) throw new InvalidOperationException(SR.GetString(SR.ListEnumCurrentOutOfRange)); diff --git a/external/referencesource/System.Web/UI/EmptyTextWriter.cs b/external/referencesource/System.Web/UI/EmptyTextWriter.cs index bab0f2435b..eddd0967fe 100644 --- a/external/referencesource/System.Web/UI/EmptyTextWriter.cs +++ b/external/referencesource/System.Web/UI/EmptyTextWriter.cs @@ -138,4 +138,4 @@ namespace System.Web.UI } } } -#endif +#endif \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/HTMLTextWriter.cs b/external/referencesource/System.Web/UI/HTMLTextWriter.cs index e8eafdfb8c..af76ac63b0 100644 --- a/external/referencesource/System.Web/UI/HTMLTextWriter.cs +++ b/external/referencesource/System.Web/UI/HTMLTextWriter.cs @@ -139,7 +139,9 @@ namespace System.Web.UI { RegisterTag("big", HtmlTextWriterTag.Big, TagType.Inline); RegisterTag("blockquote", HtmlTextWriterTag.Blockquote, TagType.Other); RegisterTag("body", HtmlTextWriterTag.Body, TagType.Other); - RegisterTag("br", HtmlTextWriterTag.Br, TagType.Other); + // Devdiv 852940, BR is a self-closing tag + RegisterTag("br", HtmlTextWriterTag.Br, + BinaryCompatibility.Current.TargetsAtLeastFramework46 ? TagType.NonClosing : TagType.Other); RegisterTag("button", HtmlTextWriterTag.Button, TagType.Inline); RegisterTag("caption", HtmlTextWriterTag.Caption, TagType.Other); RegisterTag("center", HtmlTextWriterTag.Center, TagType.Other); @@ -373,7 +375,6 @@ namespace System.Web.UI { } //Writes a string to the text stream. - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public override void Write(string s) { if (tabsPending) { OutputTabs(); @@ -390,7 +391,6 @@ namespace System.Web.UI { } //Writes a character to the text stream. - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public override void Write(char value) { if (tabsPending) { OutputTabs(); @@ -1128,22 +1128,18 @@ namespace System.Web.UI { } } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected virtual string RenderBeforeTag() { return null; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected virtual string RenderBeforeContent() { return null; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected virtual string RenderAfterContent() { return null; } - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected virtual string RenderAfterTag() { return null; } diff --git a/external/referencesource/System.Web/UI/HtmlControls/HtmlControl.cs b/external/referencesource/System.Web/UI/HtmlControls/HtmlControl.cs index 157049e640..7061b39e0d 100644 --- a/external/referencesource/System.Web/UI/HtmlControls/HtmlControl.cs +++ b/external/referencesource/System.Web/UI/HtmlControls/HtmlControl.cs @@ -73,7 +73,6 @@ namespace System.Web.UI.HtmlControls { DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public AttributeCollection Attributes { - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { if (_attributes == null) _attributes = new AttributeCollection(ViewState); diff --git a/external/referencesource/System.Web/UI/HtmlForm.cs b/external/referencesource/System.Web/UI/HtmlForm.cs index ce4088eaf6..9c06f604b8 100644 --- a/external/referencesource/System.Web/UI/HtmlForm.cs +++ b/external/referencesource/System.Web/UI/HtmlForm.cs @@ -286,7 +286,9 @@ namespace System.Web.UI.HtmlControls { action = clientFilePath.VirtualPathString; int iPos = action.LastIndexOf('/'); if (iPos >= 0) { - action = action.Substring(iPos + 1); + // Ensure the segment is always a relative path, so prepend a dot-segment + // (RFC section 4.2 Relative Reference) + action = "./" + action.Substring(iPos + 1); } } else { diff --git a/external/referencesource/System.Web/UI/IUpdatePanel.cs b/external/referencesource/System.Web/UI/IUpdatePanel.cs index 1bafbf1e45..37bffe52a7 100644 --- a/external/referencesource/System.Web/UI/IUpdatePanel.cs +++ b/external/referencesource/System.Web/UI/IUpdatePanel.cs @@ -7,4 +7,4 @@ namespace System.Web.UI { internal interface IUpdatePanel { } -} +} \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/LiteralControl.cs b/external/referencesource/System.Web/UI/LiteralControl.cs index 99e8f1616f..f7e9fe26c7 100644 --- a/external/referencesource/System.Web/UI/LiteralControl.cs +++ b/external/referencesource/System.Web/UI/LiteralControl.cs @@ -74,7 +74,6 @@ namespace System.Web.UI { /// /// Saves any state that was modified after mark. /// - [System.Runtime.TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] protected internal override void Render(HtmlTextWriter output) { output.Write(_text); } diff --git a/external/referencesource/System.Web/UI/Page.cs.REMOVED.git-id b/external/referencesource/System.Web/UI/Page.cs.REMOVED.git-id index bbb10525fe..8f2162c3f9 100644 --- a/external/referencesource/System.Web/UI/Page.cs.REMOVED.git-id +++ b/external/referencesource/System.Web/UI/Page.cs.REMOVED.git-id @@ -1 +1 @@ -9f9f36cfd550af92e7788a1987855cb9b701618b \ No newline at end of file +974680fd74222db0b425c15c2e38618f0c4c6439 \ No newline at end of file diff --git a/external/referencesource/System.Web/UI/PartialCachingControl.cs b/external/referencesource/System.Web/UI/PartialCachingControl.cs index c7eb347bfb..9efc13a587 100644 --- a/external/referencesource/System.Web/UI/PartialCachingControl.cs +++ b/external/referencesource/System.Web/UI/PartialCachingControl.cs @@ -844,10 +844,8 @@ internal class ControlCachedVary { public override int GetHashCode () { HashCodeCombiner hashCodeCombiner = new HashCodeCombiner(); - // Cast _varyByCustom to an object, since the HashCodeCombiner.AddObject(string) - // overload uses StringUtil.GetStringHashCode(). We want to use String.GetHashCode() - // in this method, since we do not require a stable hash code across architectures. - hashCodeCombiner.AddObject((object)_varyByCustom); + // We need non-randomized hash code for _varyByCustom + hashCodeCombiner.AddInt(StringUtil.GetNonRandomizedHashCode(_varyByCustom)); hashCodeCombiner.AddArray(_varyByParams); hashCodeCombiner.AddArray(_varyByControls); diff --git a/external/referencesource/System.Web/UI/TemplateControl.cs b/external/referencesource/System.Web/UI/TemplateControl.cs index b5ad9dad2f..26fee24362 100644 --- a/external/referencesource/System.Web/UI/TemplateControl.cs +++ b/external/referencesource/System.Web/UI/TemplateControl.cs @@ -194,7 +194,7 @@ public abstract class TemplateControl : Control, INamingContainer, IFilterResolu /// Occurs when an uncaught exception is thrown. /// [ - WebSysDescription(SR.Page_Error) + WebSysDescription(SR.Page_ErrorDescription) ] public event EventHandler Error { add { diff --git a/external/referencesource/System.Web/UI/TraceContext.cs b/external/referencesource/System.Web/UI/TraceContext.cs index b1c853675b..476a9ec005 100644 --- a/external/referencesource/System.Web/UI/TraceContext.cs +++ b/external/referencesource/System.Web/UI/TraceContext.cs @@ -759,7 +759,7 @@ namespace System.Web { private void InitRequest() { // Master request is assumed to be initialized first System.Web.Util.Debug.Assert(_masterRequest != null); - + DataSet requestData = _masterRequest.Clone(); // request info @@ -786,19 +786,19 @@ namespace System.Web { AddRow(requestData, SR.Trace_Request, row); // header info - int i; - String[] keys = _context.Request.Headers.AllKeys; - for (i=0; i"); - // + // UNDONE: formAdapter.RenderExtraCardElements(this); writer.BeginFormOrPanel(); } @@ -432,7 +432,7 @@ namespace System.Web.UI.Adapters { RenderTargetAndArgumentPostFields(writer, target, argument, postFieldType); RenderPostFieldVariableDictionary(writer, _dynamicPostFields); RenderPostFieldDictionary(writer, _staticPostFields); - // + // UNDONE: Add postbacks for variables which are not on the current page. writer.WriteEndTag("go"); } @@ -442,8 +442,8 @@ namespace System.Web.UI.Adapters { return; } writer.Write("?"); - // - + // UNDONE: MMIT IPageAdapter.PersistCookielessData NYI + // if(Page.Adapter.PersistCookielessData && Browser["canRenderOneventAndPrevElementsTogether"] != "false") if (!StringUtil.EqualsIgnoreCase((string)Browser["canRenderOneventAndPrevElementsTogether"], "false")) { queryString = writer.ReplaceFormsCookieWithVariable(queryString); } @@ -504,7 +504,7 @@ namespace System.Web.UI.Adapters { writer.Write(""); RenderFormPostInGoAction(writer, null, _postBackEventArgumentVarName, WmlPostFieldType.Variable, String.Empty); - // + // REVIEW: Should we always include page hidden variables. writer.WriteLine(""); writer.WriteLine(""); diff --git a/external/referencesource/System.Web/UI/WebControls/Adapters/WmlPhoneLinkAdapter.cs b/external/referencesource/System.Web/UI/WebControls/Adapters/WmlPhoneLinkAdapter.cs index c4dfaa39a2..efccabe639 100644 --- a/external/referencesource/System.Web/UI/WebControls/Adapters/WmlPhoneLinkAdapter.cs +++ b/external/referencesource/System.Web/UI/WebControls/Adapters/WmlPhoneLinkAdapter.cs @@ -11,7 +11,7 @@ namespace System.Web.UI.WebControls.Adapters { public class WmlPhoneLinkAdapter : PhoneLinkAdapter { - // + // UNDONE: Add style. protected internal override void Render(HtmlTextWriter markupWriter) { WmlTextWriter writer = (WmlTextWriter)markupWriter; String text, url, phoneNumber; @@ -42,7 +42,7 @@ namespace System.Web.UI.WebControls.Adapters { if (Page != null && Page.Request != null) { browser = Page.Request.Browser; } - // + // TODO: Replace hard coded string key. if (browser != null && (String)browser["canInitiateVoiceCall"] != "true") { text = String.Format(controlText, originalNumber); @@ -54,7 +54,7 @@ namespace System.Web.UI.WebControls.Adapters { // showing as text so it can be selected. If it is not // formatted in the text yet, append it to the end of the // text. - // + // TODO: Replace hard coded string key. if (browser != null && browser["requiresPhoneNumbersAsPlainText"] == "true") { text = controlText + " " + phoneNumber; url = String.Empty; diff --git a/external/referencesource/System.Web/UI/WebControls/Adapters/WmlRadioButtonAdapter.cs b/external/referencesource/System.Web/UI/WebControls/Adapters/WmlRadioButtonAdapter.cs index 397b021374..7923294a17 100644 --- a/external/referencesource/System.Web/UI/WebControls/Adapters/WmlRadioButtonAdapter.cs +++ b/external/referencesource/System.Web/UI/WebControls/Adapters/WmlRadioButtonAdapter.cs @@ -141,14 +141,14 @@ namespace System.Web.UI.WebControls.Adapters { // RenderAsGroup returns a RadioButtonGroup object if the group should be // rendered in a single  1 2 3 4 5  \n\t\t\t\t\t\t\t\r\n\t\r\n\r\n\r\n\n\t\t\t\t\n\t\t\t\r\n\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\r\n\r\n
    \n\t\t\t\t\t\t\t\t\t\t\tM1\n\t\t\t\t\t\t\t\t\t\t\tM2
    \n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t
    \r\n\n\t\t\t\t\t\r\n\t\r\n\t\r\n\r\n
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t    \n\t\t\t\t\t\t\t
    \r\n\n\t\t\t\t
    "; -#else - string originalHtml = "\r\n\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\r\n\r\n
    \n\t\t\t\t\t\t\t\t\t\t\tM1\n\t\t\t\t\t\t\t\t\t\t\tM2
    \n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t
    \r\n\n\t\t\t\t\t\r\n\t\r\n\t\r\n\r\n
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t 1 2 3 4 5  \n\t\t\t\t\t\t\t
    \r\n\n\t\t\t\t
    \n\t\t\t\r\n\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\r\n\r\n\r\n
    \n\t\t\t\t\t\t\t\t\t\t\tM1\n\t\t\t\t\t\t\t\t\t\t\tM2
    \n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t0\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t1\n\t\t\t\t\t\t
    \r\n\n\t\t\t\t\t\r\n\t\r\n\t\r\n\r\n
    \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t    \n\t\t\t\t\t\t\t
    \r\n\n\t\t\t\t
    "; -#endif WebTest t = new WebTest ("ListViewTotalRowCount_Bug604053.aspx"); string pageHtml = t.Run (); string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); diff --git a/mcs/class/System.Web.Extensions/Test/code/WebTestLocal.cs b/mcs/class/System.Web.Extensions/Test/code/WebTestLocal.cs index 31197a56ae..898d9d3ea8 100644 --- a/mcs/class/System.Web.Extensions/Test/code/WebTestLocal.cs +++ b/mcs/class/System.Web.Extensions/Test/code/WebTestLocal.cs @@ -10,12 +10,10 @@ namespace MonoTests.SystemWeb.Framework #if !DOTNET CopyResource (myself, "Web.mono.config", "Web.config"); #endif -#if NET_4_5 - CopyResource (myself, "profile.config.4.5", "profile.config"); -#elif NET_4_0 - CopyResource (myself, "profile.config.4.0", "profile.config"); +#if NET_4_6 + CopyResource (myself, "profile.config.4.x", "profile.config"); #else - CopyResource (myself, "profile.config.2.0", "profile.config"); + #error "Unknown profile" #endif } } diff --git a/mcs/class/System.Web.Extensions/Test/resources/profile.config.2.0 b/mcs/class/System.Web.Extensions/Test/resources/profile.config.2.0 deleted file mode 100644 index 97ef36905f..0000000000 --- a/mcs/class/System.Web.Extensions/Test/resources/profile.config.2.0 +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.5 b/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.5 deleted file mode 100644 index 526002fd5b..0000000000 --- a/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.5 +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.0 b/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.x similarity index 89% rename from mcs/class/System.Web.Extensions/Test/resources/profile.config.4.0 rename to mcs/class/System.Web.Extensions/Test/resources/profile.config.4.x index 0a652271a4..126cacca57 100644 --- a/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.0 +++ b/mcs/class/System.Web.Extensions/Test/resources/profile.config.4.x @@ -3,6 +3,6 @@ - + diff --git a/mcs/class/System.Web.Routing/Makefile b/mcs/class/System.Web.Routing/Makefile index e2b0a9f1a9..09df4e8819 100644 --- a/mcs/class/System.Web.Routing/Makefile +++ b/mcs/class/System.Web.Routing/Makefile @@ -6,21 +6,8 @@ LIBRARY = System.Web.Routing.dll LIB_REFS = System System.Core System.Web System.Web.Abstractions LIB_MCS_FLAGS = -ifdef DEBUG -LIB_MCS_FLAGS += -define:DEBUG -endif - TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) EXTRA_DISTFILES = -# This is a .NET 3.5+ assembly -VALID_PROFILE := $(filter net_4_5, $(PROFILE)) -ifndef VALID_PROFILE -LIBRARY_NAME = dummy-System.Web.Routing.dll -NO_INSTALL = yes -NO_SIGN_ASSEMBLY = yes -NO_TEST = yes -endif - include ../../build/library.make diff --git a/mcs/class/System.Web.Routing/System.Web.Routing.dll.sources b/mcs/class/System.Web.Routing/System.Web.Routing.dll.sources index be16d0b3b4..c030663c14 100644 --- a/mcs/class/System.Web.Routing/System.Web.Routing.dll.sources +++ b/mcs/class/System.Web.Routing/System.Web.Routing.dll.sources @@ -1,22 +1,3 @@ ../../build/common/Consts.cs ../../build/common/MonoTODOAttribute.cs Assembly/AssemblyInfo.cs -System.Web.Routing/HttpMethodConstraint.cs -System.Web.Routing/IRouteConstraint.cs -System.Web.Routing/IRouteHandler.cs -System.Web.Routing/PatternParser.cs -System.Web.Routing/PatternToken.cs -System.Web.Routing/PatternTokenType.cs -System.Web.Routing/RequestContext.cs -System.Web.Routing/Route.cs -System.Web.Routing/RouteBase.cs -System.Web.Routing/RouteCollection.cs -System.Web.Routing/RouteData.cs -System.Web.Routing/RouteDirection.cs -System.Web.Routing/RouteTable.cs -System.Web.Routing/RouteValueDictionary.cs -System.Web.Routing/RouteValueDictionaryExtensions.cs -System.Web.Routing/StopRoutingHandler.cs -System.Web.Routing/UrlRoutingHandler.cs -System.Web.Routing/UrlRoutingModule.cs -System.Web.Routing/VirtualPathData.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog b/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog deleted file mode 100644 index cdbb490a76..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/ChangeLog +++ /dev/null @@ -1,225 +0,0 @@ -2010-06-05 Marek Habersack - - * UrlRoutingModule.cs: 4.0 doesn't do the UrlRouting.axd magic, it - simply remaps the current handler to the one obtained from the - route. - -2010-05-06 Marek Habersack - - * RouteCollection.cs: GetVirtualPath throws ArgumentException - when named route is not found in the collection. - -2010-05-05 Marek Habersack - - * UrlRoutingModule.cs: PostMapRequestHandler is obsolete in 4.0 - - * RouteValueDictionary.cs: do not process type fields in - RouteValueDictionary (object) - - * RouteCollection.cs: GetRouteData throws an exception if Request - is null in the passed context. - Added Ignore* and MapPageRoute* 4.0 APIs - - * RequestContext.cs: 4.0 API update - - * PatternParser.cs: match parser rewrite to encompass 4.0 bug - fixes. We don't emulate some of the pre-4.0 routing bugs anymore. - -2009-11-23 Marek Habersack - - * Route.cs: GetRouteData throws NotImplementedException only when - pathInfo for the current request is a non-empty string. Patch from - Tiaan , thanks! - -2009-11-09 Marek Habersack - - * RouteCollection.cs: GetVirtualPath doesn't append trailing slash - to application path blindly anymore. Fixes bug #553022 - -2009-09-09 Marek Habersack - - * Route.cs: when Url is set to null, create a parser for empty - string. Fixes bug #537751 - - * PatternParser.cs: Parse allows for null/empty URLs. Fixes bug - #537751 - -2009-09-08 Marek Habersack - - * UrlRoutingModule.cs: store original request path in - PostResolveRequestCache and restore it in - PostMapRequestHandler. Fixes bug #537089 - -2009-08-19 Marek Habersack - - * Route.cs: GetRouteData adds contents of its DataTokens - dictionary to the returned RouteData.DataTokens dictionary. Fixes - bug #523330. Patch from Dax@daxxfiles.net, thanks! - -2009-06-25 Marek Habersack - - * PatternParser.cs: parameter name lookups must be - case-insensitive. - Null and empty (string) parameters are skipped when building query - part of the action path. - -2009-06-16 Marek Habersack - - * RouteValueDictionaryExtensions.cs: do not compile if - SYSTEMCORE_DEP is not defined - - * PatternParser.cs: if SYSTEMCORE_DEP is not defined, do not - compile parts which require RouteValueDictionaryExtensions. - - * Decorated all classes with the TypeForwardedFrom attribute for - the 4.0 profile. - -2009-06-04 Marek Habersack - - * RouteValueDictionaryExtensions.cs: if both values are strings in - Has (string, value), compare them case-insensitively. Fixes bug - #502555 - -2009-05-27 Marek Habersack - - * PatternParser.cs: if Match is passed an empty path, do not - attempt to match the Url segments, skip to defaults matching right - away. - -2009-05-25 Marek Habersack - - * UrlPattern.cs: removed - replaced by PatternParser below. - - * RouteValueDictionaryExtensions.cs: added - some shortcuts for - using RouteValueDictionary in PatternParser - - * Route.cs: use the new PatternParser. - Factored out ProcessConstraint into ProcessConstraintInternal so - that the latter can be used by the PatternParser class. - Added parameter checks in ProcessConstraint. - - * PatternTokenType.cs: added - - * PatternToken.cs: added a helper class for the pattern parser. - - * PatternParser.cs: added. New implementation of url - parser/matcher/generator which fixes all URL isues known so - far. Fixes bug #504378 - -2009-05-12 Gonzalo Paniagua Javier - - * UrlPattern.cs: if the pattern is line {a}/{b} and {b} is substituted - by an empty string, remove the '/' too. - -2009-05-12 Gonzalo Paniagua Javier - - * UrlPattern.cs: non-string default arguments work now. - -2009-05-12 Marek Habersack - - * UrlPattern.cs: TrySubstitute performs substitution trimming. If - a segment would be set to a default value and all of its following - segments as well, it will be omitted from the generated URL. The - value comparison is done case-insensitively when the dictionary - values are strings. Fixes bug #502555 - -2009-05-11 Marek Habersack - - * UrlPattern.cs: TrySubstitute treats defaults differently - now. They are not consulted when checking if the passed values - match the pattern, but only when substituting the values. Fixes - bug #502555 - -2009-05-05 Marek Habersack - - * UrlPattern.cs: Match adds defaults values should some keys be - missing from the url. Fixes bug #500739 - - * Route.cs: a small GetRouteData loop optimization - -2009-02-18 Marek Habersack - - * UrlPattern.cs: TrySubstitute now gets the collection of default - values and uses it to replace url segments instead of failing when - the passed values collection is missing a segment. - Do not use the tokens array in Match. - - * RouteCollection.cs: check if name is null or empty, not just - null in GetVirtualPath - - * Route.cs: url.TrySubstitute should be passed the defaults - collection when called from GetVirtualPath - -2009-02-14 Marek Habersack - - * UrlPattern.cs: use the defaults collection when matching a path - and segments are missing. - - * RouteCollection.cs: GetRouteData must use VirtualPathProvider - to check for virtual path existence. - -2008-10-23 Atsushi Enomoto - - * UrlPattern.cs : fixed possible out-of-range case ("tableName/" in - DynamicData). - -2008-10-17 Atsushi Enomoto - - * RouteValueDictionary.cs : its string comparison is case - insensitive. - -2008-10-17 Atsushi Enomoto - - * UrlPattern.cs : fixed pattern match for such string that has - suffix. (DynamicData uses it.) - -2008-10-16 Atsushi Enomoto - - * RouteValueDictionary.cs : object argument is actually for - anonymous type instance. - -2008-10-10 Atsushi Enomoto - - * UrlRoutingModule.cs : implement PostMapRequestHandler() and - PostResolveRequestCache() to work correctly in order. - Now it should practically work. - -2008-09-18 Atsushi Enomoto - - * UrlRoutingModule.cs, RouteCollection.cs : - handle RouteExistingFiles. - -2008-09-18 Atsushi Enomoto - - * Route.cs : reject invalid constraint. - * UrlRoutingHandler.cs : more ProcessRequest() impl. - * UrlRoutingModule.cs : note. - -2008-09-17 Atsushi Enomoto - - * HttpMethodConstraint.cs, Route.cs, RouteCollection.cs, - UrlPattern.cs, UrlRoutingModule.cs: - ongoing UrlRoutingModule implementation. - -2008-09-12 Atsushi Enomoto - - * HttpMethodConstraint.cs, Route.cs, UrlPattern.cs, - RouteCollection.cs : implement Route.GetRouteData() and - HttpMethodConstraint.Match(). - -2008-09-12 Atsushi Enomoto - - * UrlPattern.cs : new file for URL pattern processing. - * Route.cs : use above. - -2008-09-11 Atsushi Enomoto - - * HttpMethodConstraint.cs, RequestContext.cs, Route.cs, - RouteCollection.cs, RouteData.cs, RouteTable.cs, - RouteValueDictionary.cs, StopRoutingHandler.cs, - UrlRoutingHandler.cs, UrlRoutingModule.cs, VirtualPathData.cs: - some implementation. - -2008-09-04 Atsushi Enomoto - - *.cs: initial checkin. diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/IRouteConstraint.cs b/mcs/class/System.Web.Routing/System.Web.Routing/IRouteConstraint.cs deleted file mode 100644 index 00118433b4..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/IRouteConstraint.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// IRouteConstraint.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - public interface IRouteConstraint - { - bool Match (HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection); - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/IRouteHandler.cs b/mcs/class/System.Web.Routing/System.Web.Routing/IRouteHandler.cs deleted file mode 100644 index a9a0d091cf..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/IRouteHandler.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// IRouteHandler.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - public interface IRouteHandler - { - IHttpHandler GetHttpHandler (RequestContext requestContext); - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RequestContext.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RequestContext.cs deleted file mode 100644 index 62c6957c7f..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RequestContext.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -// RequestContext.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public class RequestContext - { - public RequestContext () - { - HttpContext = null; - RouteData = null; - } - public RequestContext (HttpContextBase httpContext, RouteData routeData) - { - if (httpContext == null) - throw new ArgumentNullException ("httpContext"); - if (routeData == null) - throw new ArgumentNullException ("routeData"); - - HttpContext = httpContext; - RouteData = routeData; - } - - public virtual HttpContextBase HttpContext { get; set; } - public virtual RouteData RouteData { get; set; } - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteBase.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RouteBase.cs deleted file mode 100644 index 7e7d92135e..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// RouteBase.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public abstract class RouteBase - { - public abstract RouteData GetRouteData (HttpContextBase httpContext); - public abstract VirtualPathData GetVirtualPath (RequestContext requestContext, RouteValueDictionary values); - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteDirection.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RouteDirection.cs deleted file mode 100644 index 693d1dceac..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteDirection.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// RouteDirection.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System.Runtime.CompilerServices; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - public enum RouteDirection - { - IncomingRequest, - UrlGeneration - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteTable.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RouteTable.cs deleted file mode 100644 index ff0bc2e13d..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteTable.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// RouteTable.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public class RouteTable - { - static RouteTable () - { - Routes = new RouteCollection (); - } - - public static RouteCollection Routes { get; private set; } - } -} diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionary.cs b/mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionary.cs deleted file mode 100644 index eeef0dda75..0000000000 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionary.cs +++ /dev/null @@ -1,184 +0,0 @@ -// -// RouteValueDictionary.cs -// -// Author: -// Atsushi Enomoto -// -// Copyright (C) 2008 Novell Inc. http://novell.com -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.Runtime.CompilerServices; -using System.Security.Permissions; -using System.Web; - -using PairCollection = System.Collections.Generic.ICollection>; - -namespace System.Web.Routing -{ - [TypeForwardedFrom ("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public class RouteValueDictionary : IDictionary - { - internal class CaseInsensitiveStringComparer : IEqualityComparer - { - public static readonly CaseInsensitiveStringComparer Instance = new CaseInsensitiveStringComparer (); - - public int GetHashCode (string obj) - { - return obj.ToLower (CultureInfo.InvariantCulture).GetHashCode (); - } - - public bool Equals (string obj1, string obj2) - { - return String.Equals (obj1, obj2, StringComparison.OrdinalIgnoreCase); - } - } - - Dictionary d = new Dictionary (CaseInsensitiveStringComparer.Instance); - - public RouteValueDictionary () - { - } - - public RouteValueDictionary (IDictionary dictionary) - { - if (dictionary == null) - throw new ArgumentNullException ("dictionary"); - foreach (var p in dictionary) - Add (p.Key, p.Value); - } - - public RouteValueDictionary (object values) // anonymous type instance - { - if (values == null) - return; - - foreach (var pi in values.GetType ().GetProperties ()) { - try { - Add (pi.Name, pi.GetValue (values, null)); - } catch { - // ignore - } - } - } - - public int Count { - get { return d.Count; } - } - - bool PairCollection.IsReadOnly { - get { return ((PairCollection) d).IsReadOnly; } - } - - ICollection IDictionary.Keys { - get { return d.Keys; } - } - - ICollection IDictionary.Values { - get { return d.Values; } - } - - public object this [string key] { - get { object v; return d.TryGetValue (key, out v) ? v : null; } - set { d [key] = value; } - } - - public Dictionary.KeyCollection Keys { - get { return d.Keys; } - } - - public Dictionary.ValueCollection Values { - get { return d.Values; } - } - - public void Add (string key, object value) - { - d.Add (key, value); - } - - public void Clear () - { - d.Clear (); - } - - public bool ContainsKey (string key) - { - return d.ContainsKey (key); - } - - public bool ContainsValue (object value) - { - return d.ContainsValue (value); - } - - public Dictionary.Enumerator GetEnumerator () - { - return d.GetEnumerator (); - } - - void ICollection>.Add (KeyValuePair item) - { - ((PairCollection) d).Add (item); - } - - bool ICollection>.Contains (KeyValuePair item) - { - return ((PairCollection) d).Contains (item); - } - - void ICollection>.CopyTo (KeyValuePair [] array, int arrayIndex) - { - ((PairCollection) d).CopyTo (array, arrayIndex); - } - - bool ICollection>.Remove (KeyValuePair item) - { - return ((PairCollection) d).Remove (item); - } - - IEnumerator> IEnumerable>.GetEnumerator() - { - return d.GetEnumerator (); - } - - IEnumerator IEnumerable.GetEnumerator () - { - return d.GetEnumerator (); - } - - public bool Remove (string key) - { - return d.Remove (key); - } - - public bool TryGetValue (string key, out object value) - { - return d.TryGetValue (key, out value); - } - } -} diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/FakeHttpWorkerRequest.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/FakeHttpWorkerRequest.cs index 5d59be0c2f..1e536b0dcf 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/FakeHttpWorkerRequest.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/FakeHttpWorkerRequest.cs @@ -81,11 +81,7 @@ namespace MonoTests.Common public override string GetRawUrl () { -#if NET_4_0 return "/GetRawUrl"; -#else - return "GetRawUrl"; -#endif } public override string GetHttpVerbName () diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RequestContext.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RequestContext.cs index 7e890be793..5d2aeceb85 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RequestContext.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RequestContext.cs @@ -40,7 +40,6 @@ namespace MonoTests.System.Web.Routing [TestFixture] public class RequestContextTest { -#if NET_4_0 [Test] public void DefaultConstructor () { @@ -49,7 +48,6 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual (null, rc.HttpContext, "#A1"); Assert.AreEqual (null, rc.RouteData, "#A2"); } -#endif [Test] public void Constructor_HttpContextBase_RouteData () { @@ -72,14 +70,12 @@ namespace MonoTests.System.Web.Routing var rc = new RequestContext (ctx, new RouteData ()); Assert.AreSame (ctx, rc.HttpContext, "#A1"); -#if NET_4_0 ctx = new HttpContextWrapper (new HttpContext (new HttpRequest ("filename", "http://localhost/filename", String.Empty), new HttpResponse (new StringWriter ()))); rc.HttpContext = ctx; Assert.AreSame (ctx, rc.HttpContext, "#A2"); rc.HttpContext = null; Assert.IsNull (rc.HttpContext, "#A3"); -#endif } [Test] @@ -90,14 +86,12 @@ namespace MonoTests.System.Web.Routing var rc = new RequestContext (ctx, rd); Assert.AreSame (rd, rc.RouteData, "#A1"); -#if NET_4_0 rd = new RouteData (); rc.RouteData = rd; Assert.AreSame (rd, rc.RouteData, "#A2"); rc.RouteData = null; Assert.IsNull (rc.RouteData, "#A3"); -#endif } } } diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteCollectionTest.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteCollectionTest.cs index 18b52ea11b..c2d2d51a28 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteCollectionTest.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteCollectionTest.cs @@ -131,17 +131,8 @@ namespace MonoTests.System.Web.Routing { var rd = new RouteCollection () { RouteExistingFiles = true }.GetRouteData (new HttpContextStub2 (null, null, null)); Assert.IsNull (rd, "#A1"); -#if NET_4_0 rd = new RouteCollection ().GetRouteData (new HttpContextStub2 (null, null, null)); Assert.IsNull (rd, "#A2"); -#else - try { - new RouteCollection ().GetRouteData (new HttpContextStub2 (null, null, null)); - Assert.Fail ("#A3"); - } catch (NotImplementedException) { - // it should fail due to the NIE on AppRelativeCurrentExecutionFilePath. - } -#endif } [Test] @@ -648,7 +639,6 @@ namespace MonoTests.System.Web.Routing Assert.IsNotNull (rd, "#A1"); } -#if NET_4_0 [Test] public void Ignore_String () { @@ -926,6 +916,15 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual (typeof (PageRouteHandler), rd.RouteHandler.GetType (), "#A4-3"); Assert.IsFalse (((PageRouteHandler) rd.RouteHandler).CheckPhysicalUrlAccess, "#A4-4"); } -#endif + + [Test] // https://bugzilla.xamarin.com/show_bug.cgi?id=13909 + public void MapPageRoute_Bug13909 () + { + var c = new RouteCollection (); + + c.MapPageRoute("test", "test", "~/test.aspx"); + c.Clear(); + c.MapPageRoute("test", "test", "~/test.aspx"); + } } } diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs index b9e9be7247..c9fd18a29c 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/RouteTest.cs @@ -627,7 +627,6 @@ namespace MonoTests.System.Web.Routing var hc = new HttpContextStub ("~/xyzxyzxyzxyzblah", String.Empty); var rd = r.GetRouteData (hc); -#if NET_4_0 || !DOTNET // When running on Mono this test succeeds - it was a bug in .NET routing for 3.5 which // we don't reproduce anymore. Assert.IsNotNull (rd, "#1"); @@ -637,9 +636,6 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual ("xyz", rd.Values ["foo"], "#4-1"); Assert.AreEqual ("xyz", rd.Values ["bar"], "#4-2"); Assert.AreEqual ("blah", rd.Values ["baz"], "#4-3"); -#else - Assert.IsNull (rd, "#1"); -#endif } [Test] @@ -738,7 +734,6 @@ namespace MonoTests.System.Web.Routing var hc = new HttpContextStub ("~/xyzxyzxyzxyzxyzxyzblah", String.Empty); var rd = r.GetRouteData (hc); -#if NET_4_0 || !DOTNET // When running on Mono this test succeeds - it was a bug in .NET routing for 3.5 which // we don't reproduce anymore. Assert.IsNotNull (rd, "#1"); @@ -748,9 +743,6 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual ("xyzxyzxyz", rd.Values ["foo"], "#4-1"); Assert.AreEqual ("xyz", rd.Values ["bar"], "#4-2"); Assert.AreEqual ("blah", rd.Values ["baz"], "#4-3"); -#else - Assert.IsNull (rd, "#1"); -#endif } [Test] @@ -776,7 +768,6 @@ namespace MonoTests.System.Web.Routing var hc = new HttpContextStub ("~/xyzxyzxyzdabxyzblah", String.Empty); var rd = r.GetRouteData (hc); -#if NET_4_0 || !DOTNET // When running on Mono this test succeeds - it was a bug in .NET routing for 3.5 which // we don't reproduce anymore. Assert.IsNotNull (rd, "#1"); @@ -786,9 +777,6 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual ("xyz", rd.Values ["foo"], "#4-1"); Assert.AreEqual ("dab", rd.Values ["bar"], "#4-2"); Assert.AreEqual ("blah", rd.Values ["baz"], "#4-3"); -#else - Assert.IsNull (rd, "#1"); -#endif } [Test] @@ -798,7 +786,6 @@ namespace MonoTests.System.Web.Routing var hc = new HttpContextStub ("~/xyzxyzxyzxyzxyz", String.Empty); var rd = r.GetRouteData (hc); -#if NET_4_0 || !DOTNET // When running on Mono this test succeeds - it was a bug in .NET routing for 3.5 which // we don't reproduce anymore. Assert.IsNotNull (rd, "#1"); @@ -808,9 +795,6 @@ namespace MonoTests.System.Web.Routing Assert.AreEqual ("xyz", rd.Values ["foo"], "#4-1"); Assert.AreEqual ("xyz", rd.Values ["bar"], "#4-2"); Assert.AreEqual ("xyz", rd.Values ["baz"], "#4-3"); -#else - Assert.IsNull (rd, "#1"); -#endif } [Test] @@ -1375,7 +1359,6 @@ namespace MonoTests.System.Web.Routing } -#if NET_4_0 [Test (Description="Bug #671753")] public void GetVirtualPath15 () { @@ -1396,7 +1379,6 @@ namespace MonoTests.System.Web.Routing Assert.IsNotNull (RouteTable.Routes.GetVirtualPath (rc, "TestRoute", new RouteValueDictionary ()), "#A3"); Assert.IsNotNull (RouteTable.Routes.GetVirtualPath (rc, "TestRoute", null), "#A4"); } -#endif [Test (Description="Xamarin Bug #9116")] public void GetVirtualPath16 () diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/TestStubTypes.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/TestStubTypes.cs index 817ae81973..45f3ede612 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/TestStubTypes.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/TestStubTypes.cs @@ -248,7 +248,6 @@ namespace MonoTests.System.Web.Routing public string RewrittenPath { get; set; } } -#if NET_4_0 class FakeHttpRequestWrapper : HttpRequestWrapper { string requestUrl; @@ -320,7 +319,6 @@ namespace MonoTests.System.Web.Routing wrapper = new FakeHttpRequestWrapper (requestUrl, path, appPath); } } -#endif public class MyStopRoutingHandler : StopRoutingHandler { public IHttpHandler CallGetHttpHandler (RequestContext rc) diff --git a/mcs/class/System.Web.Routing/Test/System.Web.Routing/UrlRoutingModuleTest.cs b/mcs/class/System.Web.Routing/Test/System.Web.Routing/UrlRoutingModuleTest.cs index a55d911e56..784dc51089 100644 --- a/mcs/class/System.Web.Routing/Test/System.Web.Routing/UrlRoutingModuleTest.cs +++ b/mcs/class/System.Web.Routing/Test/System.Web.Routing/UrlRoutingModuleTest.cs @@ -85,17 +85,6 @@ namespace MonoTests.System.Web.Routing m.PostResolveRequestCache (new HttpContextStub2 ("~/foo/bar", null)); } -#if !NET_4_0 - [Test] - [ExpectedException (typeof (InvalidOperationException))] - public void PostResolveRequestCacheNullHttpHandler () - { - var m = new UrlRoutingModule (); - RouteTable.Routes.Add (new MyRoute ("foo/bar", new NullRouteHandler ())); - - m.PostResolveRequestCache (new HttpContextStub2 ("~/foo/bar", null)); - } -#endif [Test] [ExpectedException (typeof (NotImplementedException))] public void PostResolveRequestCacheNoPath () @@ -106,53 +95,15 @@ namespace MonoTests.System.Web.Routing m.PostResolveRequestCache (new HttpContextStub2 ("~/foo/bar", null)); } -#if !NET_4_0 - [Test] - public void PostResolveRequestCacheCallRewritePath () - { - var m = new UrlRoutingModule (); - RouteTable.Routes.Add (new MyRoute ("{foo}/{bar}", new MyRouteHandler ())); - var hc = new HttpContextStub2 ("~/x/y", "z"); - try { - m.PostResolveRequestCache (hc); - Assert.Fail ("#1"); - } catch (ApplicationException ex) { - Assert.AreEqual ("~/UrlRouting.axd", ex.Message, "#2"); - } - } - - [Test] - public void PostResolveRequestCacheModifiedPath () - { - var m = new UrlRoutingModule (); - RouteTable.Routes.Add (new MyRoute ("{foo}/{bar}", new MyRouteHandler ())); - var hc = new HttpContextStub2 ("~/x/y", "z", "apppath"); - hc.SetResponse (new HttpResponseStub (2)); - try { - m.PostResolveRequestCache (hc); - Assert.Fail ("#1"); - } catch (ApplicationException ex) { - Assert.AreEqual ("~/UrlRouting.axd", ex.Message, "#2"); - } - } -#endif [Test] public void PostResolveRequestCache () { var m = new UrlRoutingModule (); RouteTable.Routes.Add (new MyRoute ("{foo}/{bar}", new MyRouteHandler ())); -#if NET_4_0 var hc = new HttpContextStub4 ("~/x/y", "z", "apppath", false); -#else - var hc = new HttpContextStub3 ("~/x/y", "z", "apppath", false); -#endif hc.SetResponse (new HttpResponseStub (2)); m.PostResolveRequestCache (hc); -#if NET_4_0 Assert.AreEqual (null, hc.RewrittenPath, "#1"); -#else - Assert.AreEqual ("~/UrlRouting.axd", hc.RewrittenPath, "#1"); -#endif // it internally stores the handler } @@ -203,49 +154,23 @@ namespace MonoTests.System.Web.Routing { var m = new UrlRoutingModule (); RouteTable.Routes.Add (new MyRoute ("{foo}/{bar}", new MyRouteHandler ())); -#if NET_4_0 var hc = new HttpContextStub4 ("~/x/y", "z", "apppath", true); -#else - var hc = new HttpContextStub3 ("~/x/y", "z", "apppath", true); -#endif hc.HttpHandler = new MyHttpHandler (); hc.SetResponse (new HttpResponseStub (2)); m.PostResolveRequestCache (hc); -#if NET_4_0 Assert.AreEqual (null, hc.RewrittenPath, "#1"); -#else - Assert.AreEqual ("~/UrlRouting.axd", hc.RewrittenPath, "#1"); -#endif // It tries to set Handler and causes NIE m.PostMapRequestHandler (hc); } [Test] -#if !NET_4_0 - [ExpectedException (typeof (ApplicationException))] -#endif public void Pipeline3 () { var m = new UrlRoutingModule (); RouteTable.Routes.Add (new MyRoute ("{foo}/{bar}", new MyRouteHandler ())); -#if NET_4_0 var hc = new HttpContextStub5 ("~/x/y", String.Empty, "apppath"); -#else - var hc = new HttpContextStub2 ("~/x/y", String.Empty, "apppath"); -#endif hc.SetResponse (new HttpResponseStub (2)); -#if NET_4_0 Assert.IsNull (m.RouteCollection.GetRouteData (hc), "#0"); -#else - Assert.IsNotNull (m.RouteCollection.GetRouteData (hc), "#0"); - m.PostResolveRequestCache (hc); - try { - m.PostMapRequestHandler (hc); - Assert.Fail ("#1"); - } catch (ApplicationException ex) { - Assert.AreEqual ("~/UrlRouting.axd", ex.Message, "#2"); - } -#endif } } } diff --git a/mcs/class/System.Web.Routing/net_4_0_System.Web.Routing.dll.sources b/mcs/class/System.Web.Routing/net_4_0_System.Web.Routing.dll.sources deleted file mode 100644 index c030663c14..0000000000 --- a/mcs/class/System.Web.Routing/net_4_0_System.Web.Routing.dll.sources +++ /dev/null @@ -1,3 +0,0 @@ -../../build/common/Consts.cs -../../build/common/MonoTODOAttribute.cs -Assembly/AssemblyInfo.cs diff --git a/mcs/class/System.Web.Routing/net_4_5_System.Web.Routing.dll.sources b/mcs/class/System.Web.Routing/net_4_5_System.Web.Routing.dll.sources deleted file mode 100644 index 7194672a8c..0000000000 --- a/mcs/class/System.Web.Routing/net_4_5_System.Web.Routing.dll.sources +++ /dev/null @@ -1 +0,0 @@ -#include net_4_0_System.Web.Routing.dll.sources diff --git a/mcs/class/System.Web.Services/Makefile b/mcs/class/System.Web.Services/Makefile index a77c368389..c189f7963e 100644 --- a/mcs/class/System.Web.Services/Makefile +++ b/mcs/class/System.Web.Services/Makefile @@ -3,8 +3,7 @@ SUBDIRS = include ../../build/rules.make LIBRARY = System.Web.Services.dll -MOBILE := $(filter monotouch monotouch_watch monodroid xammac mobile mobile_static, $(PROFILE)) -ifdef MOBILE +ifdef MOBILE_PROFILE LIB_REFS = System System.Xml LIB_MCS_FLAGS = \ -nowarn:649 -nowarn:169 \ @@ -47,6 +46,14 @@ endif TEST_MCS_FLAGS = $(LIB_MCS_FLAGS) -nowarn:618 +ifndef NO_THREAD_ABORT +TEST_MCS_FLAGS += -d:MONO_FEATURE_THREAD_ABORT +endif + +ifndef NO_THREAD_SUSPEND_RESUME +TEST_MCS_FLAGS += -d:MONO_FEATURE_THREAD_SUSPEND_RESUME +endif + EXTRA_DISTFILES = \ System.Web.Services.Description/web-reference.xsd \ System.Web.Services.Description/wsdl-1.1.xsd \ diff --git a/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources b/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources index a2a540c685..1d055d9cda 100644 --- a/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources +++ b/mcs/class/System.Web.Services/System.Web.Services_test.dll.sources @@ -31,6 +31,6 @@ System.Web.Services.Description/WebReferenceOptionsTest.cs System.Web.Services.Description/WebServicesInteroperabilityTest.cs System.Web.Services.Protocols/LogicalMethodInfoTest.cs System.Web.Services.Protocols/SoapHttpClientProtocolTest.cs -System.Web.Services.Protocols/SocketResponder.cs System.Web.Services.Protocols/WebClientProtocolTest.cs System.Web.Services.Protocols/SoapServerTypeTest.cs +../../test-helpers/SocketResponder.cs diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SoapHttpClientProtocolTest.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SoapHttpClientProtocolTest.cs index 68673dbac4..0019e05c27 100755 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SoapHttpClientProtocolTest.cs +++ b/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SoapHttpClientProtocolTest.cs @@ -39,6 +39,8 @@ using System.Xml.Serialization; using NUnit.Framework; +using MonoTests.Helpers; + namespace MonoTests.System.Web.Services.Protocols { [TestFixture] @@ -49,9 +51,7 @@ namespace MonoTests.System.Web.Services.Protocols public void OutParametersTest () { IPEndPoint localEP = new IPEndPoint (IPAddress.Loopback, 5000); - using (SocketResponder sr = new SocketResponder (localEP, new SocketRequestHandler (OutParametersResponse))) { - sr.Start (); - + using (SocketResponder sr = new SocketResponder (localEP, s => OutParametersResponse (s))) { FooService service = new FooService (); service.Url = "http://" + IPAddress.Loopback.ToString () + ":5000/"; @@ -62,8 +62,6 @@ namespace MonoTests.System.Web.Services.Protocols Assert.AreEqual (0, a, "#A2"); Assert.IsFalse (b, "#A3"); service.Dispose (); - - sr.Stop (); } } @@ -72,9 +70,7 @@ namespace MonoTests.System.Web.Services.Protocols public void FaultTest () { IPEndPoint localEP = new IPEndPoint (IPAddress.Loopback, 5000); - using (SocketResponder sr = new SocketResponder (localEP, new SocketRequestHandler (FaultResponse_Qualified))) { - sr.Start (); - + using (SocketResponder sr = new SocketResponder (localEP, s => FaultResponse_Qualified (s))) { FooService service = new FooService (); service.Url = "http://" + IPAddress.Loopback.ToString () + ":5000/"; try { @@ -97,13 +93,9 @@ namespace MonoTests.System.Web.Services.Protocols Assert.AreEqual ("Failure processing request.", ex.Message, "#A9"); } service.Dispose (); - - sr.Stop (); } - using (SocketResponder sr = new SocketResponder (localEP, new SocketRequestHandler (FaultResponse_Unqualified))) { - sr.Start (); - + using (SocketResponder sr = new SocketResponder (localEP, s => FaultResponse_Unqualified (s))) { FooService service = new FooService (); service.Url = "http://" + IPAddress.Loopback.ToString () + ":5000/"; try { @@ -126,8 +118,6 @@ namespace MonoTests.System.Web.Services.Protocols Assert.AreEqual ("Failure processing request.", ex.Message, "#B9"); } service.Dispose (); - - sr.Stop (); } } diff --git a/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SocketResponder.cs b/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SocketResponder.cs deleted file mode 100644 index 8e26ee6fbf..0000000000 --- a/mcs/class/System.Web.Services/Test/System.Web.Services.Protocols/SocketResponder.cs +++ /dev/null @@ -1,118 +0,0 @@ -// -// SocketResponder.cs - Utility class for tests that require a listener -// -// Author: -// Gert Driesen (drieseng@users.sourceforge.net) -// -// Copyright (C) 2007 Gert Driesen -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Globalization; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Threading; - -namespace MonoTests.System.Web.Services.Protocols -{ - public delegate byte [] SocketRequestHandler (Socket socket); - - public class SocketResponder : IDisposable - { - private TcpListener tcpListener; - private readonly IPEndPoint _localEndPoint; - private Thread listenThread; - private SocketRequestHandler _requestHandler; - private bool _stopped = true; - private readonly object _syncRoot = new object (); - - private const int SOCKET_CLOSED = 10004; - - public SocketResponder (IPEndPoint localEP, SocketRequestHandler requestHandler) - { - _localEndPoint = localEP; - _requestHandler = requestHandler; - } - - public IPEndPoint LocalEndPoint - { - get { return _localEndPoint; } - } - - public void Dispose () - { - Stop (); - } - - public bool IsStopped - { - get - { - lock (_syncRoot) { - return _stopped; - } - } - } - - public void Start () - { - lock (_syncRoot) { - if (!_stopped) - return; - _stopped = false; - listenThread = new Thread (new ThreadStart (Listen)); - listenThread.Start (); - Thread.Sleep (20); // allow listener to start - } - } - - public void Stop () - { - lock (_syncRoot) { - if (_stopped) - return; - _stopped = true; - if (tcpListener != null) { - tcpListener.Stop (); - tcpListener = null; - } - } - } - - private void Listen () - { - tcpListener = new TcpListener (LocalEndPoint); - tcpListener.Start (); - try { - Socket socket = tcpListener.AcceptSocket (); - socket.Send (_requestHandler (socket)); - socket.Close (); - } catch (SocketException ex) { - // ignore interruption of blocking call - if (ex.ErrorCode != SOCKET_CLOSED) - throw; - } - } - } -} diff --git a/mcs/class/System.Web.Services/monotouch_tv_System.Web.Services.dll.sources b/mcs/class/System.Web.Services/monotouch_tv_System.Web.Services.dll.sources new file mode 100644 index 0000000000..9e39dcc73b --- /dev/null +++ b/mcs/class/System.Web.Services/monotouch_tv_System.Web.Services.dll.sources @@ -0,0 +1 @@ +#include mobile_System.Web.Services.dll.sources diff --git a/mcs/class/System.Web/Assembly/AssemblyInfo.cs b/mcs/class/System.Web/Assembly/AssemblyInfo.cs index a10e374faf..67619f0209 100644 --- a/mcs/class/System.Web/Assembly/AssemblyInfo.cs +++ b/mcs/class/System.Web/Assembly/AssemblyInfo.cs @@ -85,9 +85,7 @@ using System.Web.UI; #endif [assembly: InternalsVisibleTo ("SystemWebTestShim, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -[assembly: InternalsVisibleTo ("System.Web_test_net_2_0, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -[assembly: InternalsVisibleTo ("System.Web_test_net_4_0, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] -[assembly: InternalsVisibleTo ("System.Web_test_net_4_5, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] +[assembly: InternalsVisibleTo ("System.Web_test_net_4_x, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b5fc90e7027f67871e773a8fde8938c81dd402ba65b9201d60593e96c492651e889cc13f1415ebb53fac1131ae0bd333c5ee6021672d9718ea31a8aebd0da0072f25d87dba6fc90ffd598ed4da35e44c398c454307e8e33b8426143daec9f596836f97c8f74750e5975c64e2189f45def46b2a2b1247adc3652bf5c308055da9")] // Resources [assembly: WebResource ("TreeView_noexpand.gif", "image/gif")] diff --git a/mcs/class/System.Web/Makefile b/mcs/class/System.Web/Makefile index ece23d446e..21fad6ab52 100644 --- a/mcs/class/System.Web/Makefile +++ b/mcs/class/System.Web/Makefile @@ -240,6 +240,8 @@ OTHER_LIB_MCS_FLAGS += -r:System.Web.ApplicationServices.dll OTHER_RES += $(RESOURCE_FILES_4) endif +RESOURCE_STRINGS = ../../../external/referencesource/System.Web/System.Web.txt + LIB_REFS = System System.Core System.Drawing System.Data System.Xml System.EnterpriseServices System.Runtime.Serialization.Formatters.Soap System.ComponentModel.DataAnnotations LIB_MCS_FLAGS = \ -unsafe \ diff --git a/mcs/class/System.Web/ReferenceSources/SR.cs.REMOVED.git-id b/mcs/class/System.Web/ReferenceSources/SR.cs.REMOVED.git-id new file mode 100644 index 0000000000..f62d0f658f --- /dev/null +++ b/mcs/class/System.Web/ReferenceSources/SR.cs.REMOVED.git-id @@ -0,0 +1 @@ +29db6615b5ce14e369eba09c5e0d78ec0f9c65c7 \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.Caching/IOutputCacheEntry.cs b/mcs/class/System.Web/System.Web.Caching/IOutputCacheEntry.cs deleted file mode 100644 index 1f788edc02..0000000000 --- a/mcs/class/System.Web/System.Web.Caching/IOutputCacheEntry.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// (C) 2010 Novell, Inc (http://novell.com/) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections.Generic; - -namespace System.Web.Caching -{ - public interface IOutputCacheEntry - { - List HeaderElements { get; set; } - List ResponseElements { get; set; } - } -} diff --git a/mcs/class/System.Web/System.Web.Compilation/AppResourcesAssemblyBuilder.cs b/mcs/class/System.Web/System.Web.Compilation/AppResourcesAssemblyBuilder.cs index da8d37df9f..895440d3a6 100644 --- a/mcs/class/System.Web/System.Web.Compilation/AppResourcesAssemblyBuilder.cs +++ b/mcs/class/System.Web/System.Web.Compilation/AppResourcesAssemblyBuilder.cs @@ -48,7 +48,7 @@ namespace System.Web.Compilation class AppResourcesAssemblyBuilder { static string framework_version = "4.5"; - static string profile_path = "net_4_5"; + static string profile_path = "net_4_x"; CompilationSection config; CompilerInfo ci; CodeDomProvider _provider; diff --git a/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesTo.cs b/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesTo.cs deleted file mode 100644 index f49eedf6d2..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesTo.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.Compilation.BuildProviderAppliesTo -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Compilation -{ - [Flags] - public enum BuildProviderAppliesTo - { - Web = 1, /* generate code from files in directories *other* than App_Code, - App_LocalResources, and App_GlobalResources */ - Code = 1 << 1, /* generate code only for App_Code/* */ - Resources = 1 << 2, /* generate code only for App_LocalResources/* and App_GlobalResources/* */ - All = 7 /* generate code for everything. default value for the attribute */ - } -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesToAttribute.cs b/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesToAttribute.cs deleted file mode 100644 index 3ec58fefcc..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/BuildProviderAppliesToAttribute.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.Compilation.BuildProviderAppliesToAttribute -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006-2009 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Compilation -{ - [AttributeUsage (AttributeTargets.Class)] - public sealed class BuildProviderAppliesToAttribute : Attribute - { - BuildProviderAppliesTo appliesTo; - - public BuildProviderAppliesToAttribute (BuildProviderAppliesTo appliesTo) - { - this.appliesTo = appliesTo; - } - - public BuildProviderAppliesTo AppliesTo { - get { return appliesTo; } - } - } - -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/DesignTimeResourceProviderFactoryAttribute.cs b/mcs/class/System.Web/System.Web.Compilation/DesignTimeResourceProviderFactoryAttribute.cs deleted file mode 100644 index 4992586135..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/DesignTimeResourceProviderFactoryAttribute.cs +++ /dev/null @@ -1,67 +0,0 @@ -// -// System.Web.Compilation.DesignTimeResourceProviderFactoryAttribute -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System; -using System.CodeDom; -using System.Web.UI; - -namespace System.Web.Compilation { - - [AttributeUsage (AttributeTargets.Class)] - public sealed class DesignTimeResourceProviderFactoryAttribute : Attribute - { - string factoryTypeName; - - public DesignTimeResourceProviderFactoryAttribute (string factoryTypeName) - { - this.factoryTypeName = factoryTypeName; - } - - public DesignTimeResourceProviderFactoryAttribute (System.Type factoryType) - { - this.factoryTypeName = factoryType.AssemblyQualifiedName; - } - - public override bool IsDefaultAttribute () - { - return factoryTypeName == null; - } - - public string FactoryTypeName { - get { return factoryTypeName; } - } - - } - -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/ExpressionEditorAttribute.cs b/mcs/class/System.Web/System.Web.Compilation/ExpressionEditorAttribute.cs deleted file mode 100644 index 9234a6b42b..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/ExpressionEditorAttribute.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -// System.Web.Compilation.ExpressionEditorAttribute -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.Compilation { - - [AttributeUsage (AttributeTargets.Class)] - public sealed class ExpressionEditorAttribute : Attribute - { - string typeName; - - public ExpressionEditorAttribute (string typeName) - { - this.typeName = typeName; - } - - public ExpressionEditorAttribute (Type type) - { - this.typeName = type.AssemblyQualifiedName; - } - - public string EditorTypeName { - get { return typeName; } - } - - [MonoTODO ("Not implemented")] - public override bool Equals (object obj) - { - throw new NotImplementedException (); - } - - [MonoTODO ("Not implemented")] - public override int GetHashCode () - { - throw new NotImplementedException (); - } - - } -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/ExpressionPrefixAttribute.cs b/mcs/class/System.Web/System.Web.Compilation/ExpressionPrefixAttribute.cs deleted file mode 100644 index edea592bc3..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/ExpressionPrefixAttribute.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// System.Web.Compilation.ExpressionPrefixAttribute -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.Compilation { - - [AttributeUsage (AttributeTargets.Class)] - public sealed class ExpressionPrefixAttribute : Attribute - { - string expressionPrefix; - - public ExpressionPrefixAttribute (string expressionPrefix) - { - this.expressionPrefix = expressionPrefix; - } - - public string ExpressionPrefix { - get { return expressionPrefix; } - } - } -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesTo.cs b/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesTo.cs deleted file mode 100644 index 9a03ab29cb..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesTo.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// (C) 2010 Novell, Inc (http://novell.com/) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.Compilation -{ - [FlagsAttribute] - public enum FolderLevelBuildProviderAppliesTo - { - None = 0x00, - Code = 0x01, - WebReferences = 0x02, - LocalResources = 0x04, - GlobalResources = 0x08 - } -} diff --git a/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesToAttribute.cs b/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesToAttribute.cs deleted file mode 100644 index 3e1db0781b..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/FolderLevelBuildProviderAppliesToAttribute.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// (C) 2010 Novell, Inc (http://novell.com/) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.Compilation -{ - [AttributeUsage (AttributeTargets.Class, AllowMultiple = false)] - public sealed class FolderLevelBuildProviderAppliesToAttribute : Attribute - { - public FolderLevelBuildProviderAppliesTo AppliesTo { - get; private set; - } - - public FolderLevelBuildProviderAppliesToAttribute (FolderLevelBuildProviderAppliesTo appliesTo) - { - this.AppliesTo = appliesTo; - } - } -} diff --git a/mcs/class/System.Web/System.Web.Compilation/IAssemblyPostProcessor.cs b/mcs/class/System.Web/System.Web.Compilation/IAssemblyPostProcessor.cs deleted file mode 100644 index 5c1d4fc758..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/IAssemblyPostProcessor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.Compilation.IAssemblyPostProcessor -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2006-2009 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Compilation -{ - public interface IAssemblyPostProcessor : IDisposable - { - void PostProcessAssembly (string path); - } -} - - diff --git a/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs b/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs deleted file mode 100644 index bb204bd5ed..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/IImplicitResourceProvider.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.Compilation.IImplicitResourceProvider.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - - - -using System.Collections; -using System.Globalization; - -namespace System.Web.Compilation -{ - public interface IImplicitResourceProvider - { - object GetObject (ImplicitResourceKey key, CultureInfo culture); - ICollection GetImplicitResourceKeys (string keyPrefix); - } -} - diff --git a/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs b/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs deleted file mode 100644 index 4f3357a512..0000000000 --- a/mcs/class/System.Web/System.Web.Compilation/ImplicitResourceKey.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// System.Web.Compilation.IImplicitResourceProvider.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Compilation -{ - public sealed class ImplicitResourceKey - { - string filter; - string keyPrefix; - string property; - - public ImplicitResourceKey (string filter, string keyPrefix, string property) - { - this.filter = filter; - this.keyPrefix = keyPrefix; - this.property = property; - } - - public ImplicitResourceKey () - { - } - - public string Filter { - get { return filter; } - set { filter = value; } - } - - public string KeyPrefix { - get { return keyPrefix; } - set { keyPrefix = value; } - } - - public string Property { - get { return property; } - set { property = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/AdapterDictionary.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/AdapterDictionary.cs deleted file mode 100644 index bddb7215b3..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/AdapterDictionary.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -// System.Web.Configuration.AdapterDictionary -// -// Authors: -// Lluis Sanchez Gual (lluis@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Collections.Specialized; -using System.Runtime.Serialization; - -namespace System.Web.Configuration -{ - [Serializable] - public class AdapterDictionary: OrderedDictionary, IDeserializationCallback - { - public string this [string key] { - get { return (string) base [key]; } - set { base [key] = value; } - } - - [MonoTODO ("Not implemented")] - void IDeserializationCallback.OnDeserialization (object sender) - { - throw new NotImplementedException (); - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/AuthenticationMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/AuthenticationMode.cs deleted file mode 100644 index a42b964a01..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/AuthenticationMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Configuration.AuthenticationMode.cs -// -// Authors: -// Miguel de Icaza (miguel@novell.com) -// -// (C) 2005 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Configuration { - public enum AuthenticationMode { - None, - Windows, - Passport, - Forms - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/AuthorizationRuleAction.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/AuthorizationRuleAction.cs deleted file mode 100644 index 9f8aef49e1..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/AuthorizationRuleAction.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.Configuration.AuthorizationRuleAction.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum AuthorizationRuleAction - { - Deny, - Allow - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsMode.cs deleted file mode 100644 index 174484f459..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Configuration.CustomErrorsMode.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum CustomErrorsMode - { - RemoteOnly, - On, - Off - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsRedirectMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsRedirectMode.cs deleted file mode 100644 index 49656c0b0d..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/CustomErrorsRedirectMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2011 Novell, Inc (http://novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.Configuration -{ - public enum CustomErrorsRedirectMode - { - ResponseRedirect, - ResponseRewrite - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/FormsAuthPasswordFormat.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/FormsAuthPasswordFormat.cs deleted file mode 100644 index 5ac12e1b51..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/FormsAuthPasswordFormat.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Configuration.FormsAuthPasswordFormat.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.Configuration { - - public enum FormsAuthPasswordFormat - { - Clear, - SHA1, - MD5 - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/FormsProtectionEnum.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/FormsProtectionEnum.cs deleted file mode 100644 index 2b14f121be..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/FormsProtectionEnum.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Configuration.FormsProtectionEnum.cs -// -// Author: -// Gonzalo Paniagua Javier -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Configuration { - public enum FormsProtectionEnum { - All, - None, - Encryption, - Validation - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPath.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPath.cs deleted file mode 100644 index e81a4e5b17..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPath.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.IConfigMapPath -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2007 Novell, Inc -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.Configuration -{ - public interface IConfigMapPath - { - string GetAppPathForPath (string siteID, string path); - void GetDefaultSiteNameAndID (out string siteName, out string siteID); - string GetMachineConfigFilename (); - void GetPathConfigFilename (string siteID, string path, out string directory, out string baseName); - string GetRootWebConfigFilename (); - string MapPath (string siteID, string path); - void ResolveSiteArgument (string siteArgument, out string siteName, out string siteID); - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPathFactory.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPathFactory.cs deleted file mode 100644 index 3220f0aab2..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/IConfigMapPathFactory.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.HttpCacheVaryByContentEncodings -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2007 Novell, Inc -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Collections.Generic; -using System.Security.Permissions; - -namespace System.Web.Configuration -{ - public interface IConfigMapPathFactory - { - IConfigMapPath Create (string virtualPath, string physicalPath); - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/IRemoteWebConfigurationHostServer.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/IRemoteWebConfigurationHostServer.cs deleted file mode 100644 index f47b0fd018..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/IRemoteWebConfigurationHostServer.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.Configuration.IRemoteWebConfigurationHostServer.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; -using System.Runtime.InteropServices; - -namespace System.Web.Configuration -{ - [ComVisibleAttribute (true)] - [GuidAttribute ("A99B591A-23C6-4238-8452-C7B0E895063D")] - public interface IRemoteWebConfigurationHostServer - { - string DoEncryptOrDecrypt ( - bool do_encrypt, string xml_string, string protection_provider_name, - string protection_provider_type, string [] params_keys, string [] param_values); - - byte [] GetData (string filename, bool getReadTimeOnly, out long readTime); - - void GetFileDetails (string name, out bool exists, out long size, out long create_data, out long last_write_date); - - string GetFilePaths (int webLevel, string path, string site, string locationSubPath); - - void WriteData (string fileName, string templateFileName, byte [] data, ref long readTime); - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyCompatibilityMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyCompatibilityMode.cs deleted file mode 100644 index 38c5e55eaf..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyCompatibilityMode.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.Configuration.MachineKeyCompatibilityMode -// -// Authors: -// Sebastien Pouliot -// -// Copyright (C) 2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Configuration { - - public enum MachineKeyCompatibilityMode { - Framework20SP1 = 0, - Framework20SP2 = 1 - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyValidation.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyValidation.cs deleted file mode 100644 index 47d7ef1be8..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/MachineKeyValidation.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.Configuration.MachineKeyValidation.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004, 2010 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public - enum MachineKeyValidation - { - MD5 = 0, - SHA1 = 1, - TripleDES = 2, - AES = 3, - HMACSHA256 = 4, - HMACSHA384 = 5, - HMACSHA512 = 6, - Custom = 7 - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/PagesEnableSessionState.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/PagesEnableSessionState.cs deleted file mode 100644 index fd4b3f9a33..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/PagesEnableSessionState.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.Configuration.PagesEnableSessionState.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; - -namespace System.Web.Configuration -{ - public - enum PagesEnableSessionState - { - False = 0, - ReadOnly = 1, - True = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComAuthenticationLevel.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComAuthenticationLevel.cs deleted file mode 100644 index 5fc0be9795..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComAuthenticationLevel.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.Configuration.ProcessModelComAuthenticationLevel.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum ProcessModelComAuthenticationLevel - { - None, - Call, - Connect, - Default, - Pkt, - PktIntegrity, - PktPrivacy - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComImpersonationLevel.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComImpersonationLevel.cs deleted file mode 100644 index dbc587fa83..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelComImpersonationLevel.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.Configuration.ProcessModelComImpersonationLevel.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum ProcessModelComImpersonationLevel - { - Default, - Anonymous, - Delegate, - Identify, - Impersonate - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelLogLevel.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelLogLevel.cs deleted file mode 100644 index 8c48062717..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/ProcessModelLogLevel.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Configuration.ProcessModelLogLevel.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum ProcessModelLogLevel - { - None, - All, - Errors - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/SerializationMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/SerializationMode.cs deleted file mode 100644 index 05ba2c86e3..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/SerializationMode.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.Configuration.SerializationMode.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; - -namespace System.Web.Configuration -{ - public enum SerializationMode - { - String = 0, - Xml = 1, - Binary = 2, - ProviderSpecific = 3 - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/SystemWebCachingSectionGroup.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/SystemWebCachingSectionGroup.cs deleted file mode 100644 index 3451f503c3..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/SystemWebCachingSectionGroup.cs +++ /dev/null @@ -1,63 +0,0 @@ -// -// System.Web.Configuration.SystemWebCachingSectionGroup -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Configuration; - - -namespace System.Web.Configuration { - - public sealed class SystemWebCachingSectionGroup : ConfigurationSectionGroup - { - [ConfigurationProperty ("cache")] - public CacheSection Cache { - get { return (CacheSection) Sections ["cache"];} - } - - [ConfigurationProperty ("outputCache")] - public OutputCacheSection OutputCache { - get { return (OutputCacheSection) Sections ["outputCache"];} - } - - [ConfigurationProperty ("outputCacheSettings")] - public OutputCacheSettingsSection OutputCacheSettings { - get { return (OutputCacheSettingsSection) Sections ["outputCacheSettings"];} - } - - [ConfigurationProperty ("sqlCacheDependency")] - public SqlCacheDependencySection SqlCacheDependency { - get { return (SqlCacheDependencySection) Sections ["sqlCacheDependency"];} - } - - } - -} - - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/TraceDisplayMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/TraceDisplayMode.cs deleted file mode 100644 index e3dc7170b2..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/TraceDisplayMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Configuration.TraceDisplayMode.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System.Resources; - -namespace System.Web.Configuration -{ - public enum TraceDisplayMode - { - SortByTime = 1, - SortByCategory = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/WebApplicationLevel.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/WebApplicationLevel.cs deleted file mode 100644 index a70dd9ade8..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/WebApplicationLevel.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Configuration.WebApplicationLevel enum -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.Configuration { - - public enum WebApplicationLevel { - AboveApplication = 10, - AtApplication = 20, - BelowApplication = 30 - } -} - diff --git a/mcs/class/System.Web/System.Web.Configuration_2.0/XhtmlConformanceMode.cs b/mcs/class/System.Web/System.Web.Configuration_2.0/XhtmlConformanceMode.cs deleted file mode 100644 index 279e0fe93f..0000000000 --- a/mcs/class/System.Web/System.Web.Configuration_2.0/XhtmlConformanceMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Configuration.XhtmlConformanceMode.cs -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.Configuration -{ - public enum XhtmlConformanceMode - { - Transitional, - Legacy, - Strict - } -} diff --git a/mcs/class/System.Web/System.Web.Hosting/IApplicationHost.cs b/mcs/class/System.Web/System.Web.Hosting/IApplicationHost.cs deleted file mode 100644 index ae6eb685c9..0000000000 --- a/mcs/class/System.Web/System.Web.Hosting/IApplicationHost.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.IConfigMapPath -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2009 Novell, Inc -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Security.Permissions; -using System.Web.Configuration; - -namespace System.Web.Hosting -{ - [AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public interface IApplicationHost - { - IConfigMapPathFactory GetConfigMapPathFactory (); - IntPtr GetConfigToken (); - string GetPhysicalPath (); - string GetSiteID (); - string GetSiteName (); - string GetVirtualPath (); - void MessageReceived (); - } -} diff --git a/mcs/class/System.Web/System.Web.Hosting/IRegisteredObject.cs b/mcs/class/System.Web/System.Web.Hosting/IRegisteredObject.cs deleted file mode 100644 index 4a309494b9..0000000000 --- a/mcs/class/System.Web/System.Web.Hosting/IRegisteredObject.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.Hosting.IRegisteredObject.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -using System; -using System.Runtime.InteropServices; - -namespace System.Web.Hosting -{ - public interface IRegisteredObject - { - void Stop (bool immediate); - } -} diff --git a/mcs/class/System.Web/System.Web.Profile/ProfileEventArgs.cs b/mcs/class/System.Web/System.Web.Profile/ProfileEventArgs.cs deleted file mode 100644 index 5e4813b958..0000000000 --- a/mcs/class/System.Web/System.Web.Profile/ProfileEventArgs.cs +++ /dev/null @@ -1,61 +0,0 @@ -// -// System.Web.UI.WebControls.ProfileEventArgs.cs -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.Profile -{ - - public sealed class ProfileEventArgs : EventArgs - { - public ProfileEventArgs (HttpContext context) - { - this.context = context; - } - - public HttpContext Context { - get { - return context; - } - } - - public ProfileBase Profile { - get { - return profile; - } - set { - profile = value; - } - } - - ProfileBase profile; - HttpContext context; - } - -} - diff --git a/mcs/class/System.Web/System.Web.Profile/ProfileEventHandler.cs b/mcs/class/System.Web/System.Web.Profile/ProfileEventHandler.cs deleted file mode 100644 index 8ee7aaae5a..0000000000 --- a/mcs/class/System.Web/System.Web.Profile/ProfileEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.ProfileEventHandler.cs -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.Profile -{ - public delegate void ProfileEventHandler (object sender, ProfileEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.Profile/ProfileGroupBase.cs b/mcs/class/System.Web/System.Web.Profile/ProfileGroupBase.cs deleted file mode 100644 index 9ac173f75d..0000000000 --- a/mcs/class/System.Web/System.Web.Profile/ProfileGroupBase.cs +++ /dev/null @@ -1,70 +0,0 @@ -// -// System.Web.UI.WebControls.ProfileGroupBase.cs -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// Vladimir Krasnov (vladimirk@mainsoft.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Configuration; - -namespace System.Web.Profile -{ - public class ProfileGroupBase - { - ProfileBase _parent = null; - string _name = null; - - public ProfileGroupBase () - { - } - - public void Init (ProfileBase parent, string myName) - { - _parent = parent; - _name = myName; - } - - public object GetPropertyValue (string propertyName) - { - return _parent.GetPropertyValue (_name + "." + propertyName); - } - - public void SetPropertyValue (string propertyName, object propertyValue) - { - _parent.SetPropertyValue (_name + "." + propertyName, propertyValue); - } - - public object this [string propertyName] { - get { - return GetPropertyValue (propertyName); - } - set { - SetPropertyValue (propertyName, value); - } - } - } -} - diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/HttpMethodConstraint.cs b/mcs/class/System.Web/System.Web.Routing/HttpMethodConstraint.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/HttpMethodConstraint.cs rename to mcs/class/System.Web/System.Web.Routing/HttpMethodConstraint.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/PatternParser.cs b/mcs/class/System.Web/System.Web.Routing/PatternParser.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/PatternParser.cs rename to mcs/class/System.Web/System.Web.Routing/PatternParser.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/PatternToken.cs b/mcs/class/System.Web/System.Web.Routing/PatternToken.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/PatternToken.cs rename to mcs/class/System.Web/System.Web.Routing/PatternToken.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/PatternTokenType.cs b/mcs/class/System.Web/System.Web.Routing/PatternTokenType.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/PatternTokenType.cs rename to mcs/class/System.Web/System.Web.Routing/PatternTokenType.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/Route.cs b/mcs/class/System.Web/System.Web.Routing/Route.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/Route.cs rename to mcs/class/System.Web/System.Web.Routing/Route.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs b/mcs/class/System.Web/System.Web.Routing/RouteCollection.cs similarity index 99% rename from mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs rename to mcs/class/System.Web/System.Web.Routing/RouteCollection.cs index d53c063441..a8ae41da81 100644 --- a/mcs/class/System.Web.Routing/System.Web.Routing/RouteCollection.cs +++ b/mcs/class/System.Web/System.Web.Routing/RouteCollection.cs @@ -107,8 +107,10 @@ namespace System.Web.Routing protected override void ClearItems () { - lock (GetWriteLock ()) + lock (GetWriteLock ()) { base.ClearItems (); + d.Clear (); + } } public IDisposable GetReadLock () diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteData.cs b/mcs/class/System.Web/System.Web.Routing/RouteData.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/RouteData.cs rename to mcs/class/System.Web/System.Web.Routing/RouteData.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionaryExtensions.cs b/mcs/class/System.Web/System.Web.Routing/RouteValueDictionaryExtensions.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/RouteValueDictionaryExtensions.cs rename to mcs/class/System.Web/System.Web.Routing/RouteValueDictionaryExtensions.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/StopRoutingHandler.cs b/mcs/class/System.Web/System.Web.Routing/StopRoutingHandler.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/StopRoutingHandler.cs rename to mcs/class/System.Web/System.Web.Routing/StopRoutingHandler.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/UrlRoutingHandler.cs b/mcs/class/System.Web/System.Web.Routing/UrlRoutingHandler.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/UrlRoutingHandler.cs rename to mcs/class/System.Web/System.Web.Routing/UrlRoutingHandler.cs diff --git a/mcs/class/System.Web.Routing/System.Web.Routing/UrlRoutingModule.cs b/mcs/class/System.Web/System.Web.Routing/UrlRoutingModule.cs similarity index 100% rename from mcs/class/System.Web.Routing/System.Web.Routing/UrlRoutingModule.cs rename to mcs/class/System.Web/System.Web.Routing/UrlRoutingModule.cs diff --git a/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs b/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs index ab273d4970..491d74f6c4 100644 --- a/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs +++ b/mcs/class/System.Web/System.Web.Security/FormsAuthentication.cs @@ -213,22 +213,19 @@ namespace System.Web.Security DateTime now = DateTime.Now; DateTime then; - if (createPersistentCookie) - then = now.AddYears (50); - else - then = now.AddMinutes (timeout); + if (createPersistentCookie) + then = now.AddMinutes(timeout); + else + then = DateTime.MinValue; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1, userName, now, - then, + createPersistentCookie?then:now.AddYears (50), createPersistentCookie, String.Empty, cookiePath); - if (!createPersistentCookie) - then = DateTime.MinValue; - HttpCookie cookie = new HttpCookie (cookieName, Encrypt (ticket), strCookiePath, then); if (requireSSL) cookie.Secure = true; diff --git a/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventArgs.cs b/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventArgs.cs deleted file mode 100644 index c1fc437c4f..0000000000 --- a/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventArgs.cs +++ /dev/null @@ -1,67 +0,0 @@ -// -// System.Web.Security.FormsAuthenticationEventArgs -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; -using System.Security.Principal; - -namespace System.Web.Security -{ - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public sealed class FormsAuthenticationEventArgs : EventArgs - { - IPrincipal user; - HttpContext context; - - public FormsAuthenticationEventArgs (HttpContext context) - { - this.context = context; - } - - public HttpContext Context - { - get { - return context; - } - } - - public IPrincipal User - { - get { - return user; - } - - [SecurityPermission (SecurityAction.Demand, ControlPrincipal = true)] - set { - user = value; - } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventHandler.cs b/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventHandler.cs deleted file mode 100644 index 710aa55ad1..0000000000 --- a/mcs/class/System.Web/System.Web.Security/FormsAuthenticationEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.Security.FormsAuthenticationEventHandler -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Security -{ - public delegate void FormsAuthenticationEventHandler (object sender, FormsAuthenticationEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventArgs.cs b/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventArgs.cs deleted file mode 100644 index 292e815803..0000000000 --- a/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventArgs.cs +++ /dev/null @@ -1,77 +0,0 @@ -// -// System.Web.Security.PassportAuthenticationEventArgs -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; -using System.Security.Principal; - -namespace System.Web.Security -{ - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [Obsolete ("This type is obsolete. The Passport authentication product is no longer supported and has been superseded by Live ID.")] - public sealed class PassportAuthenticationEventArgs : EventArgs - { - PassportIdentity identity; - HttpContext context; - IPrincipal user; - - public PassportAuthenticationEventArgs (PassportIdentity identity, HttpContext context) - { - this.identity = identity; - this.context = context; - } - - public HttpContext Context - { - get { - return context; - } - } - - public PassportIdentity Identity - { - get { - return identity; - } - } - - public IPrincipal User - { - get { - return user; - } - - [SecurityPermission (SecurityAction.Demand, ControlPrincipal = true)] - set { - user = value; - } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventHandler.cs b/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventHandler.cs deleted file mode 100644 index 3cad8b5640..0000000000 --- a/mcs/class/System.Web/System.Web.Security/PassportAuthenticationEventHandler.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Security.PassportAuthenticationEventHandler -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Security -{ - [Obsolete ("This type is obsolete. The Passport authentication product is no longer supported and has been superseded by Live ID.")] - public delegate void PassportAuthenticationEventHandler (object sender, - PassportAuthenticationEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.Security/RoleManagerEventArgs.cs b/mcs/class/System.Web/System.Web.Security/RoleManagerEventArgs.cs deleted file mode 100644 index 874e817351..0000000000 --- a/mcs/class/System.Web/System.Web.Security/RoleManagerEventArgs.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -// System.Web.Security.RoleManagerEventArgs -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; - -namespace System.Web.Security { - public sealed class RoleManagerEventArgs : EventArgs { - public RoleManagerEventArgs (HttpContext context) - { - this.context = context; - } - - HttpContext context; - public HttpContext Context { - get { return context; } - } - - bool rolesPopulated; - public bool RolesPopulated { - get { return rolesPopulated; } - set { rolesPopulated = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Security/RoleManagerEventHandler.cs b/mcs/class/System.Web/System.Web.Security/RoleManagerEventHandler.cs deleted file mode 100644 index ad0cabe7eb..0000000000 --- a/mcs/class/System.Web/System.Web.Security/RoleManagerEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.Security.RoleManagerEventHandler -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Security { - public delegate void RoleManagerEventHandler (object sender, RoleManagerEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventArgs.cs b/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventArgs.cs deleted file mode 100644 index 519ab293bf..0000000000 --- a/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventArgs.cs +++ /dev/null @@ -1,76 +0,0 @@ -// -// System.Web.Security.WindowsAuthenticationEventArgs -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; -using System.Security.Principal; - -namespace System.Web.Security -{ - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public sealed class WindowsAuthenticationEventArgs : EventArgs - { - WindowsIdentity identity; - HttpContext context; - IPrincipal user; - - public WindowsAuthenticationEventArgs (WindowsIdentity identity, HttpContext context) - { - this.identity = identity; - this.context = context; - } - - public System.Web.HttpContext Context - { - get { - return context; - } - } - - public WindowsIdentity Identity - { - get { - return identity; - } - } - - public IPrincipal User - { - get { - return user; - } - - [SecurityPermission (SecurityAction.Demand, ControlPrincipal = true)] - set { - user = value; - } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventHandler.cs b/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventHandler.cs deleted file mode 100644 index 29b67e2478..0000000000 --- a/mcs/class/System.Web/System.Web.Security/WindowsAuthenticationEventHandler.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.Security.WindowsAuthenticationEventHandler -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.Security -{ - public delegate void WindowsAuthenticationEventHandler (object sender, - WindowsAuthenticationEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.SessionState_2.0/IReadOnlySessionState.cs b/mcs/class/System.Web/System.Web.SessionState_2.0/IReadOnlySessionState.cs deleted file mode 100644 index 5d71a0d86b..0000000000 --- a/mcs/class/System.Web/System.Web.SessionState_2.0/IReadOnlySessionState.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.SessionState.IReadOnlySessionState -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.SessionState { -public interface IReadOnlySessionState : IRequiresSessionState -{ -} -} - diff --git a/mcs/class/System.Web/System.Web.SessionState_2.0/IRequiresSessionState.cs b/mcs/class/System.Web/System.Web.SessionState_2.0/IRequiresSessionState.cs deleted file mode 100644 index 4d0264d198..0000000000 --- a/mcs/class/System.Web/System.Web.SessionState_2.0/IRequiresSessionState.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.SessionState.IRequiresSessionState -// -// Authors: -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// -// (C) 2002 Ximian, Inc (http://www.ximian.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.SessionState { -public interface IRequiresSessionState -{ -} -} - diff --git a/mcs/class/System.Web/System.Web.SessionState_2.0/SessionStateBehavior.cs b/mcs/class/System.Web/System.Web.SessionState_2.0/SessionStateBehavior.cs deleted file mode 100644 index 488104f288..0000000000 --- a/mcs/class/System.Web/System.Web.SessionState_2.0/SessionStateBehavior.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// -// Authors: -// Marek Habersack -// - -// -// Copyright (C) 2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.SessionState -{ - public enum SessionStateBehavior - { - Default, - Required, - ReadOnly, - Disabled - } -} diff --git a/mcs/class/System.Web/System.Web.UI.Adapters/WmlPostFieldType.cs b/mcs/class/System.Web/System.Web.UI.Adapters/WmlPostFieldType.cs deleted file mode 100644 index c1cb48028b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.Adapters/WmlPostFieldType.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.Adapters.WmlPostFieldType.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.Adapters { - public enum WmlPostFieldType { - Normal = 0, - Submit = 1, - Variable = 2, - Raw = 3 - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITrackingPersonalizable.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITrackingPersonalizable.cs deleted file mode 100644 index bbb78fa03a..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITrackingPersonalizable.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.ITrackingPersonalizable.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.Collections.Specialized; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface ITrackingPersonalizable - { - void BeginLoad (); - void BeginSave (); - void EndLoad (); - void EndSave (); - - bool TracksChanges { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITransformerConfigurationControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITransformerConfigurationControl.cs deleted file mode 100644 index bae77eff99..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/ITransformerConfigurationControl.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.ITransformerConfigurationControl.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.UI.WebControls.WebParts -{ - public interface ITransformerConfigurationControl - { - event EventHandler Cancelled; - event EventHandler Succeeded; - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IVersioningPersonalizable.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IVersioningPersonalizable.cs deleted file mode 100644 index 861d633cad..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IVersioningPersonalizable.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IVersioningPersonalizable.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.Collections; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IVersioningPersonalizable - { - void Load (IDictionary unknownProperties); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebEditable.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebEditable.cs deleted file mode 100644 index f0c2f51dd4..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebEditable.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebEditable.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebEditable - { - EditorPartCollection CreateEditorParts (); - - object WebBrowsableObject { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPart.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPart.cs deleted file mode 100644 index 5ccf191cf9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPart.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPart.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPart - { - string CatalogIconImageUrl { get; set; } - string Description { get; set; } - string Subtitle { get; } - string Title { get; set; } - string TitleIconImageUrl { get; set; } - string TitleUrl { get; set; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartField.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartField.cs deleted file mode 100644 index 94f7d45e1c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartField.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPartField.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.ComponentModel; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPartField - { - void GetFieldValue (FieldCallback callback); - PropertyDescriptor Schema { get; } - } - - public delegate void FieldCallback (object fieldValue); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartHttpHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartHttpHandler.cs deleted file mode 100644 index d9b7ca9fe5..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartHttpHandler.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPartHttpHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPartHttpHandler - { - PersonalizationScope DesiredScope { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartParameters.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartParameters.cs deleted file mode 100644 index 739c9751c9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartParameters.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPartParameters.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.ComponentModel; -using System.Collections; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPartParameters - { - void SetConsumerSchema (PropertyDescriptorCollection schema); - - void GetParametersData (ParametersCallback callback); - PropertyDescriptorCollection Schema { get; } - } - - public delegate void ParametersCallback (IDictionary parametersData); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartRow.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartRow.cs deleted file mode 100644 index f5bcdcd5fa..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartRow.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPartRow.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.ComponentModel; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPartRow - { - void GetRowData (RowCallback callback); - PropertyDescriptorCollection Schema { get; } - } - - public delegate void RowCallback (object rowData); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartTable.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartTable.cs deleted file mode 100644 index 74fac3a2c6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/IWebPartTable.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.IWebPartTable.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -using System.Collections; -using System.ComponentModel; - -namespace System.Web.UI.WebControls.WebParts -{ - public interface IWebPartTable - { - PropertyDescriptorCollection Schema { get; } - void GetTableData (TableCallback callback); - } - - public delegate void TableCallback (ICollection tableData); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeState.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeState.cs deleted file mode 100644 index 034a7e53b1..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeState.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.PartChromeState.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls.WebParts { - public enum PartChromeState { - Normal = 0, - Minimized = 1 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeType.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeType.cs deleted file mode 100644 index d8a22ab140..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PartChromeType.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.PartChromeType.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls.WebParts { - public enum PartChromeType { - Default = 0, - TitleAndBorder = 1, - None = 2, - TitleOnly = 3, - BorderOnly = 4 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PersonalizationScope.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PersonalizationScope.cs deleted file mode 100644 index e951ca26e2..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/PersonalizationScope.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.PersonalizationScope.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls.WebParts { - public enum PersonalizationScope { - User = 0, - Shared = 1 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventHandler.cs deleted file mode 100644 index bfa5bb1a36..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartAuthorizationEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls.WebParts { - public delegate void WebPartAuthorizationEventHandler (object source, WebPartAuthorizationEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventArgs.cs deleted file mode 100644 index 6c082fa1dc..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventArgs.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartCancelEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.ComponentModel; - -namespace System.Web.UI.WebControls.WebParts -{ - public class WebPartCancelEventArgs : CancelEventArgs - { - WebPart part; - - public WebPartCancelEventArgs (WebPart part) - { - this.part = part; - } - - public WebPart WebPart { - get { return part; } - set { part = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventHandler.cs deleted file mode 100644 index 74b22bd478..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartCancelEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartCancelEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls.WebParts { - public delegate void WebPartCancelEventHandler (object source, WebPartCancelEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventArgs.cs deleted file mode 100644 index d033e6a26f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls.WebParts -{ - public class WebPartEventArgs : EventArgs - { - WebPart part; - - public WebPartEventArgs (WebPart part) - { - this.part = part; - } - - public WebPart WebPart { - get { return part; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventHandler.cs deleted file mode 100644 index a57c67d572..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls.WebParts { - public delegate void WebPartEventHandler (object source, WebPartEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartExportMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartExportMode.cs deleted file mode 100644 index c761b46ce5..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartExportMode.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartExportMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls.WebParts { - public enum WebPartExportMode { - None = 0, - All = 1, - NonSensitiveData = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartHelpMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartHelpMode.cs deleted file mode 100644 index cb5acaa22f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartHelpMode.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartHelpMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls.WebParts { - public enum WebPartHelpMode { - Modal = 0, - Modeless = 1, - Navigate = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventArgs.cs deleted file mode 100644 index 3a33897f8f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventArgs.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartVerbsEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls.WebParts -{ - public class WebPartVerbsEventArgs : EventArgs - { - WebPartVerbCollection verbs; - - public WebPartVerbsEventArgs () - {} - - public WebPartVerbsEventArgs (WebPartVerbCollection verbs) - { - this.verbs = verbs; - } - - public WebPartVerbCollection Verbs { - get { return verbs; } - set { verbs = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventHandler.cs deleted file mode 100644 index 302abe81c6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls.WebParts/WebPartVerbsEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.WebParts.WebPartVerbsEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls.WebParts { - public delegate void WebPartVerbsEventHandler (object source, WebPartVerbsEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/AdCreatedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/AdCreatedEventHandler.cs deleted file mode 100644 index 87cc6a22d3..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/AdCreatedEventHandler.cs +++ /dev/null @@ -1,31 +0,0 @@ -// -// System.Web.UI.WebControls.AdCreatedEventHandler -// -// Author: -// Ben Maurer -// -// (c) 2005 Novell -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void AdCreatedEventHandler (object sender, AdCreatedEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventArgs.cs deleted file mode 100644 index 57ecfb8185..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventArgs.cs +++ /dev/null @@ -1,52 +0,0 @@ -// -// System.Web.UI.WebControls.AuthenticateEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class AuthenticateEventArgs : EventArgs - { - bool authenticated; - - public AuthenticateEventArgs (): this (false) - { - } - - public AuthenticateEventArgs (bool authenticated) - { - this.authenticated = authenticated; - } - - public bool Authenticated { - get { return authenticated; } - set { authenticated = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventHandler.cs deleted file mode 100644 index d7643b4fcd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/AuthenticateEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.AuthenticateEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void AuthenticateEventHandler (object sender, AuthenticateEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/AutoCompleteType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/AutoCompleteType.cs deleted file mode 100644 index 2f9adb987b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/AutoCompleteType.cs +++ /dev/null @@ -1,69 +0,0 @@ -// -// System.Web.UI.WebControls.AutoCompleteType.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public enum AutoCompleteType - { - None = 0, - Disabled = 1, - Cellular = 2, - Company = 3, - Department = 4, - DisplayName = 5, - Email = 6, - FirstName = 7, - Gender = 8, - HomeCity = 9, - HomeCountryRegion = 10, - HomeFax = 11, - HomePhone = 12, - HomeState = 13, - HomeStreetAddress = 14, - HomeZipCode = 15, - Homepage = 16, - JobTitle = 17, - LastName = 18, - MiddleName = 19, - Notes = 20, - Office = 21, - Pager = 22, - BusinessCity = 23, - BusinessCountryRegion = 24, - BusinessFax = 25, - BusinessPhone = 26, - BusinessState = 27, - BusinessStreetAddress = 28, - BusinessUrl = 29, - BusinessZipCode = 30, - Search = 31, - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/BorderStyle.cs b/mcs/class/System.Web/System.Web.UI.WebControls/BorderStyle.cs deleted file mode 100644 index c3d11efacc..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/BorderStyle.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.BorderStyle.cs -// -// Author: -// Dick Porter -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public enum BorderStyle - { - NotSet, - None, - Dotted, - Dashed, - Solid, - Double, - Groove, - Ridge, - Inset, - Outset - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventArgs.cs deleted file mode 100644 index c39ba5daec..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.WebControls.BulletedListEventArgs.cs -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public class BulletedListEventArgs : EventArgs - { - int index; - - public BulletedListEventArgs (int index) - { - this.index = index; - } - - public int Index { get { return index; } } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventHandler.cs deleted file mode 100644 index f6a44d2b06..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/BulletedListEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.BulletedListEventHandler.cs -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void BulletedListEventHandler (object sender, BulletedListEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumnType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumnType.cs deleted file mode 100644 index b18eeb933b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonColumnType.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.ButtonColumnType.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls -{ - public enum ButtonColumnType - { - LinkButton, - PushButton - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ButtonType.cs deleted file mode 100644 index afcaa14fe7..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ButtonType.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.ButtonType.cs -// -// Author: Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum ButtonType - { - Button = 0, - Image = 1, - Link = 2, - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CalendarSelectionMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CalendarSelectionMode.cs deleted file mode 100644 index 3820c52ee9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CalendarSelectionMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.CalendarSelectionMode.cs -// -// Author: -// Jordi Mas i Hernandez -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public enum CalendarSelectionMode - { - None, - Day, - DayWeek, - DayWeekMonth - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CheckBox.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CheckBox.cs index 905740a1ea..27c3a7fb9d 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CheckBox.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/CheckBox.cs @@ -370,7 +370,11 @@ namespace System.Web.UI.WebControls Page page = Page; string onclick = page != null ? page.ClientScript.GetPostBackEventReference (GetPostBackOptions (), true) : String.Empty; onclick = String.Concat ("setTimeout('", onclick.Replace ("\\", "\\\\").Replace ("'", "\\'"), "', 0)"); - w.AddAttribute (HtmlTextWriterAttribute.Onclick, BuildScriptAttribute ("onclick", onclick)); + if (common_attrs != null && common_attrs ["onclick"] != null) { + onclick = ClientScriptManager.EnsureEndsWithSemicolon (common_attrs ["onclick"]) + onclick; + common_attrs.Remove ("onclick"); + } + w.AddAttribute (HtmlTextWriterAttribute.Onclick, onclick); } if (AccessKey.Length > 0) diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventArgs.cs deleted file mode 100644 index e3cc9439a4..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventArgs.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.UI.WebControls.CommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public class CommandEventArgs : EventArgs - { - object argument; - string name; - - public CommandEventArgs (CommandEventArgs e) - { - this.argument = e.CommandArgument; - this.name = e.CommandName; - } - - public CommandEventArgs (string name, object argument) - { - this.argument = argument; - this.name = name; - } - - public object CommandArgument { - get { return argument; } - } - - public string CommandName { - get { return name; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventHandler.cs deleted file mode 100644 index 1ed9272800..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CommandEventHandler.cs +++ /dev/null @@ -1,31 +0,0 @@ -// -// System.Web.UI.WebControls.CommandEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void CommandEventHandler (object sender, CommandEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ContentDirection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ContentDirection.cs deleted file mode 100644 index 7dd164ed3b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ContentDirection.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.ContentDirection.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum ContentDirection - { - NotSet = 0, - LeftToRight = 1, - RightToLeft = 2 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventArgs.cs deleted file mode 100644 index 580c655aef..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.CreateUserErrorEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System.Web.Security; - -namespace System.Web.UI.WebControls -{ - public class CreateUserErrorEventArgs : EventArgs - { - MembershipCreateStatus status; - - public CreateUserErrorEventArgs (MembershipCreateStatus status) - { - this.status = status; - } - - public MembershipCreateStatus CreateUserError { - get { return status; } - set { status = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventHandler.cs deleted file mode 100644 index 708b20479b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/CreateUserErrorEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.CreateUserErrorEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void CreateUserErrorEventHandler (object sender, CreateUserErrorEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataBoundControlMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataBoundControlMode.cs deleted file mode 100644 index df8d68f735..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataBoundControlMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.DataBoundControlMode -// -// Author: -// Atsushi Enomoto -// -// Copyright (c) 2008-2010 Novell, Inc (http://novell.com/) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public enum DataBoundControlMode - { - ReadOnly, - Edit, - Insert - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlCellType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataControlCellType.cs deleted file mode 100644 index bda308a1e3..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlCellType.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.UI.WebControls.DataControlCellType.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -namespace System.Web.UI.WebControls -{ - public enum DataControlCellType - { - Header = 0, - Footer = 1, - DataCell = 2 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowState.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowState.cs deleted file mode 100644 index cf0ecfad1c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowState.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.WebControls.DataControlRowState.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -namespace System.Web.UI.WebControls -{ - [Flags] - public enum DataControlRowState - { - Normal = 0, - Alternate = 1, - Selected = 2, - Edit = 4, - Insert = 8 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowType.cs deleted file mode 100644 index 6d02c7955f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataControlRowType.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.WebControls.DataControlRowType.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -namespace System.Web.UI.WebControls -{ - public enum DataControlRowType - { - Header = 0, - Footer = 1, - DataRow = 2, - Separator = 3, - Pager = 4, - EmptyDataRow = 5 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventArgs.cs deleted file mode 100644 index 8c29dfca54..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridCommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class DataGridCommandEventArgs : CommandEventArgs - { - DataGridItem item; - object source; - - public DataGridCommandEventArgs (DataGridItem item, object source, CommandEventArgs args) - : base (args) - { - this.item = item; - this.source = source; - } - - public DataGridItem Item { - get { return item; } - } - - public object CommandSource { - get { return source; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventHandler.cs deleted file mode 100644 index a9d198e55a..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridCommandEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridCommandEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DataGridCommandEventHandler ( - object sender, - DataGridCommandEventArgs e); - -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventArgs.cs deleted file mode 100644 index 54698827e2..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridItemEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public class DataGridItemEventArgs : EventArgs - { - DataGridItem item; - - public DataGridItemEventArgs (DataGridItem item) - { - this.item = item; - } - - public DataGridItem Item { - get { return item; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventHandler.cs deleted file mode 100644 index 7047c043f8..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridItemEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridItemEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DataGridItemEventHandler ( - object sender, - DataGridItemEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventArgs.cs deleted file mode 100644 index fbcccf7774..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridPageChangedEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class DataGridPageChangedEventArgs : EventArgs - { - object source; - int index; - - public DataGridPageChangedEventArgs (object source, int index) - { - this.source = source; - this.index = index; - } - - public object CommandSource { - get { return source; } - } - - public int NewPageIndex { - get { return index; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventHandler.cs deleted file mode 100644 index ce8adc8b03..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridPageChangedEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridPageChangedEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DataGridPageChangedEventHandler ( - object sender, - DataGridPageChangedEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventArgs.cs deleted file mode 100644 index c85d7df5b6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventArgs.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridSortCommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.UI.WebControls; - -namespace System.Web.UI.WebControls -{ - public class DataGridSortCommandEventArgs : EventArgs - { - object source; - string expr; - - public DataGridSortCommandEventArgs (object source, DataGridCommandEventArgs args) - { - this.source = source; - this.expr = args.CommandArgument.ToString (); - } - - public object CommandSource { - get { return source; } - } - - public string SortExpression { - get { return expr; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventHandler.cs deleted file mode 100644 index b88303be53..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataGridSortCommandEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.DataGridSortCommandEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DataGridSortCommandEventHandler ( - object sender, - DataGridSortCommandEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventArgs.cs deleted file mode 100644 index 083d82ffef..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.DataListCommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class DataListCommandEventArgs : CommandEventArgs - { - DataListItem item; - object source; - - public DataListCommandEventArgs (DataListItem item, object source, CommandEventArgs args) - : base (args) - { - this.item = item; - this.source = source; - } - - public DataListItem Item { - get { return item; } - } - - public object CommandSource { - get { return source; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventHandler.cs deleted file mode 100644 index b36c526319..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataListCommandEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DataListCommandEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DataListCommandEventHandler ( - object sender, - DataListCommandEventArgs e); - -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventArgs.cs deleted file mode 100644 index 666487f5fc..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventArgs.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.WebControls.DataListCommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class DataListItemEventArgs : EventArgs - { - DataListItem item; - - public DataListItemEventArgs (DataListItem item) - { - this.item = item; - } - - public DataListItem Item { - get { return item; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventHandler.cs deleted file mode 100644 index 5fb9d3c79a..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DataListItemEventHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// -// System.Web.UI.WebControls.DataListItemEventHandler -// -// Author: Ben Maurer -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void DataListItemEventHandler (object sender, DataListItemEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DayNameFormat.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DayNameFormat.cs deleted file mode 100644 index e7e00756de..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DayNameFormat.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.DayNameFormat.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls -{ - public enum DayNameFormat - { - Full, - Short, - FirstLetter, - FirstTwoLetters, - Shortest - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DayRenderEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DayRenderEventHandler.cs deleted file mode 100644 index 022c8e29fe..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DayRenderEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.DayRenderEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void DayRenderEventHandler ( - object sender, - DayRenderEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventArgs.cs deleted file mode 100644 index b45abd539b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventArgs.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewCommandEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class DetailsViewCommandEventArgs : CommandEventArgs - { - object source; - - public DetailsViewCommandEventArgs (object source, CommandEventArgs arguments) : base (arguments) - { - this.source = source; - } - - public object CommandSource { - get { return source; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventHandler.cs deleted file mode 100644 index da199dd820..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewCommandEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewCommandEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewCommandEventHandler (object sender, DetailsViewCommandEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeleteEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeleteEventHandler.cs deleted file mode 100644 index 8ce41dc306..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeleteEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewDeleteEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewDeleteEventHandler (object sender, DetailsViewDeleteEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeletedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeletedEventHandler.cs deleted file mode 100644 index ff6007a1b2..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewDeletedEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewDeletedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewDeletedEventHandler (object sender, DetailsViewDeletedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertEventHandler.cs deleted file mode 100644 index c9a386553a..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewInsertEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewInsertEventHandler (object sender, DetailsViewInsertEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertedEventHandler.cs deleted file mode 100644 index 4f9fa828f6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewInsertedEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewInsertedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewInsertedEventHandler (object sender, DetailsViewInsertedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewMode.cs deleted file mode 100644 index 8f2904b0eb..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum DetailsViewMode - { - ReadOnly = 0, - Edit = 1, - Insert = 2 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventArgs.cs deleted file mode 100644 index ff3bbecc13..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventArgs.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewModeEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class DetailsViewModeEventArgs : CancelEventArgs - { - DetailsViewMode mode; - bool cancelEdit; - - public DetailsViewModeEventArgs (DetailsViewMode mode, bool cancelingEdit) - { - this.mode = mode; - this.cancelEdit = cancelingEdit; - } - - public bool CancelingEdit { - get { return cancelEdit; } - } - - public DetailsViewMode NewMode { - get { return mode; } - set { mode = value;} - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventHandler.cs deleted file mode 100644 index 817c6f3c3d..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewModeEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewModeEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewModeEventHandler (object sender, DetailsViewModeEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventArgs.cs deleted file mode 100644 index 9ea2972d11..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewPageEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class DetailsViewPageEventArgs : CancelEventArgs - { - private int pageIndex; - - public DetailsViewPageEventArgs (int pageIndex ) - { - this.pageIndex = pageIndex; - } - - public int NewPageIndex { - get { return pageIndex; } - set { pageIndex = value;} - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventHandler.cs deleted file mode 100644 index bc1784689b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewPageEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewPageEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewPageEventHandler (object sender, DetailsViewPageEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdateEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdateEventHandler.cs deleted file mode 100644 index 07f14615d4..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdateEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewUpdateEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewUpdateEventHandler (object sender, DetailsViewUpdateEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdatedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdatedEventHandler.cs deleted file mode 100644 index b3cfdd8fef..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/DetailsViewUpdatedEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.DetailsViewUpdatedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void DetailsViewUpdatedEventHandler (object sender, DetailsViewUpdatedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FirstDayOfWeek.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FirstDayOfWeek.cs deleted file mode 100644 index 540daba26e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FirstDayOfWeek.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (c) 2005 Novell, Inc. (http://www.novell.com) -// -// Authors: -// Peter Bartok (pbartok@novell.com) -// -// - -namespace System.Web.UI.WebControls { - public enum FirstDayOfWeek { - Sunday = 0, - Monday = 1, - Tuesday = 2, - Wednesday = 3, - Thursday = 4, - Friday = 5, - Saturday = 6, - Default = 7 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FontSize.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FontSize.cs deleted file mode 100644 index 8ef4eae602..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FontSize.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -// System.Web.UI.WebControls.FontSize.cs -// -// Authors: -// Miguel de Icaza (miguel@novell.com) -// -// (C) 2005 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public enum FontSize { - NotSet, - AsUnit, - Smaller, - Larger, - XXSmall, - XSmall, - Small, - Medium, - Large, - XLarge, - XXLarge - - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewCommandEventHandler.cs deleted file mode 100644 index 1c34d9ec89..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewCommandEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewCommandEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewCommandEventHandler (object sender, FormViewCommandEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeleteEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeleteEventHandler.cs deleted file mode 100644 index 13cd81e55c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeleteEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewDeleteEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewDeleteEventHandler (object sender, FormViewDeleteEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeletedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeletedEventHandler.cs deleted file mode 100644 index a35e16142c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewDeletedEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewDeletedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void FormViewDeletedEventHandler (object sender, FormViewDeletedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertEventHandler.cs deleted file mode 100644 index e7de4799e9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewInsertEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewInsertEventHandler (object sender, FormViewInsertEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertedEventHandler.cs deleted file mode 100644 index 6b835cb6b7..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewInsertedEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewInsertedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewInsertedEventHandler (object sender, FormViewInsertedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewMode.cs deleted file mode 100644 index 4858c4eece..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum FormViewMode - { - ReadOnly = 0, - Edit = 1, - Insert = 2 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventArgs.cs deleted file mode 100644 index 68a6f26ce9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventArgs.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewModeEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class FormViewModeEventArgs : CancelEventArgs - { - FormViewMode mode; - bool cancelEdit; - - public FormViewModeEventArgs (FormViewMode mode, bool cancelingEdit) - { - this.mode = mode; - this.cancelEdit = cancelingEdit; - } - - public bool CancelingEdit { - get { return cancelEdit; } - } - - public FormViewMode NewMode { - get { return mode; } - set { mode = value;} - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventHandler.cs deleted file mode 100644 index 0cdee2368c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewModeEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebContrls.FormViewModeEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void FormViewModeEventHandler (object sender, FormViewModeEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventArgs.cs deleted file mode 100644 index b5f9f4392d..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewPageEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class FormViewPageEventArgs : CancelEventArgs - { - int pageIndex; - - public FormViewPageEventArgs (int pageIndex ) - { - this.pageIndex = pageIndex; - } - - public int NewPageIndex { - get { return pageIndex; } - set { pageIndex = value;} - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventHandler.cs deleted file mode 100644 index 9a77a43cb5..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewPageEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewPageEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewPageEventHandler (object sender, FormViewPageEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdateEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdateEventHandler.cs deleted file mode 100644 index 0b1b8c5838..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdateEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebContrls.FormViewUpdateEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void FormViewUpdateEventHandler (object sender, FormViewUpdateEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdatedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdatedEventHandler.cs deleted file mode 100644 index fa8df60d66..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/FormViewUpdatedEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.FormViewUpdatedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void FormViewUpdatedEventHandler (object sender, FormViewUpdatedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridLines.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridLines.cs deleted file mode 100644 index ad247e4fb8..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridLines.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.HtmlControls.GridLines.cs -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public enum GridLines { - None, - Horizontal, - Vertical, - Both - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventArgs.cs deleted file mode 100644 index 5d26d91310..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewCancelEditEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class GridViewCancelEditEventArgs : CancelEventArgs - { - int rowIndex; - - public GridViewCancelEditEventArgs (int index) - { - this.rowIndex = index; - } - - public int RowIndex { - get { return rowIndex; } - } - - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventHandler.cs deleted file mode 100644 index 7a982462ff..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCancelEditEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewCancelEditEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void GridViewCancelEditEventHandler (object sender, GridViewCancelEditEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventArgs.cs deleted file mode 100644 index 2a205b3c6d..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventArgs.cs +++ /dev/null @@ -1,59 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewCommandEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class GridViewCommandEventArgs : CommandEventArgs - { - object source; - GridViewRow row; - - public GridViewCommandEventArgs (object source, CommandEventArgs arguments) : base (arguments) - { - this.source = source; - this.row = null; - } - - public GridViewCommandEventArgs (GridViewRow row, object source, CommandEventArgs arguments) : base (arguments) - { - this.source = source; - this.row = row; - } - - public object CommandSource { - get { return source; } - } - - internal GridViewRow Row { - get { return row; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventHandler.cs deleted file mode 100644 index 807aec7862..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewCommandEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewCommandEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void GridViewCommandEventHandler (object sender, GridViewCommandEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeleteEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeleteEventHandler.cs deleted file mode 100644 index 42bf97161b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeleteEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewDeleteEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewDeleteEventHandler (object sender, GridViewDeleteEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeletedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeletedEventHandler.cs deleted file mode 100644 index cb17de0b45..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewDeletedEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewDeletedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewDeletedEventHandler (object sender, GridViewDeletedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventArgs.cs deleted file mode 100644 index ecc38b847a..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewEditEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class GridViewEditEventArgs : CancelEventArgs - { - public GridViewEditEventArgs (int editIndex) - { - this.NewEditIndex = editIndex; - } - - public int NewEditIndex { - get; - set; - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventHandler.cs deleted file mode 100644 index 621ffd9695..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewEditEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewEditEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewEditEventHandler (object sender, GridViewEditEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventArgs.cs deleted file mode 100644 index 68ff1ffb51..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewPageEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class GridViewPageEventArgs : CancelEventArgs - { - public GridViewPageEventArgs (int pageIndex ) - { - this.NewPageIndex = pageIndex; - } - - public int NewPageIndex { - get; - set; - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventHandler.cs deleted file mode 100644 index 39b638ae32..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewPageEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewPageEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewPageEventHandler (object sender, GridViewPageEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventArgs.cs deleted file mode 100644 index e1bffc6cdf..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewRowEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class GridViewRowEventArgs : EventArgs - { - GridViewRow row; - - public GridViewRowEventArgs (GridViewRow row ) - { - this.row = row; - } - - public GridViewRow Row { - get { return row; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventHandler.cs deleted file mode 100644 index 3ab9a8e123..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewRowEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewRowEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls -{ - public delegate void GridViewRowEventHandler (object sender, GridViewRowEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventArgs.cs deleted file mode 100644 index 93d96fe0fd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewSelectEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class GridViewSelectEventArgs : CancelEventArgs - { - public GridViewSelectEventArgs (int selectedIndex ) - { - this.NewSelectedIndex = selectedIndex; - } - - public int NewSelectedIndex { - get; - set; - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventHandler.cs deleted file mode 100644 index 62b2ca2e07..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSelectEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewSelectEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewSelectEventHandler (object sender, GridViewSelectEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventArgs.cs deleted file mode 100644 index 752aa45116..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventArgs.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewSortEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class GridViewSortEventArgs : CancelEventArgs - { - public GridViewSortEventArgs (string expression, SortDirection sortDirection) - { - this.SortExpression = expression; - this.SortDirection = sortDirection; - } - - public string SortExpression { - get; - set; - } - - public SortDirection SortDirection { - get; - set; - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventHandler.cs deleted file mode 100644 index a285525066..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewSortEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewSortEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewSortEventHandler (object sender, GridViewSortEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdateEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdateEventHandler.cs deleted file mode 100644 index 7161bd4e16..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdateEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebContrls.GridViewUpdateEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewUpdateEventHandler (object sender, GridViewUpdateEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdatedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdatedEventHandler.cs deleted file mode 100644 index 94abf598a4..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/GridViewUpdatedEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.GridViewUpdatedEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void GridViewUpdatedEventHandler (object sender, GridViewUpdatedEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/HorizontalAlign.cs b/mcs/class/System.Web/System.Web.UI.WebControls/HorizontalAlign.cs deleted file mode 100644 index 8b412028f3..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/HorizontalAlign.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.WebControls.HorizontalAlign.cs -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls { - - [TypeConverter (typeof (System.Web.UI.WebControls.HorizontalAlignConverter))] - public enum HorizontalAlign { - NotSet, - Left, - Center, - Right, - Justify - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/HotSpotMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/HotSpotMode.cs deleted file mode 100644 index 0ee5fa6abe..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/HotSpotMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.HotSpotMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum HotSpotMode - { - NotSet = 0, - Navigate = 1, - PostBack = 2, - Inactive = 3 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IButtonControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IButtonControl.cs deleted file mode 100644 index 6d591af192..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IButtonControl.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.IButtonControl.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls -{ - public interface IButtonControl - { - bool CausesValidation { get; set; } - string CommandArgument { get; set; } - string CommandName { get; set; } - string PostBackUrl { get; set; } - string Text { get; set; } - string ValidationGroup { get; set; } - - event EventHandler Click; - event CommandEventHandler Command; - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ICallbackContainer.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ICallbackContainer.cs deleted file mode 100644 index ea46c05957..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ICallbackContainer.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.ICallbackContainer.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls -{ - public interface ICallbackContainer - { - string GetCallbackScript (IButtonControl control, string argument); - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ICompositeControlDesignerAccessor.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ICompositeControlDesignerAccessor.cs deleted file mode 100644 index a8317edb0e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ICompositeControlDesignerAccessor.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls. ICompositeControlDesignerAccessor.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System; - -namespace System.Web.UI.WebControls -{ - public interface ICompositeControlDesignerAccessor - { - void RecreateChildControls (); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundControl.cs deleted file mode 100644 index 2504d41ee1..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundControl.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.IDataBoundControl -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2009 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Collections; -using System.Security.Permissions; -using System.Web.UI.WebControls; - -namespace System.Web.UI.WebControls -{ - public interface IDataBoundControl - { - string[] DataKeyNames { get; set; } - string DataMember { get; set; } - object DataSource { get; set; } - string DataSourceID { get; set; } - IDataSource DataSourceObject { get; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundItemControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundItemControl.cs deleted file mode 100644 index 71e8612b84..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundItemControl.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.WebControls.IDataBoundItemControl -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2009 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Collections; -using System.Security.Permissions; -using System.Web.UI.WebControls; - -namespace System.Web.UI.WebControls -{ - public interface IDataBoundItemControl : IDataBoundControl - { - DataKey DataKey { get; } - DataBoundControlMode Mode { get; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundListControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundListControl.cs deleted file mode 100644 index 4982e2da29..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IDataBoundListControl.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.IDataBoundListControl -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2009 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Collections; -using System.Security.Permissions; -using System.Web.UI.WebControls; - -namespace System.Web.UI.WebControls -{ - public interface IDataBoundListControl : IDataBoundControl - { - string[] ClientIDRowSuffix { get; set; } - DataKeyArray DataKeys { get; } - bool EnablePersistedSelection { get; set; } - DataKey SelectedDataKey { get; } - int SelectedIndex { get; set; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IFieldControl.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IFieldControl.cs deleted file mode 100644 index 840faf07d0..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IFieldControl.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.IFieldControl -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2009 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Collections; -using System.Security.Permissions; -using System.Web.UI.WebControls; - -namespace System.Web.UI.WebControls -{ - public interface IFieldControl - { - IAutoFieldGenerator FieldsGenerator { get; set; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IPersistedSelector.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IPersistedSelector.cs deleted file mode 100644 index 85a62d5df9..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IPersistedSelector.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.WebControls.IPersistedSelector.cs -// -// Author: -// Atsushi Enomoto -// -// (C) 2008-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.UI.WebControls -{ - public interface IPersistedSelector - { - DataKey DataKey { get; set; } - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/IRepeatInfoUser.cs b/mcs/class/System.Web/System.Web.UI.WebControls/IRepeatInfoUser.cs deleted file mode 100644 index 3348d9ad63..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/IRepeatInfoUser.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.IRepeatInfoUser -// -// Author: -// Ben Maurer -// -// (c) 2005 Novell -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public interface IRepeatInfoUser { - - Style GetItemStyle (ListItemType itemType, int repeatIndex); - void RenderItem (WebControls.ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer); - - bool HasFooter { - get; - } - bool HasHeader { - get; - } - bool HasSeparators { - get; - } - int RepeatedItemCount { - get; - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ImageAlign.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ImageAlign.cs deleted file mode 100644 index a8bd885439..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ImageAlign.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.WebControls.ImageAlign.cs -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public enum ImageAlign { - NotSet, - Left, - Right, - Baseline, - Top, - Middle, - Bottom, - AbsBottom, - AbsMiddle, - TextTop - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventArgs.cs deleted file mode 100644 index 9327e67e9b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.ImageMapEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public class ImageMapEventArgs : EventArgs - { - string value; - - public ImageMapEventArgs (string value) - { - this.value = value; - } - - public string PostBackValue { - get { return value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventHandler.cs deleted file mode 100644 index ad0566f4bd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ImageMapEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.ImageMapEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls -{ - public delegate void ImageMapEventHandler (object sender, ImageMapEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ListItemType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ListItemType.cs deleted file mode 100644 index 539cad6956..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ListItemType.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.WebControls.ListItemType.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ListItemType - { - Header, - Footer, - Item, - AlternatingItem, - SelectedItem, - EditItem, - Separator, - Pager - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ListSelectionMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ListSelectionMode.cs deleted file mode 100644 index 64ee4865aa..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ListSelectionMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.ListItemType.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ListSelectionMode - { - Single, - Multiple - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/LiteralMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/LiteralMode.cs deleted file mode 100644 index c23f344ddd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/LiteralMode.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.LiteralMode.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum LiteralMode { - Transform = 0, - PassThrough = 1, - Encode = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventArgs.cs deleted file mode 100644 index 6e72687ca2..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventArgs.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -// System.Web.UI.WebControls.LoginCancelEventArgs class -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls { - - public class LoginCancelEventArgs : EventArgs - { - bool cancel; - - public LoginCancelEventArgs () - { - cancel = false; - } - - public LoginCancelEventArgs (bool cancel) - { - this.cancel = cancel; - } - - public bool Cancel { - get { return cancel; } - set { cancel = value; } - } - - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventHandler.cs deleted file mode 100644 index 8953b486e6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/LoginCancelEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.LoginCancelEventHandler delegate -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls { - - public delegate void LoginCancelEventHandler (object sender, LoginCancelEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/LoginFailureAction.cs b/mcs/class/System.Web/System.Web.UI.WebControls/LoginFailureAction.cs deleted file mode 100644 index e4fb167152..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/LoginFailureAction.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// System.Web.UI.WebControls.LoginFailureAction.cs -// -// Author: Duncan Mak (duncan@ximian.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - - public enum LoginFailureAction - { - Refresh = 0, - RedirectToLoginPage = 1, - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/LogoutAction.cs b/mcs/class/System.Web/System.Web.UI.WebControls/LogoutAction.cs deleted file mode 100644 index e942866351..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/LogoutAction.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.LogoutAction.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum LogoutAction { - Refresh = 0, - Redirect = 1, - RedirectToLoginPage = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventArgs.cs deleted file mode 100644 index 778f037e3d..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.MalMessageEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Net.Mail; - -namespace System.Web.UI.WebControls -{ - public class MailMessageEventArgs : LoginCancelEventArgs - { - MailMessage message; - - public MailMessageEventArgs (MailMessage message) - { - this.message = message; - } - - public MailMessage Message { - get { return message; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventHandler.cs deleted file mode 100644 index a9baaf1bce..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MailMessageEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebControls.MailMessageEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void MailMessageEventHandler (object sender, MailMessageEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventArgs.cs deleted file mode 100644 index 83da6ea863..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventArgs.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -// System.Web.UI.WebControls.MenuEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls -{ - public sealed class MenuEventArgs : CommandEventArgs - { - MenuItem item; - object source; - - public MenuEventArgs (MenuItem item) : base ("", null) - { - this.item = item; - this.source = null; - } - - public MenuEventArgs (MenuItem item, object source, CommandEventArgs arguments) : base (arguments) - { - this.item = item; - this.source = source; - } - - public object CommandSource { - get { return source; } - } - - public MenuItem Item { - get { return item; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventHandler.cs deleted file mode 100644 index 0286227fe4..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MenuEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebControls.MenuEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void MenuEventHandler (object sender, MenuEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MenuRenderingMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MenuRenderingMode.cs deleted file mode 100644 index 9baa741270..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MenuRenderingMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2010 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls -{ - public enum MenuRenderingMode - { - Default, - Table, - List, - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventArgs.cs deleted file mode 100644 index 0cfc749dfb..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventArgs.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// System.Web.UI.WebControls.MonthChangedEventArgs.cs -// -// Authors: -// Jackson Harper (jackson@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI.WebControls { - - // CAS - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public class MonthChangedEventArgs { - - DateTime new_date; - DateTime prev_date; - - public MonthChangedEventArgs (DateTime newDate, DateTime previousDate) - { - new_date = newDate; - prev_date = previousDate; - } - - public DateTime NewDate { - get { return new_date; } - } - - public DateTime PreviousDate { - get { return prev_date; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventHandler.cs deleted file mode 100644 index 1bc2cec95c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/MonthChangedEventHandler.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.MonthChangedEventHandler.cs -// -// Authors: -// Jackson Harper (jackson@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public delegate void MonthChangedEventHandler (object sender, - MonthChangedEventArgs e); - -} - - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/NextPrevFormat.cs b/mcs/class/System.Web/System.Web.UI.WebControls/NextPrevFormat.cs deleted file mode 100644 index 0fa4064bb3..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/NextPrevFormat.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.NextPrevFormat.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum NextPrevFormat - { - CustomText, - ShortMonth, - FullMonth - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventArgs.cs deleted file mode 100644 index 68ca641d4f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceDisposingEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceDisposingEventArgs : CancelEventArgs - { - object objectInstance; - - public ObjectDataSourceDisposingEventArgs (object objectInstance) - { - this.objectInstance = objectInstance; - } - - public object ObjectInstance { - get { return objectInstance; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventHandler.cs deleted file mode 100644 index f90e1b1497..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceDisposingEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebContrls.ObjectDataSourceDisposingEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void ObjectDataSourceDisposingEventHandler (object sender, ObjectDataSourceDisposingEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceEventArgs.cs deleted file mode 100644 index ea48fd7334..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceEventArgs : EventArgs - { - object objectInstance; - - public ObjectDataSourceEventArgs (object objectInstance) - { - this.objectInstance = objectInstance; - } - - public object ObjectInstance { - get { return objectInstance; } - set { objectInstance = value; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventArgs.cs deleted file mode 100644 index 7c2dbd9351..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceFilteringEventArgs.cs -// -// Authors: -// Lluis Sanchez Gual (lluis@novell.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Collections; -using System.Collections.Specialized; - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceFilteringEventArgs : System.ComponentModel.CancelEventArgs - { - IOrderedDictionary parameters; - - public ObjectDataSourceFilteringEventArgs (IOrderedDictionary parameterValues) - { - this.parameters = parameterValues; - } - - public IOrderedDictionary ParameterValues { - get { return parameters; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventHandler.cs deleted file mode 100644 index b806640e7b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceFilteringEventHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceFilteringEventHandler.cs -// -// Authors: -// Lluis Sanchez Gual (lluis@novell.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - - -namespace System.Web.UI.WebControls -{ - public delegate void ObjectDataSourceFilteringEventHandler (object sender, ObjectDataSourceFilteringEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventArgs.cs deleted file mode 100644 index 5becedb10f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventArgs.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceMethodEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Collections; -using System.Collections.Specialized; - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceMethodEventArgs : System.ComponentModel.CancelEventArgs - { - IOrderedDictionary parameters; - - public ObjectDataSourceMethodEventArgs (IOrderedDictionary inputParameters) - { - this.parameters = inputParameters; - } - - public IOrderedDictionary InputParameters { - get { return parameters; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventHandler.cs deleted file mode 100644 index 8814e615d1..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceMethodEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebContrls.ObjectDataSourceMethodEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void ObjectDataSourceMethodEventHandler (object sender, ObjectDataSourceMethodEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventArgs.cs deleted file mode 100644 index c5908d4eee..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventArgs.cs +++ /dev/null @@ -1,56 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Collections; -using System.Collections.Specialized; - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceSelectingEventArgs: ObjectDataSourceMethodEventArgs - { - private bool executeSelectCount; - private DataSourceSelectArguments arguments; - - public ObjectDataSourceSelectingEventArgs (IOrderedDictionary inputParameters, DataSourceSelectArguments arguments, bool executeSelectCount) : base (inputParameters) - { - this.executeSelectCount = executeSelectCount; - this.arguments = arguments; - } - - public bool ExecutingSelectCount { - get { return executeSelectCount; } - } - - public DataSourceSelectArguments Arguments { - get { return arguments; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventHandler.cs deleted file mode 100644 index a4abf86f8f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceSelectingEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebContrls.ObjectDataSourceSelectingEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void ObjectDataSourceSelectingEventHandler (object sender, ObjectDataSourceSelectingEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventArgs.cs deleted file mode 100644 index ea9c728e97..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventArgs.cs +++ /dev/null @@ -1,79 +0,0 @@ -// -// System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System.Collections; - -namespace System.Web.UI.WebControls -{ - public class ObjectDataSourceStatusEventArgs : EventArgs - { - readonly object returnVal; - readonly IDictionary outPutParam; - readonly Exception exception; - bool exceptionHandled; - int affectedRows; - - public ObjectDataSourceStatusEventArgs (object returnVal, IDictionary outPutParam) - : - this (returnVal, outPutParam, null) { } - - public ObjectDataSourceStatusEventArgs (object returnVal, IDictionary outPutParam, Exception e) - { - this.returnVal = returnVal; - this.outPutParam = outPutParam; - this.exception = e; - this.exceptionHandled = false; - this.affectedRows = -1; - } - - public int AffectedRows { - get { return affectedRows; } - set { affectedRows = value; } - } - - public Exception Exception { - get { return exception; } - } - - public bool ExceptionHandled { - get { return exceptionHandled; } - set { exceptionHandled = value; } - } - - public IDictionary OutputParameters { - get { return outPutParam; } - } - - public object ReturnValue { - get { return returnVal; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventHandler.cs deleted file mode 100644 index 9d96763b23..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ObjectDataSourceStatusEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebContrls.ObjectDataSourceStatusEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void ObjectDataSourceStatusEventHandler (object sender, ObjectDataSourceStatusEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/Orientation.cs b/mcs/class/System.Web/System.Web.UI.WebControls/Orientation.cs deleted file mode 100644 index 6f9ff797cd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/Orientation.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.Orientation.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum Orientation { - Horizontal = 0, - Vertical = 1 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/PagerButtons.cs b/mcs/class/System.Web/System.Web.UI.WebControls/PagerButtons.cs deleted file mode 100644 index dfb8dce4e6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/PagerButtons.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.PagerButtons.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum PagerButtons { - NextPrevious = 0, - Numeric = 1, - NextPreviousFirstLast = 2, - NumericFirstLast = 3 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/PagerMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/PagerMode.cs deleted file mode 100644 index 20dcf26650..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/PagerMode.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.PagerMode.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum PagerMode - { - NextPrev, - NumericPages - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/PagerPosition.cs b/mcs/class/System.Web/System.Web.UI.WebControls/PagerPosition.cs deleted file mode 100644 index 7793a71abf..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/PagerPosition.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.PagerPosition.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum PagerPosition - { - Bottom, - Top, - TopAndBottom - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/PathDirection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/PathDirection.cs deleted file mode 100644 index c124802a8f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/PathDirection.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.PathDirection.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum PathDirection { - RootToCurrent = 0, - CurrentToRoot = 1 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeatDirection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeatDirection.cs deleted file mode 100644 index 21eb560772..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeatDirection.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.WebControls.RepeatDirection.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum RepeatDirection - { - Horizontal, - Vertical - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeatLayout.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeatLayout.cs deleted file mode 100644 index d0ff4c5c7e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeatLayout.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.WebControls.RepeatLayout.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum RepeatLayout - { - Table, - Flow, - UnorderedList, - OrderedList - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventArgs.cs deleted file mode 100644 index 0e707f1b31..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventArgs.cs +++ /dev/null @@ -1,54 +0,0 @@ -// -// System.Web.UI.WebControls.RepeaterCommandEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public - class RepeaterCommandEventArgs : CommandEventArgs - { - RepeaterItem item; - object source; - - public RepeaterCommandEventArgs ( - RepeaterItem item, - object source, - CommandEventArgs args) - : base (args) - { - this.item = item; - this.source = source; - } - - public RepeaterItem Item { - get { return item; } - } - - public object CommandSource { - get { return source; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventHandler.cs deleted file mode 100644 index 828b25d37d..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterCommandEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.RepeaterEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void RepeaterCommandEventHandler ( - object sender, - RepeaterCommandEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventArgs.cs deleted file mode 100644 index f008a2aefc..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventArgs.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.RepeaterItemEventArgs.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public - class RepeaterItemEventArgs : EventArgs - { - RepeaterItem item; - - public RepeaterItemEventArgs (RepeaterItem item) - { - this.item = item; - } - - public RepeaterItem Item { - get { return item; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventHandler.cs deleted file mode 100644 index 56c2d6ac02..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/RepeaterItemEventHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -// -// System.Web.UI.WebControls.RepeaterItemEventHandler -// -// Author: Ben Maurer -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void RepeaterItemEventHandler (object sender, RepeaterItemEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SendMailErrorEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SendMailErrorEventHandler.cs deleted file mode 100644 index 9ca58aa308..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SendMailErrorEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebContrls.SendMailErrorEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void SendMailErrorEventHandler (object sender, SendMailErrorEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ServerValidateEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ServerValidateEventHandler.cs deleted file mode 100644 index 99f86e8a78..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ServerValidateEventHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -// -// System.Web.UI.WebControls.ServerValidateEventHandler.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public delegate void ServerValidateEventHandler ( - object sender, - ServerValidateEventArgs e); -} \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs deleted file mode 100644 index fc54cfe9cb..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.SiteMapNodeItemEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls -{ - public class SiteMapNodeItemEventArgs : EventArgs - { - SiteMapNodeItem item; - - public SiteMapNodeItemEventArgs (SiteMapNodeItem item) - { - this.item = item; - } - - public SiteMapNodeItem Item { - get { return item; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs deleted file mode 100644 index 03d4d1694b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebControls.SiteMapNodeItemEventHandler.cs; -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI.WebControls { - public delegate void SiteMapNodeItemEventHandler (object sender, SiteMapNodeItemEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemType.cs deleted file mode 100644 index 20def316ba..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SiteMapNodeItemType.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.SiteMapNodeItemType.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum SiteMapNodeItemType { - Root = 0, - Parent = 1, - Current = 2, - PathSeparator = 3 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SortDirection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SortDirection.cs deleted file mode 100644 index b6d6ac2503..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SortDirection.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.SortDirection.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls -{ - public enum SortDirection - { - Ascending = 0, - Descending = 1 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs deleted file mode 100644 index 6e8fd8942c..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs +++ /dev/null @@ -1,51 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceCommandEventArgs -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; -using System.Data.Common; -using System.ComponentModel; - -namespace System.Web.UI.WebControls { - public class SqlDataSourceCommandEventArgs : CancelEventArgs { - - public SqlDataSourceCommandEventArgs (DbCommand command) - { - this.command = command; - } - - DbCommand command; - public DbCommand Command { - get { return command; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventHandler.cs deleted file mode 100644 index 477e8e9d14..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceCommandEventHandler -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void SqlDataSourceCommandEventHandler (object source, SqlDataSourceCommandEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandType.cs deleted file mode 100644 index ba766e63df..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceCommandType.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceCommandType -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - - public enum SqlDataSourceCommandType - { - Text = 0, - StoredProcedure = 1 - } - -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventArgs.cs deleted file mode 100644 index 4300d875a6..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceFilteringEventArgs -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections.Specialized; -using System.ComponentModel; - -namespace System.Web.UI.WebControls -{ - public class SqlDataSourceFilteringEventArgs : CancelEventArgs - { - public SqlDataSourceFilteringEventArgs (IOrderedDictionary param_values) - { - this.param_values = param_values; - } - - public IOrderedDictionary ParameterValues - { - get { return param_values; } - } - - IOrderedDictionary param_values; - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventHandler.cs deleted file mode 100644 index b5c8cd9e36..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceFilteringEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceFilteringEventHandler -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void SqlDataSourceFilteringEventHandler (object sender, SqlDataSourceFilteringEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceMode.cs deleted file mode 100644 index f30828ea1e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceMode.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceMode -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; - -namespace System.Web.UI.WebControls { - public enum SqlDataSourceMode { - DataReader, - DataSet - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventArgs.cs deleted file mode 100644 index bb3bc4abe1..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceSelectinEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Data.Common; - -namespace System.Web.UI.WebControls { - public class SqlDataSourceSelectingEventArgs : SqlDataSourceCommandEventArgs { - DataSourceSelectArguments arguments; - - public SqlDataSourceSelectingEventArgs (DbCommand command, DataSourceSelectArguments argument) - : base (command) - { - this.arguments = argument; - } - - public DataSourceSelectArguments Arguments { - get { return arguments; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventHandler.cs deleted file mode 100644 index f2bbad36c1..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceSelectingEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceSelectingEventHandler -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void SqlDataSourceSelectingEventHandler (object source, SqlDataSourceSelectingEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventArgs.cs deleted file mode 100644 index cd8447f40e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventArgs.cs +++ /dev/null @@ -1,71 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceStatusEventArgs -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2003 Ben Maurer -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; -using System.Data.Common; - -namespace System.Web.UI.WebControls { - public class SqlDataSourceStatusEventArgs : EventArgs { - public SqlDataSourceStatusEventArgs (DbCommand command, int rowsAffected, Exception exception) - { - this.command = command; - this.rowsAffected = rowsAffected; - this.exception = exception; - this.exceptionHandled = false; - } - - DbCommand command; - Exception exception; - int rowsAffected; - bool exceptionHandled; - - public DbCommand Command { - get { return command; } - } - - public Exception Exception { - get { return exception; } - } - - public int AffectedRows { - get { return rowsAffected; } - } - - public bool ExceptionHandled { - get { return exceptionHandled; } - set { exceptionHandled = value; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventHandler.cs deleted file mode 100644 index 90176d65ca..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceStatusEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.SqlDataSourceStatusEventHandler -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void SqlDataSourceStatusEventHandler (object source, SqlDataSourceStatusEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceView.cs b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceView.cs index 1e191bf31d..9b7122e2ed 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceView.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/SqlDataSourceView.cs @@ -293,8 +293,8 @@ namespace System.Web.UI.WebControls { catch (Exception e) { exception = e; } - SqlDataSourceStatusEventArgs selectedArgs = - new SqlDataSourceStatusEventArgs (command, reader.RecordsAffected, exception); + int rows = reader == null ? 0 : reader.RecordsAffected; + SqlDataSourceStatusEventArgs selectedArgs = new SqlDataSourceStatusEventArgs (command, rows, exception); OnSelected (selectedArgs); if (exception != null && !selectedArgs.ExceptionHandled) throw exception; diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/Table.cs b/mcs/class/System.Web/System.Web.UI.WebControls/Table.cs index 865c463688..0bde072c28 100644 --- a/mcs/class/System.Web/System.Web.UI.WebControls/Table.cs +++ b/mcs/class/System.Web/System.Web.UI.WebControls/Table.cs @@ -248,11 +248,6 @@ namespace System.Web.UI.WebControls { writer.Write (s); writer.RenderEndTag (); } -// #if !NET_4_0 -// else if (HasControls ()) { -// writer.Indent++; -// } -// #endif } void IPostBackEventHandler.RaisePostBackEvent (string argument) diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TableCaptionAlign.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TableCaptionAlign.cs deleted file mode 100644 index 47fbf84153..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TableCaptionAlign.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.TableCaptionAlign.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - - // present in Fx 1.1 SP1 - public enum TableCaptionAlign { - NotSet = 0, - Top = 1, - Bottom = 2, - Left = 3, - Right = 4 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TableHeaderScope.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TableHeaderScope.cs deleted file mode 100644 index 0e92808e0e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TableHeaderScope.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.TableHeaderScope.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum TableHeaderScope { - NotSet = 0, - Row = 1, - Column = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TableRowSection.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TableRowSection.cs deleted file mode 100644 index 09246fe83f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TableRowSection.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.TableRowSection.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum TableRowSection { - TableHeader = 0, - TableBody = 1, - TableFooter = 2 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TextAlign.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TextAlign.cs deleted file mode 100644 index b792f8aabf..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TextAlign.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.TextAlign.cs -// -// Author: -// Dick Porter -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public enum TextAlign { - Left = 0x01, - Right - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TextBoxMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TextBoxMode.cs deleted file mode 100644 index eb3287bcef..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TextBoxMode.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.WebControls.TextBoxMode.cs -// -// Authors: -// Jordi Mas i Hernandez (jordi@ximian.com) -// -// (C) 2005 Novell, Inc (http://www.novell.com) -// -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls { - public enum TextBoxMode { - SingleLine, - MultiLine, - Password, - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventArgs.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventArgs.cs deleted file mode 100644 index d7baad9411..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventArgs.cs +++ /dev/null @@ -1,48 +0,0 @@ -// -// System.Web.UI.WebControls.TreeNodeEventArgs.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.UI.WebControls -{ - public sealed class TreeNodeEventArgs : EventArgs - { - TreeNode node; - - public TreeNodeEventArgs (TreeNode node) - { - this.node = node; - } - - public TreeNode Node { - get { return node; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventHandler.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventHandler.cs deleted file mode 100644 index b63cd3c02b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeEventHandler.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// System.Web.UI.WebControls.TreeNodeEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public delegate void TreeNodeEventHandler (object source, TreeNodeEventArgs e); -} - diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeSelectAction.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeSelectAction.cs deleted file mode 100644 index 03ac383c25..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TreeNodeSelectAction.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.WebControls.TreeNodeSelectAction.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum TreeNodeSelectAction { - Select = 0, - Expand = 1, - SelectExpand = 2, - None = 3 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/TreeViewImageSet.cs b/mcs/class/System.Web/System.Web.UI.WebControls/TreeViewImageSet.cs deleted file mode 100644 index bafa2737ba..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/TreeViewImageSet.cs +++ /dev/null @@ -1,47 +0,0 @@ -// -// System.Web.UI.WebControls.TreeViewImageSet.cs -// -// Author: Sanjay Gupta (gsanjay@novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (C) 2004 Novell, Inc (http://www.novell.com) -// - -namespace System.Web.UI.WebControls { - public enum TreeViewImageSet { - Custom = 0, - XPFileExplorer = 1, - Msdn = 2, - WindowsHelp = 3, - Simple = 4, - Simple2 = 5, - BulletedList = 6, - BulletedList2 = 7, - BulletedList3 = 8, - BulletedList4 = 9, - Arrows = 10, - News = 11, - Contacts = 12, - Inbox = 13, - Events = 14, - Faq = 15 - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/UnitType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/UnitType.cs deleted file mode 100644 index dfe59ffb3f..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/UnitType.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.UnitType.cs -// -// Authors: -// Miguel de Icaza (miguel@novell.com) -// -// (C) 2005 Novell, Inc. -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI.WebControls { - public enum UnitType { - // Empty - Pixel = 1, - Point, - Pica, - Inch, - Mm, - Cm, - Percentage, - Em, - Ex - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationCompareOperator.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ValidationCompareOperator.cs deleted file mode 100644 index b6333ac3c7..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationCompareOperator.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.WebControls.ValidationCompareOperator.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ValidationCompareOperator - { - Equal, - NotEqual, - GreaterThan, - GreaterThanEqual, - LessThan, - LessThanEqual, - DataTypeCheck - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationDataType.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ValidationDataType.cs deleted file mode 100644 index 5d25210c4e..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationDataType.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.ValidationSummaryDisplayMode.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ValidationDataType - { - String, - Integer, - Double, - Date, - Currency - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationSummaryDisplayMode.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ValidationSummaryDisplayMode.cs deleted file mode 100644 index 73a3ffb268..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ValidationSummaryDisplayMode.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.ValidationSummaryDisplayMode.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ValidationSummaryDisplayMode - { - List, - BulletList, - SingleParagraph - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/ValidatorDisplay.cs b/mcs/class/System.Web/System.Web.UI.WebControls/ValidatorDisplay.cs deleted file mode 100644 index 172c22868b..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/ValidatorDisplay.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.WebControls.ValidatorDisplay.cs -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI.WebControls { - - public enum ValidatorDisplay - { - None, - Static, - Dynamic - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/VerticalAlign.cs b/mcs/class/System.Web/System.Web.UI.WebControls/VerticalAlign.cs deleted file mode 100644 index efe067d6cd..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/VerticalAlign.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.WebControls.VerticalAlign.cs -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; - -namespace System.Web.UI.WebControls { - - [TypeConverter (typeof (System.Web.UI.WebControls.VerticalAlignConverter))] - public enum VerticalAlign { - NotSet, - Top, - Middle, - Bottom - } -} diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/WebColorConverter.cs b/mcs/class/System.Web/System.Web.UI.WebControls/WebColorConverter.cs deleted file mode 100644 index f2965a3485..0000000000 --- a/mcs/class/System.Web/System.Web.UI.WebControls/WebColorConverter.cs +++ /dev/null @@ -1,71 +0,0 @@ -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// Copyright (c) 2005 Novell, Inc. (http://www.novell.com) -// -// Authors: -// Peter Bartok (pbartok@novell.com) -// Marek Safar (marek.safar@gmail.com) -// -// - -using System.Collections; -using System.Drawing; -using System.Globalization; -using System.ComponentModel; -using System.Security.Permissions; -using System.Web.Util; - -namespace System.Web.UI.WebControls { - - // CAS - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public class WebColorConverter : ColorConverter - { - // Converts from string to Color - public override object ConvertFrom (ITypeDescriptorContext context, CultureInfo culture, object value) - { - if (value is string) { - string s = ((string)value).Trim(); - return ColorTranslator.FromHtml (s); - } - - return base.ConvertFrom (context, culture, value); - } - - // Converts from Color to string - public override object ConvertTo (ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) - { - if (!(value is Color) || destinationType != typeof (string)) - return base.ConvertTo (context, culture, value, destinationType); - - Color c = (Color) value; - - if (culture == null) - culture = Helpers.InvariantCulture; - - string s = c.ToKnownColor ().ToString (); - if (s != "0") - return s; - - return String.Concat ("#", c.R.ToString ("X2"), c.G.ToString ("X2"), c.B.ToString ("X2")); - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ClientIDMode.cs b/mcs/class/System.Web/System.Web.UI/ClientIDMode.cs deleted file mode 100644 index 75a4af78b2..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ClientIDMode.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2002,2003 Ximian, Inc. (http://www.ximian.com) -// Copyright (C) 2003-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public enum ClientIDMode - { - Inherit, - AutoID, - Predictable, - Static - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ConflictOptions.cs b/mcs/class/System.Web/System.Web.UI/ConflictOptions.cs deleted file mode 100644 index 448054872e..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ConflictOptions.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.ConflictOptions.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI { - public enum ConflictOptions { - OverwriteChanges = 0, - CompareAllValues = 1 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/ConstructorNeedsTagAttribute.cs b/mcs/class/System.Web/System.Web.UI/ConstructorNeedsTagAttribute.cs deleted file mode 100644 index 3e30cbadb2..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ConstructorNeedsTagAttribute.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.UI.ConstructorNeedsTagAttribute.cs -// -// Duncan Mak (duncan@ximian.com) -// -// (C) Ximian, Inc. -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI { - - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class)] - public sealed class ConstructorNeedsTagAttribute : Attribute - { - bool needsTag; - - public ConstructorNeedsTagAttribute () - { - needsTag = false; - } - - public ConstructorNeedsTagAttribute (bool needsTag) - { - this.needsTag = needsTag; - } - - public bool NeedsTag { - get { return needsTag; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ControlBuilderAttribute.cs b/mcs/class/System.Web/System.Web.UI/ControlBuilderAttribute.cs deleted file mode 100644 index be84ba2516..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ControlBuilderAttribute.cs +++ /dev/null @@ -1,73 +0,0 @@ -// -// System.Web.UI.ControlBuilderAttribute.cs -// -// Authors: -// Duncan Mak (duncan@ximian.com) -// Gonzalo Paniagua Javier (gonzalo@ximian.com) -// Sebastien Pouliot -// -// (C) 2002 Ximian, Inc. (http://www.ximian.com) -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI { - - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class)] - public sealed class ControlBuilderAttribute : Attribute - { - Type builderType; - public static readonly ControlBuilderAttribute Default = new ControlBuilderAttribute (null); - - public ControlBuilderAttribute (Type builderType) - { - this.builderType = builderType; - } - - public Type BuilderType { - get { return builderType; } - } - - public override bool Equals (object obj) - { - ControlBuilderAttribute cba = (obj as ControlBuilderAttribute); - if (cba == null) - return false; - return (cba.builderType == builderType); - } - - public override int GetHashCode () - { - return base.GetHashCode (); - } - - public override bool IsDefaultAttribute () - { - return (builderType == null); - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/CssClassPropertyAttribute.cs b/mcs/class/System.Web/System.Web.UI/CssClassPropertyAttribute.cs deleted file mode 100644 index 10d77ede62..0000000000 --- a/mcs/class/System.Web/System.Web.UI/CssClassPropertyAttribute.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.CssClassPropertyAttribute -// -// Authors: -// Atsushi Enomoto -// -// (C) 2008-2010 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.ComponentModel; -using System.Security.Permissions; - -namespace System.Web.UI { - [AttributeUsage (AttributeTargets.Property)] - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public sealed class CssClassPropertyAttribute : Attribute - { - public CssClassPropertyAttribute () - { - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/DataBindingHandlerAttribute.cs b/mcs/class/System.Web/System.Web.UI/DataBindingHandlerAttribute.cs deleted file mode 100644 index d5ff98455d..0000000000 --- a/mcs/class/System.Web/System.Web.UI/DataBindingHandlerAttribute.cs +++ /dev/null @@ -1,81 +0,0 @@ -// -// System.Web.UI.WebControls.DataBindingHandlerAttribute class -// -// Author: Duncan Mak (duncan@novell.com) -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI { - - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class)] - public sealed class DataBindingHandlerAttribute : Attribute - { - string name; - - static DataBindingHandlerAttribute () - { - Default = new DataBindingHandlerAttribute (); - } - - public DataBindingHandlerAttribute () - : this (String.Empty) - { - } - - public DataBindingHandlerAttribute (string name) - { - this.name = (name != null) ? name : String.Empty; - } - - public DataBindingHandlerAttribute (Type type) - { - this.name = type.AssemblyQualifiedName; - } - - public static readonly DataBindingHandlerAttribute Default; - - public override bool Equals (object obj) - { - DataBindingHandlerAttribute other = obj as DataBindingHandlerAttribute; - if (other == null) { - return false; - } - - return HandlerTypeName.Equals (other.HandlerTypeName); - } - - public override int GetHashCode () - { - return HandlerTypeName.GetHashCode (); - } - - public string HandlerTypeName { - get { return name; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/DataKeyPropertyAttribute.cs b/mcs/class/System.Web/System.Web.UI/DataKeyPropertyAttribute.cs deleted file mode 100644 index efb9c58601..0000000000 --- a/mcs/class/System.Web/System.Web.UI/DataKeyPropertyAttribute.cs +++ /dev/null @@ -1,58 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// (C) 2010 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web.UI -{ - [AttributeUsage (AttributeTargets.Class)] - public sealed class DataKeyPropertyAttribute : Attribute - { - public string Name { get; private set; } - - public DataKeyPropertyAttribute (string name) - { - this.Name = name; - } - - public override bool Equals (object obj) - { - var attr = obj as DataKeyPropertyAttribute; - if (attr == null) - return false; - - return String.Compare (this.Name, attr.Name, StringComparison.Ordinal) == 0; - } - - public override int GetHashCode () - { - string name = Name; - if (name == null) - return 0; - - return name.GetHashCode (); - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/DataSourceCacheExpiry.cs b/mcs/class/System.Web/System.Web.UI/DataSourceCacheExpiry.cs deleted file mode 100644 index 8413fc9562..0000000000 --- a/mcs/class/System.Web/System.Web.UI/DataSourceCacheExpiry.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.UI.DataSourceCacheExpiry.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI { - public enum DataSourceCacheExpiry { - Absolute = 0, - Sliding = 1 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/DataSourceCapabilities.cs b/mcs/class/System.Web/System.Web.UI/DataSourceCapabilities.cs deleted file mode 100644 index 0de8d95c22..0000000000 --- a/mcs/class/System.Web/System.Web.UI/DataSourceCapabilities.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.DataSourceCapabilities.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI { - [Flags] - public enum DataSourceCapabilities { - None = 0, - Sort = 1, - Page = 2, - RetrieveTotalRowCount = 4 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/DataSourceOperation.cs b/mcs/class/System.Web/System.Web.UI/DataSourceOperation.cs deleted file mode 100644 index 6cea69cb79..0000000000 --- a/mcs/class/System.Web/System.Web.UI/DataSourceOperation.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.DataSourceOperation.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI { - public enum DataSourceOperation { - Delete = 0, - Insert = 1, - Select = 2, - Update = 3, - SelectCount = 4 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/FileLevelControlBuilderAttribute.cs b/mcs/class/System.Web/System.Web.UI/FileLevelControlBuilderAttribute.cs deleted file mode 100644 index 16f6fba853..0000000000 --- a/mcs/class/System.Web/System.Web.UI/FileLevelControlBuilderAttribute.cs +++ /dev/null @@ -1,83 +0,0 @@ -// -// System.Web.UI.FileLevelControlBuilderAttribute.cs -// -// Authors: -// Arina Itkes (arinai@mainsoft.com) -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2007 Mainsoft Co. (http://www.mainsoft.com) -// (C) 2009-2010 Novell, Inc (http://novell.com/) -// -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - [AttributeUsageAttribute (AttributeTargets.Class)] - public sealed class FileLevelControlBuilderAttribute : Attribute - { - public static readonly FileLevelControlBuilderAttribute Default = new FileLevelControlBuilderAttribute (null); - - public FileLevelControlBuilderAttribute (Type builderType) - { - this.BuilderType = builderType; - } - - public Type BuilderType { - get; - private set; - } - - public override bool Equals (Object obj) - { - var attr = obj as FileLevelControlBuilderAttribute; - return ((attr != null) && this.BuilderType == attr.BuilderType); - } - - public new static bool Equals (Object objA, Object objB) - { - var attrA = objA as FileLevelControlBuilderAttribute; - if (attrA == null) - return false; - - var attrB = objB as FileLevelControlBuilderAttribute; - if (attrB == null) - return false; - - return (attrA.BuilderType == attrB.BuilderType); - } - - public override int GetHashCode () - { - Type type = BuilderType; - if (type == null) - return base.GetHashCode (); - - return type.GetHashCode (); - } - - public override bool IsDefaultAttribute () - { - return this == Default; - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/FilterableAttribute.cs b/mcs/class/System.Web/System.Web.UI/FilterableAttribute.cs deleted file mode 100644 index afbfb3bb68..0000000000 --- a/mcs/class/System.Web/System.Web.UI/FilterableAttribute.cs +++ /dev/null @@ -1,100 +0,0 @@ -// -// System.Web.UI.FilterableAttribute -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.ComponentModel; - -namespace System.Web.UI { - [AttributeUsage (AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] - public sealed class FilterableAttribute : Attribute - { - bool filterable; - - public FilterableAttribute (bool filterable) - { - this.filterable = filterable; - } - - public static readonly FilterableAttribute Default = new FilterableAttribute (true); - - public static readonly FilterableAttribute No = new FilterableAttribute (false); - - public static readonly FilterableAttribute Yes = new FilterableAttribute (true); - - public bool Filterable { - get { return filterable; } - } - - public override bool Equals (object obj) - { - if (obj != null && obj is FilterableAttribute) { - FilterableAttribute fa = (FilterableAttribute) obj; - return (this.filterable == fa.filterable); - } - return false; - } - - public override int GetHashCode () - { - return this.filterable.GetHashCode (); - } - - public override bool IsDefaultAttribute () - { - return Equals (Default); - } - - public static bool IsObjectFilterable (object obj) - { - return IsTypeFilterable (obj.GetType ()); - } - - public static bool IsPropertyFilterable (PropertyDescriptor propDesc) - { - System.ComponentModel.AttributeCollection attributes = propDesc.Attributes; - if (attributes.Count != 0) { - foreach (Attribute attrib in attributes) - if (attrib is FilterableAttribute) - return true; - } - return false; - } - - public static bool IsTypeFilterable (Type type) - { - Object [] attributes = type.GetCustomAttributes (typeof (FilterableAttribute), false); - if (attributes.Length != 0) { - foreach (Attribute attrib in attributes) - if (attrib is FilterableAttribute) - return true; - } - return false; - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterAttribute.cs b/mcs/class/System.Web/System.Web.UI/HtmlTextWriterAttribute.cs deleted file mode 100644 index e4d334fb31..0000000000 --- a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterAttribute.cs +++ /dev/null @@ -1,87 +0,0 @@ -// -// System.Web.UI.HtmlTextWriterTag -// -// Author: -// Ben Maurer -// -// (c) 2005-2010 Novell -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public enum HtmlTextWriterAttribute { - Accesskey, - Align, - Alt, - Background, - Bgcolor, - Border, - Bordercolor, - Cellpadding, - Cellspacing, - Checked, - Class, - Cols, - Colspan, - Disabled, - For, - Height, - Href, - Id, - Maxlength, - Multiple, - Name, - Nowrap, - Onchange, - Onclick, - ReadOnly, - Rows, - Rowspan, - Rules, - Selected, - Size, - Src, - Style, - Tabindex, - Target, - Title, - Type, - Valign, - Value, - Width, - Wrap, - Abbr, - AutoComplete, - Axis, - Content, - Coords, - DesignerRegion, - Dir, - Headers, - Longdesc, - Rel, - Scope, - Shape, - Usemap, - VCardName - } -} diff --git a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterStyle.cs b/mcs/class/System.Web/System.Web.UI/HtmlTextWriterStyle.cs deleted file mode 100644 index 95c33db455..0000000000 --- a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterStyle.cs +++ /dev/null @@ -1,76 +0,0 @@ -// -// System.Web.UI.HtmlTextWriterStyle -// -// Author: -// Ben Maurer -// -// (c) 2005-2010 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public enum HtmlTextWriterStyle { - BackgroundColor, - BackgroundImage, - BorderCollapse, - BorderColor, - BorderStyle, - BorderWidth, - Color, - FontFamily, - FontSize, - FontStyle, - FontWeight, - Height, - TextDecoration, - Width, - ListStyleImage, - ListStyleType, - Cursor, - Direction, - Display, - Filter, - FontVariant, - Left, - Margin, - MarginBottom, - MarginLeft, - MarginRight, - MarginTop, - Overflow, - OverflowX, - OverflowY, - Padding, - PaddingBottom, - PaddingLeft, - PaddingRight, - PaddingTop, - Position, - TextAlign, - VerticalAlign, - TextOverflow, - Top, - Visibility, - WhiteSpace, - ZIndex - } -} diff --git a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterTag.cs b/mcs/class/System.Web/System.Web.UI/HtmlTextWriterTag.cs deleted file mode 100644 index 37277f5856..0000000000 --- a/mcs/class/System.Web/System.Web.UI/HtmlTextWriterTag.cs +++ /dev/null @@ -1,130 +0,0 @@ -// -// System.Web.UI.HtmlTextWriterTag -// -// Author: -// Ben Maurer -// -// (c) 2005-2010 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public enum HtmlTextWriterTag { - Unknown, - A, - Acronym, - Address, - Area, - B, - Base, - Basefont, - Bdo, - Bgsound, - Big, - Blockquote, - Body, - Br, - Button, - Caption, - Center, - Cite, - Code, - Col, - Colgroup, - Dd, - Del, - Dfn, - Dir, - Div, - Dl, - Dt, - Em, - Embed, - Fieldset, - Font, - Form, - Frame, - Frameset, - H1, - H2, - H3, - H4, - H5, - H6, - Head, - Hr, - Html, - I, - Iframe, - Img, - Input, - Ins, - Isindex, - Kbd, - Label, - Legend, - Li, - Link, - Map, - Marquee, - Menu, - Meta, - Nobr, - Noframes, - Noscript, - Object, - Ol, - Option, - P, - Param, - Pre, - Q, - Rt, - Ruby, - S, - Samp, - Script, - Select, - Small, - Span, - Strike, - Strong, - Style, - Sub, - Sup, - Table, - Tbody, - Td, - Textarea, - Tfoot, - Th, - Thead, - Title, - Tr, - Tt, - U, - Ul, - Var, - Wbr, - Xml - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IAttributeAccessor.cs b/mcs/class/System.Web/System.Web.UI/IAttributeAccessor.cs deleted file mode 100644 index 1b67f20f9b..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IAttributeAccessor.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.IAttributeAccessor.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IAttributeAccessor - { - string GetAttribute(string key); - void SetAttribute(string key, string value); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IAutoFieldGenerator.cs b/mcs/class/System.Web/System.Web.UI/IAutoFieldGenerator.cs deleted file mode 100644 index 22708f4e66..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IAutoFieldGenerator.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.WebControls.IPersistedSelector.cs -// -// Author: -// Atsushi Enomoto -// -// (C) 2008-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.UI -{ - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public interface IAutoFieldGenerator - { - ICollection GenerateFields (Control control); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IBindableControl.cs b/mcs/class/System.Web/System.Web.UI/IBindableControl.cs deleted file mode 100644 index 6135da9ca4..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IBindableControl.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.IBindableControl.cs -// -// Authors: -// Atsushi Enomoto -// -// (C) 2008-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections.Specialized; -using System.Security.Permissions; -using System.Web; - -namespace System.Web.UI -{ - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public interface IBindableControl - { - void ExtractValues (IOrderedDictionary dictionary); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IBindableTemplate.cs b/mcs/class/System.Web/System.Web.UI/IBindableTemplate.cs deleted file mode 100644 index 0fbb1fc6b1..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IBindableTemplate.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IBindableTemplate.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections.Specialized; - -namespace System.Web.UI -{ - public interface IBindableTemplate: ITemplate - { - IOrderedDictionary ExtractValues (Control control); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/ICallbackEventHandler.cs b/mcs/class/System.Web/System.Web.UI/ICallbackEventHandler.cs deleted file mode 100644 index cd2a65b7d6..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ICallbackEventHandler.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.ICallbackEventHandler.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface ICallbackEventHandler - { - string GetCallbackResult (); - void RaiseCallbackEvent (string eventArgs); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IControlBuilderAccessor.cs b/mcs/class/System.Web/System.Web.UI/IControlBuilderAccessor.cs deleted file mode 100644 index cfd9a1dd53..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IControlBuilderAccessor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.IControlBuilderAccessor.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IControlBuilderAccessor - { - ControlBuilder ControlBuilder { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IControlDesignerAccessor.cs b/mcs/class/System.Web/System.Web.UI/IControlDesignerAccessor.cs deleted file mode 100644 index 51f1152594..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IControlDesignerAccessor.cs +++ /dev/null @@ -1,44 +0,0 @@ -// -// System.Web.UI.IControlDesignerAccessor.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; - -namespace System.Web.UI -{ - public interface IControlDesignerAccessor - { - - IDictionary GetDesignModeState (); - void SetDesignModeState (IDictionary designData); - void SetOwnerControl (Control control); - - IDictionary UserData { get; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IDReferencePropertyAttribute.cs b/mcs/class/System.Web/System.Web.UI/IDReferencePropertyAttribute.cs deleted file mode 100644 index bfc7a33c4d..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDReferencePropertyAttribute.cs +++ /dev/null @@ -1,64 +0,0 @@ -// -// System.Web.UI.IDReferencePropertyAttribute.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public sealed class IDReferencePropertyAttribute : Attribute - { - Type controlType; - - public IDReferencePropertyAttribute () - { - } - - public IDReferencePropertyAttribute (Type controlReferenceType) - { - controlType = controlReferenceType; - } - - public override bool Equals (object obj) - { - if (obj != null && obj is IDReferencePropertyAttribute) - return (this.controlType == ((IDReferencePropertyAttribute) obj).controlType); - return false; - } - - public override int GetHashCode () - { - return controlType.GetHashCode (); - } - - public Type ReferencedControlType { - get { return controlType; } - } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IDataBindingsAccessor.cs b/mcs/class/System.Web/System.Web.UI/IDataBindingsAccessor.cs deleted file mode 100644 index 83cb04739a..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDataBindingsAccessor.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.IDataBindingsAccessor.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IDataBindingsAccessor - { - DataBindingCollection DataBindings {get;} - bool HasDataBindings {get;} - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IDataItemContainer.cs b/mcs/class/System.Web/System.Web.UI/IDataItemContainer.cs deleted file mode 100644 index ba9e3abd62..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDataItemContainer.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.IDataItemContainer.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IDataItemContainer: INamingContainer - { - object DataItem { get; } - int DataItemIndex { get; } - int DisplayIndex { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IDataKeysControl.cs b/mcs/class/System.Web/System.Web.UI/IDataKeysControl.cs deleted file mode 100644 index d819c5279d..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDataKeysControl.cs +++ /dev/null @@ -1,36 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// (C) 2010 Novell, Inc. (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Web.UI.WebControls; - -namespace System.Web.UI -{ - public interface IDataKeysControl - { - string[] ClientIDRowSuffix { get; } - DataKeyArray ClientIDRowSuffixDataKeys { get; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IDataSource.cs b/mcs/class/System.Web/System.Web.UI/IDataSource.cs deleted file mode 100644 index 33a21d318f..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDataSource.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.IDataSource -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; - -namespace System.Web.UI { - public interface IDataSource { - event EventHandler DataSourceChanged; - DataSourceView GetView (string viewName); - ICollection GetViewNames (); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IDataSourceViewSchemaAccessor.cs b/mcs/class/System.Web/System.Web.UI/IDataSourceViewSchemaAccessor.cs deleted file mode 100644 index 63d4f2ea6e..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IDataSourceViewSchemaAccessor.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.IDataSourceViewSchemaAccessor.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IDataSourceViewSchemaAccessor - { - object DataSourceViewSchema { get; set; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IExpressionsAccessor.cs b/mcs/class/System.Web/System.Web.UI/IExpressionsAccessor.cs deleted file mode 100644 index 22f497d7a3..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IExpressionsAccessor.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IExpressionsAccessor.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IExpressionsAccessor - { - ExpressionBindingCollection Expressions { get; } - bool HasExpressions { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IFilterResolutionService.cs b/mcs/class/System.Web/System.Web.UI/IFilterResolutionService.cs deleted file mode 100644 index a6111e5a3e..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IFilterResolutionService.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IFilterResolutionService.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IFilterResolutionService - { - int CompareFilters (string filter1, string filter2); - bool EvaluateFilter (string filterName); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IHierarchicalDataSource.cs b/mcs/class/System.Web/System.Web.UI/IHierarchicalDataSource.cs deleted file mode 100644 index 5416a4cb5f..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IHierarchicalDataSource.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.IHierarchicalDataSource -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Collections.Specialized; -using System.Text; - -namespace System.Web.UI { - public interface IHierarchicalDataSource { - event EventHandler DataSourceChanged; - HierarchicalDataSourceView GetHierarchicalView (string viewPath); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IHierarchicalEnumerable.cs b/mcs/class/System.Web/System.Web.UI/IHierarchicalEnumerable.cs deleted file mode 100644 index ca3f1a5341..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IHierarchicalEnumerable.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.IHierarchicalEnumerable -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; - -namespace System.Web.UI { - public interface IHierarchicalEnumerable : IEnumerable { - IHierarchyData GetHierarchyData (object enumeratedItem); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IHierarchyData.cs b/mcs/class/System.Web/System.Web.UI/IHierarchyData.cs deleted file mode 100644 index 800e732468..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IHierarchyData.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.IHierarchyData -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI { - public interface IHierarchyData { - IHierarchicalEnumerable GetChildren (); - IHierarchyData GetParent (); - bool HasChildren { get; } - object Item { get; } - string Path { get; } - string Type { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/INamingContainer.cs b/mcs/class/System.Web/System.Web.UI/INamingContainer.cs deleted file mode 100644 index 62cf0654e6..0000000000 --- a/mcs/class/System.Web/System.Web.UI/INamingContainer.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.INamingContainer.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface INamingContainer - { - } -} diff --git a/mcs/class/System.Web/System.Web.UI/INavigateUIData.cs b/mcs/class/System.Web/System.Web.UI/INavigateUIData.cs deleted file mode 100644 index d48d595208..0000000000 --- a/mcs/class/System.Web/System.Web.UI/INavigateUIData.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.INavigateUIData -// -// Authors: -// Ben Maurer (bmaurer@users.sourceforge.net) -// -// (C) 2003 Ben Maurer -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public interface INavigateUIData { - string Name { get; } - string NavigateUrl { get; } - string Value { get; } - string Description { get; } - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/INonBindingContainer.cs b/mcs/class/System.Web/System.Web.UI/INonBindingContainer.cs deleted file mode 100644 index 5f428e58c6..0000000000 --- a/mcs/class/System.Web/System.Web.UI/INonBindingContainer.cs +++ /dev/null @@ -1,55 +0,0 @@ -// -// System.Web.UI.INonBindingContainer -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2008-2010 Novell, Inc. (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.UI -{ - // Apparently this attribute is used in place of our BINDING_CONTAINER control mask bit, - // which makes sense as in certain scenarios (e.g. TemplateControlAttribute naming a - // container type which cannot be used for two-way binding) the check must be made on type, - // not on object. - // - // This interface is briefly mentioned in: - // http://www.developmentnow.com/g/10_2006_6_0_0_776419/DataBinding-to-SubProperties.htm - // - // For a sample of why this is needed, see: - // - // http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatepagerfield.pagertemplate.aspx - // The C# code on the above page won't work without this interface being implemented and - // used in ControlBuilder.BindingContainerType. The reason why the sample wouldn't work is - // that the TemplatePagerField.PagerTemplate property carries a custom TemplateContainer - // (typeof (DataPagerFieldItem)) attribute and, without INonBindingContainer interface - // attached to DataPagerFieldItem, mono would generate code with the Container and - // BindingContainer referring to DataPagerFieldItem. In such case, attempting to access - // DataPager properties would obviously fail. Looking at the MS.NET generated code, - // Container and BindingContainer are of the DataPager type in this instance. - // - internal interface INonBindingContainer - { - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IParserAccessor.cs b/mcs/class/System.Web/System.Web.UI/IParserAccessor.cs deleted file mode 100644 index f49d833839..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IParserAccessor.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IParserAccessor.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IParserAccessor - { - void AddParsedSubObject(object obj); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IPostBackDataHandler.cs b/mcs/class/System.Web/System.Web.UI/IPostBackDataHandler.cs deleted file mode 100644 index 4b3ff91160..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IPostBackDataHandler.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.IPostBackDataHandler.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; -using System.Collections.Specialized; - -namespace System.Web.UI -{ - public interface IPostBackDataHandler - { - bool LoadPostData(string postDataKey, NameValueCollection postCollection); - void RaisePostDataChangedEvent(); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IPostBackEventHandler.cs b/mcs/class/System.Web/System.Web.UI/IPostBackEventHandler.cs deleted file mode 100644 index 94daa50724..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IPostBackEventHandler.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IPostBackEventHandler.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IPostBackEventHandler - { - void RaisePostBackEvent(string eventArgument); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IResourceUrlGenerator.cs b/mcs/class/System.Web/System.Web.UI/IResourceUrlGenerator.cs deleted file mode 100644 index 496cc9992b..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IResourceUrlGenerator.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.IResourceUrlGenerator.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public interface IResourceUrlGenerator - { - string GetResourceUrl (Type type, string resource); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IStateFormatter.cs b/mcs/class/System.Web/System.Web.UI/IStateFormatter.cs deleted file mode 100644 index 10378d34b8..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IStateFormatter.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.IStateFormatter.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -using System; - -namespace System.Web.UI -{ - public interface IStateFormatter - { - object Deserialize (string serializationState); - string Serialize (object state); - } -} - - diff --git a/mcs/class/System.Web/System.Web.UI/IStateManager.cs b/mcs/class/System.Web/System.Web.UI/IStateManager.cs deleted file mode 100644 index 64a189428d..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IStateManager.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.IStateManager.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IStateManager - { - void LoadViewState(object state); - object SaveViewState(); - void TrackViewState(); - bool IsTrackingViewState { get; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IStyleSheet.cs b/mcs/class/System.Web/System.Web.UI/IStyleSheet.cs deleted file mode 100644 index dc1256c959..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IStyleSheet.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.UI.IStyleSheet.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Web.UI.WebControls; - -namespace System.Web.UI -{ - public interface IStyleSheet - { - void CreateStyleRule (Style style, IUrlResolutionService urlResolver, string selection); - void RegisterStyle (Style style, IUrlResolutionService urlResolver); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/ITemplate.cs b/mcs/class/System.Web/System.Web.UI/ITemplate.cs deleted file mode 100644 index 9ebb6a470e..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ITemplate.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.ITemplate.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface ITemplate - { - void InstantiateIn(Control container); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IThemeResolutionService.cs b/mcs/class/System.Web/System.Web.UI/IThemeResolutionService.cs deleted file mode 100644 index df19c8c1bb..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IThemeResolutionService.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// System.Web.UI.IThemeResolutionService.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; - -namespace System.Web.UI -{ - public interface IThemeResolutionService - { - ThemeProvider [] GetAllThemeProviders (); - ThemeProvider GetStylesheetThemeProvider (); - ThemeProvider GetThemeProvider (); - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IUrlResolutionService.cs b/mcs/class/System.Web/System.Web.UI/IUrlResolutionService.cs deleted file mode 100644 index 8b01605206..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IUrlResolutionService.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IUrlResolutionService.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; - -namespace System.Web.UI -{ - public interface IUrlResolutionService - { - string ResolveClientUrl (string url); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IUserControlDesignerAccessor.cs b/mcs/class/System.Web/System.Web.UI/IUserControlDesignerAccessor.cs deleted file mode 100644 index 064d994dd0..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IUserControlDesignerAccessor.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.IUserControlDesignerAccessor.cs -// -// Author: -// Andreas Nahr (ClassDevelopment@A-SoftTech.com) -// -// (C) 2003 Andreas Nahr -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public interface IUserControlDesignerAccessor - { - string InnerText { get; set; } - string TagName { get; set; } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/IUserControlTypeResolutionService.cs b/mcs/class/System.Web/System.Web.UI/IUserControlTypeResolutionService.cs deleted file mode 100644 index 3629bde724..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IUserControlTypeResolutionService.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.UI.IUserControlTypeResolutionService.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections; - -namespace System.Web.UI -{ - public interface IUserControlTypeResolutionService - { - Type GetType (string prefixTag, string tagName); - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/IValidator.cs b/mcs/class/System.Web/System.Web.UI/IValidator.cs deleted file mode 100644 index 60aed884c7..0000000000 --- a/mcs/class/System.Web/System.Web.UI/IValidator.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.UI.IValidator.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public interface IValidator - { - void Validate(); - string ErrorMessage {get; set;} - bool IsValid {get; set;} - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ImageClickEventHandler.cs b/mcs/class/System.Web/System.Web.UI/ImageClickEventHandler.cs deleted file mode 100644 index b3609051dd..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ImageClickEventHandler.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.UI.ImageClickEventHandler.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public delegate void ImageClickEventHandler(object sender, ImageClickEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs b/mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs deleted file mode 100644 index e5950e69cf..0000000000 --- a/mcs/class/System.Web/System.Web.UI/NonVisualControlAttribute.cs +++ /dev/null @@ -1,72 +0,0 @@ -// -// System.Web.UI.WebControls.NonVisualControlAttribute.cs -// -// Authors: -// Lluis Sanchez Gual (lluis@novell.com) -// -// (C) 2005-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; - -namespace System.Web.UI -{ - public sealed class NonVisualControlAttribute: Attribute - { - public static readonly NonVisualControlAttribute Visual = new NonVisualControlAttribute (false); - public static readonly NonVisualControlAttribute NonVisual = new NonVisualControlAttribute (true); - public static readonly NonVisualControlAttribute Default = Visual; - - bool nonVisual; - - public NonVisualControlAttribute (): this (true) - { - } - - public NonVisualControlAttribute (bool nonVisual) - { - this.nonVisual = nonVisual; - } - - public override bool Equals (object obj) - { - NonVisualControlAttribute ot = obj as NonVisualControlAttribute; - return ot != null && ot.nonVisual == nonVisual; - } - - public override int GetHashCode () - { - return GetType().GetHashCode () + nonVisual.GetHashCode (); - } - - public override bool IsDefaultAttribute () - { - return Equals (Default); - } - - public bool IsNonVisual { - get { return nonVisual; } - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/PersistChildrenAttribute.cs b/mcs/class/System.Web/System.Web.UI/PersistChildrenAttribute.cs deleted file mode 100644 index 35f6fad68b..0000000000 --- a/mcs/class/System.Web/System.Web.UI/PersistChildrenAttribute.cs +++ /dev/null @@ -1,92 +0,0 @@ -// -// System.Web.UI.PersistChildrenAttribute.cs -// -// Duncan Mak (duncan@ximian.com) -// -// (C) Ximian, Inc. -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI { - - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class)] - public sealed class PersistChildrenAttribute : Attribute - { - bool persist; - bool usesCustomPersistence; - - public PersistChildrenAttribute (bool persist) - { - this.persist = persist; - } - - public PersistChildrenAttribute (bool persist, - bool usesCustomPersistence) - { - this.persist = persist; - this.usesCustomPersistence = usesCustomPersistence; - } - - public static readonly PersistChildrenAttribute Default = new PersistChildrenAttribute (true); - public static readonly PersistChildrenAttribute Yes = new PersistChildrenAttribute (true); - public static readonly PersistChildrenAttribute No = new PersistChildrenAttribute (false); - - public bool Persist { - get { return persist; } - } - - public bool UsesCustomPersistence - { - get { - return (usesCustomPersistence); - } - } - - public override bool Equals (object obj) - { - PersistChildrenAttribute pobj = (obj as PersistChildrenAttribute); - if (pobj == null) - return false; - - return (pobj.persist == persist && pobj.usesCustomPersistence == usesCustomPersistence); - } - - public override int GetHashCode () - { - return persist ? 1 : 0; - } - - public override bool IsDefaultAttribute () - { - /* No idea what the usesCustomPersistence - * default is (I assume false, but its not - * documented) - */ - return (persist == true); - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/PersistenceMode.cs b/mcs/class/System.Web/System.Web.UI/PersistenceMode.cs deleted file mode 100644 index 125ed53ffd..0000000000 --- a/mcs/class/System.Web/System.Web.UI/PersistenceMode.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.PersistenceMode.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Web; - -namespace System.Web.UI -{ - public enum PersistenceMode - { - Attribute = 0, - InnerProperty = 1, - InnerDefaultProperty = 2, - EncodedInnerDefaultProperty = 3, - } -} diff --git a/mcs/class/System.Web/System.Web.UI/SupportsEventValidationAttribute.cs b/mcs/class/System.Web/System.Web.UI/SupportsEventValidationAttribute.cs deleted file mode 100644 index f0f166276d..0000000000 --- a/mcs/class/System.Web/System.Web.UI/SupportsEventValidationAttribute.cs +++ /dev/null @@ -1,43 +0,0 @@ -// -// System.Web.UI.SupportsEventValidationAttribute class -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Security.Permissions; - -namespace System.Web.UI -{ - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class)] - public sealed class SupportsEventValidationAttribute : Attribute - { - public SupportsEventValidationAttribute () - { - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/TemplateInstance.cs b/mcs/class/System.Web/System.Web.UI/TemplateInstance.cs deleted file mode 100644 index 6cf743d637..0000000000 --- a/mcs/class/System.Web/System.Web.UI/TemplateInstance.cs +++ /dev/null @@ -1,38 +0,0 @@ -// -// System.Web.UI.TemplateInstance.cs -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public enum TemplateInstance - { - Multiple = 0, - Single = 1 - } -} - diff --git a/mcs/class/System.Web/System.Web.UI/TemplateInstanceAttribute.cs b/mcs/class/System.Web/System.Web.UI/TemplateInstanceAttribute.cs deleted file mode 100644 index 282915e2fd..0000000000 --- a/mcs/class/System.Web/System.Web.UI/TemplateInstanceAttribute.cs +++ /dev/null @@ -1,88 +0,0 @@ -// -// System.Web.UI.TemplateInstanceAttribute.cs -// -// Noam Lampert (noaml@mainsoft.com) -// -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System.ComponentModel; -using System.Security.Permissions; - -namespace System.Web.UI -{ - // attributes - [AttributeUsage (AttributeTargets.Property)] - public sealed class TemplateInstanceAttribute : Attribute - { - #region Fields - - readonly TemplateInstance _instance; - - public static readonly TemplateInstanceAttribute Single; - public static readonly TemplateInstanceAttribute Multiple; - public static readonly TemplateInstanceAttribute Default; - - #endregion - - #region Constructors - - static TemplateInstanceAttribute () { - Single = new TemplateInstanceAttribute (TemplateInstance.Single); - Multiple = new TemplateInstanceAttribute (TemplateInstance.Multiple); - Default = Multiple; - } - - #endregion - - #region Properties - - public TemplateInstance Instances { get { return _instance; } } - - #endregion - - #region Methods - - public TemplateInstanceAttribute (TemplateInstance instance) { - _instance = instance; - } - - public override bool IsDefaultAttribute () { - return Equals (Default); - } - - public override bool Equals (object obj) { - if (this == obj) - return true; - - TemplateInstanceAttribute other = obj as TemplateInstanceAttribute; - if (obj == null) - return false; - - return Instances == other.Instances; - } - - public override int GetHashCode () { - return (int) Instances; - } - - #endregion - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ThemeableAttribute.cs b/mcs/class/System.Web/System.Web.UI/ThemeableAttribute.cs deleted file mode 100644 index 6dc7d59728..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ThemeableAttribute.cs +++ /dev/null @@ -1,92 +0,0 @@ -// -// System.Web.UI.ThemeableAttribute -// -// Authors: -// Sanjay Gupta (gsanjay@novell.com) -// -// (C) 2004 Novell, Inc. (http://www.novell.com) -// Copyright (C) 2005-2010 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.ComponentModel; -using System.Security.Permissions; - -namespace System.Web.UI -{ - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - // attributes - [AttributeUsage (AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] - public sealed class ThemeableAttribute : Attribute { - - bool themeable; - public ThemeableAttribute (bool themeable) - { - this.themeable = themeable; - } - - public static readonly ThemeableAttribute Default = new ThemeableAttribute (true); - - public static readonly ThemeableAttribute No = new ThemeableAttribute (false); - - public static readonly ThemeableAttribute Yes = new ThemeableAttribute (true); - - public bool Themeable { - get { return themeable; } - } - - public override bool Equals (object obj) - { - if (obj != null && obj is ThemeableAttribute) { - ThemeableAttribute ta = (ThemeableAttribute) obj; - return (this.themeable == ta.themeable); - } - return false; - } - - public override int GetHashCode () - { - return this.themeable.GetHashCode (); - } - - public override bool IsDefaultAttribute() - { - return Equals (Default); - } - - public static bool IsObjectThemeable (object obj) - { - return IsTypeThemeable (obj.GetType ()); - } - - public static bool IsTypeThemeable (Type type) - { - Object [] attributes = type.GetCustomAttributes (typeof (ThemeableAttribute), false); - if (attributes.Length != 0) { - foreach (Attribute attrib in attributes) - if (attrib is ThemeableAttribute) - return true; - } - return false; - } - } -} diff --git a/mcs/class/System.Web/System.Web.UI/ViewStateEncryptionMode.cs b/mcs/class/System.Web/System.Web.UI/ViewStateEncryptionMode.cs deleted file mode 100644 index 03593a04b4..0000000000 --- a/mcs/class/System.Web/System.Web.UI/ViewStateEncryptionMode.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.Configuration.ViewStateEncryptionMode -// -// Authors: -// Chris Toshok (toshok@ximian.com) -// -// (C) 2005-2010 Novell, Inc (http://www.novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web.UI -{ - public enum ViewStateEncryptionMode - { - Auto, - Always, - Never - } -} diff --git a/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs b/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs index 2629156713..abf6238524 100644 --- a/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs +++ b/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs @@ -35,7 +35,7 @@ using System.Collections.Generic; using System.Configuration; using System.IO; using System.Text; -#if !NO_SYSTEM_WEB_DEPENDENCY && NET_4_0 && !MOBILE +#if !NO_SYSTEM_WEB_DEPENDENCY && !MOBILE using System.Web.Configuration; #endif diff --git a/mcs/class/System.Web/System.Web.Util/IWebObjectFactory.cs b/mcs/class/System.Web/System.Web.Util/IWebObjectFactory.cs deleted file mode 100644 index 890d1d5d40..0000000000 --- a/mcs/class/System.Web/System.Web.Util/IWebObjectFactory.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.Web.Util.IWebObjectFactory interface -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - - -namespace System.Web.Util { - - public interface IWebObjectFactory { - - object CreateInstance (); - } -} - diff --git a/mcs/class/System.Web/System.Web.Util/RequestValidationSource.cs b/mcs/class/System.Web/System.Web.Util/RequestValidationSource.cs deleted file mode 100644 index 7153d719d3..0000000000 --- a/mcs/class/System.Web/System.Web.Util/RequestValidationSource.cs +++ /dev/null @@ -1,41 +0,0 @@ -// -// Authors: -// Marek Habersack -// -// Copyright (C) 2010 Novell, Inc (http://novell.com/) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web.Util -{ - public enum RequestValidationSource - { - QueryString, - Form, - Cookies, - Files, - RawUrl, - Path, - PathInfo, - Headers - } -} diff --git a/mcs/class/System.Web/System.Web.Util/UrlUtils.cs b/mcs/class/System.Web/System.Web.Util/UrlUtils.cs index 4f07e83f13..e229a913f8 100644 --- a/mcs/class/System.Web/System.Web.Util/UrlUtils.cs +++ b/mcs/class/System.Web/System.Web.Util/UrlUtils.cs @@ -54,7 +54,7 @@ namespace System.Web.Util { if (path.StartsWith (appvpath)) path = path.Substring (appvpath.Length); - if (path [0] == '/') + if (path.StartsWith("/")) path = path.Length > 1 ? path.Substring (1) : ""; return Canonic (appvpath + "(" + id + ")/" + path); diff --git a/mcs/class/System.Web/System.Web.dll.sources b/mcs/class/System.Web/System.Web.dll.sources index ef284f5be9..4e492be3e4 100644 --- a/mcs/class/System.Web/System.Web.dll.sources +++ b/mcs/class/System.Web/System.Web.dll.sources @@ -73,8 +73,8 @@ System.Web.Compilation/BuildManagerDirectoryBuilder.cs System.Web.Compilation/BuildManagerRemoveEntryEventHandler.cs System.Web.Compilation/BuildManagerHostUnloadEventArgs.cs System.Web.Compilation/BuildManagerHostUnloadEventHandler.cs -System.Web.Compilation/BuildProviderAppliesToAttribute.cs -System.Web.Compilation/BuildProviderAppliesTo.cs +../../../external/referencesource/System.Web/Compilation/BuildProviderAppliesToAttribute.cs +../../../external/referencesource/System.Web/Compilation/BuildProviderAppliesTo.cs System.Web.Compilation/BuildProviderGroup.cs System.Web.Compilation/BuildProviderResultFlags.cs System.Web.Compilation/BuildProvider.cs @@ -87,20 +87,19 @@ System.Web.Compilation/CompilerType.cs System.Web.Compilation/ConnectionStringsExpressionBuilder.cs System.Web.Compilation/DefaultResourceProviderFactory.cs System.Web.Compilation/DefaultResourceProvider.cs -System.Web.Compilation/DesignTimeResourceProviderFactoryAttribute.cs +../../../external/referencesource/System.Web/Compilation/DesignTimeResourceProviderFactoryAttribute.cs System.Web.Compilation/Directive.cs System.Web.Compilation/ExpressionBuilderContext.cs System.Web.Compilation/ExpressionBuilder.cs -System.Web.Compilation/ExpressionEditorAttribute.cs -System.Web.Compilation/ExpressionPrefixAttribute.cs +../../../external/referencesource/System.Web/Compilation/ExpressionEditorAttribute.cs +../../../external/referencesource/System.Web/Compilation/ExpressionPrefixAttribute.cs System.Web.Compilation/ForceCopyBuildProvider.cs System.Web.Compilation/GenericBuildProvider.cs System.Web.Compilation/GlobalAsaxCompiler.cs -System.Web.Compilation/IAssemblyPostProcessor.cs +../../../external/referencesource/System.Web/Compilation/IAssemblyPostProcessor.cs System.Web.Compilation/IgnoreFileBuildProvider.cs -System.Web.Compilation/IImplicitResourceProvider.cs +../../../external/referencesource/System.Web/Compilation/IImplicitResourceProvider.cs System.Web.Compilation/ILocation.cs -System.Web.Compilation/ImplicitResourceKey.cs System.Web.Compilation/IResourceProvider.cs System.Web.Compilation/LinePragmaCodeInfo.cs System.Web.Compilation/Location.cs @@ -140,14 +139,14 @@ System.Web.Configuration_2.0/nBrowser/File.cs System.Web.Configuration_2.0/nBrowser/Build.cs System.Web.Configuration_2.0/nBrowser/Node.cs System.Web.Configuration_2.0/nBrowser/Exception.cs -System.Web.Configuration_2.0/AdapterDictionary.cs +../../../external/referencesource/System.Web/Configuration/AdapterDictionary.cs System.Web.Configuration_2.0/AnonymousIdentificationSection.cs System.Web.Configuration_2.0/ApplicationSettingsConfigurationFileMap.cs System.Web.Configuration_2.0/AssemblyCollection.cs System.Web.Configuration_2.0/AssemblyInfo.cs -System.Web.Configuration_2.0/AuthenticationMode.cs +../../../external/referencesource/System.Web/Configuration/AuthenticationMode.cs System.Web.Configuration_2.0/AuthenticationSection.cs -System.Web.Configuration_2.0/AuthorizationRuleAction.cs +../../../external/referencesource/System.Web/Configuration/AuthorizationRuleAction.cs System.Web.Configuration_2.0/AuthorizationRule.cs System.Web.Configuration_2.0/AuthorizationRuleCollection.cs System.Web.Configuration_2.0/AuthorizationSection.cs @@ -166,9 +165,9 @@ System.Web.Configuration_2.0/Compiler.cs System.Web.Configuration_2.0/CompilerCollection.cs System.Web.Configuration_2.0/CustomError.cs System.Web.Configuration_2.0/CustomErrorCollection.cs -System.Web.Configuration_2.0/CustomErrorsMode.cs +../../../external/referencesource/System.Web/Configuration/CustomErrorsMode.cs System.Web.Configuration_2.0/CustomErrorsSection.cs -System.Web.Configuration_2.0/CustomErrorsRedirectMode.cs +../../../external/referencesource/System.Web/Configuration/CustomErrorsRedirectMode.cs System.Web.Configuration_2.0/DeploymentSection.cs System.Web.Configuration_2.0/EventMappingSettings.cs System.Web.Configuration_2.0/EventMappingSettingsCollection.cs @@ -178,8 +177,8 @@ System.Web.Configuration_2.0/FormsAuthenticationConfiguration.cs System.Web.Configuration_2.0/FormsAuthenticationCredentials.cs System.Web.Configuration_2.0/FormsAuthenticationUser.cs System.Web.Configuration_2.0/FormsAuthenticationUserCollection.cs -System.Web.Configuration_2.0/FormsAuthPasswordFormat.cs -System.Web.Configuration_2.0/FormsProtectionEnum.cs +../../../external/referencesource/System.Web/Configuration/FormsAuthPasswordFormat.cs +../../../external/referencesource/System.Web/Configuration/FormsProtectionEnum.cs System.Web.Configuration_2.0/GlobalizationSection.cs System.Web.Configuration_2.0/HandlersUtil.cs System.Web.Configuration_2.0/HealthMonitoringSection.cs @@ -196,14 +195,14 @@ System.Web.Configuration_2.0/HttpModuleActionCollection.cs System.Web.Configuration_2.0/HttpModulesSection.cs System.Web.Configuration_2.0/HttpRuntimeSection.cs System.Web.Configuration_2.0/IdentitySection.cs -System.Web.Configuration_2.0/IConfigMapPath.cs -System.Web.Configuration_2.0/IConfigMapPathFactory.cs -System.Web.Configuration_2.0/IRemoteWebConfigurationHostServer.cs +../../../external/referencesource/System.Web/Configuration/IConfigMapPath.cs +../../../external/referencesource/System.Web/Configuration/IConfigMapPathFactory.cs +../../../external/referencesource/System.Web/Configuration/IRemoteWebConfigurationHostServer.cs System.Web.Configuration_2.0/LowerCaseStringConverter.cs System.Web.Configuration_2.0/LruCache.cs System.Web.Configuration_2.0/MachineKeyRegistryStorage.cs System.Web.Configuration_2.0/MachineKeySection.cs -System.Web.Configuration_2.0/MachineKeyValidation.cs +../../../external/referencesource/System.Web/Configuration/MachineKeyValidation.cs System.Web.Configuration_2.0/MachineKeyValidationConverter.cs System.Web.Configuration_2.0/MembershipSection.cs System.Web.Configuration_2.0/MonoSettingsSection.cs @@ -214,14 +213,14 @@ System.Web.Configuration_2.0/OutputCacheProfile.cs System.Web.Configuration_2.0/OutputCacheProfileCollection.cs System.Web.Configuration_2.0/OutputCacheSection.cs System.Web.Configuration_2.0/OutputCacheSettingsSection.cs -System.Web.Configuration_2.0/PagesEnableSessionState.cs +../../../external/referencesource/System.Web/Configuration/PagesEnableSessionState.cs System.Web.Configuration_2.0/PagesSection.cs System.Web.Configuration_2.0/PassportAuthentication.cs System.Web.Configuration_2.0/PositiveTimeSpanValidator.cs System.Web.Configuration_2.0/ProcessModelSection.cs -System.Web.Configuration_2.0/ProcessModelComAuthenticationLevel.cs -System.Web.Configuration_2.0/ProcessModelComImpersonationLevel.cs -System.Web.Configuration_2.0/ProcessModelLogLevel.cs +../../../external/referencesource/System.Web/Configuration/ProcessModelComAuthenticationLevel.cs +../../../external/referencesource/System.Web/Configuration/ProcessModelComImpersonationLevel.cs +../../../external/referencesource/System.Web/Configuration/ProcessModelLogLevel.cs System.Web.Configuration_2.0/ProfileGroupSettings.cs System.Web.Configuration_2.0/ProfileGroupSettingsCollection.cs System.Web.Configuration_2.0/ProfilePropertyNameValidator.cs @@ -237,7 +236,7 @@ System.Web.Configuration_2.0/RoleManagerSection.cs System.Web.Configuration_2.0/RootProfilePropertySettingsCollection.cs System.Web.Configuration_2.0/RuleSettings.cs System.Web.Configuration_2.0/RuleSettingsCollection.cs -System.Web.Configuration_2.0/SerializationMode.cs +../../../external/referencesource/System.Web/Configuration/SerializationMode.cs System.Web.Configuration_2.0/SecurityPolicySection.cs System.Web.Configuration_2.0/SessionPageStateSection.cs System.Web.Configuration_2.0/SessionStateSection.cs @@ -245,13 +244,13 @@ System.Web.Configuration_2.0/SiteMapSection.cs System.Web.Configuration_2.0/SqlCacheDependencyDatabase.cs System.Web.Configuration_2.0/SqlCacheDependencyDatabaseCollection.cs System.Web.Configuration_2.0/SqlCacheDependencySection.cs -System.Web.Configuration_2.0/SystemWebCachingSectionGroup.cs +../../../external/referencesource/System.Web/Configuration/SystemWebCachingSectionGroup.cs System.Web.Configuration_2.0/SystemWebSectionGroup.cs System.Web.Configuration_2.0/TagMapCollection.cs System.Web.Configuration_2.0/TagMapInfo.cs System.Web.Configuration_2.0/TagPrefixCollection.cs System.Web.Configuration_2.0/TagPrefixInfo.cs -System.Web.Configuration_2.0/TraceDisplayMode.cs +../../../external/referencesource/System.Web/Configuration/TraceDisplayMode.cs System.Web.Configuration_2.0/TraceSection.cs System.Web.Configuration_2.0/TransformerInfo.cs System.Web.Configuration_2.0/TransformerInfoCollection.cs @@ -263,7 +262,7 @@ System.Web.Configuration_2.0/UrlMappingCollection.cs System.Web.Configuration_2.0/UrlMappingsSection.cs System.Web.Configuration_2.0/VirtualDirectoryMappingCollection.cs System.Web.Configuration_2.0/VirtualDirectoryMapping.cs -System.Web.Configuration_2.0/WebApplicationLevel.cs +../../../external/referencesource/System.Web/Configuration/WebApplicationLevel.cs System.Web.Configuration_2.0/WebConfigurationFileMap.cs System.Web.Configuration_2.0/WebConfigurationHost.cs System.Web.Configuration_2.0/WebConfigurationManager.cs @@ -272,7 +271,7 @@ System.Web.Configuration_2.0/WebContext.cs System.Web.Configuration_2.0/WebPartsPersonalization.cs System.Web.Configuration_2.0/WebPartsPersonalizationAuthorization.cs System.Web.Configuration_2.0/WebPartsSection.cs -System.Web.Configuration_2.0/XhtmlConformanceMode.cs +../../../external/referencesource/System.Web/Configuration/XhtmlConformanceMode.cs System.Web.Configuration_2.0/XhtmlConformanceSection.cs System.Web.Configuration.Internal/IInternalConfigWebHost.cs System.Web/DefaultHttpHandler.cs @@ -296,10 +295,10 @@ System.Web.Hosting/DefaultVirtualFile.cs System.Web.Hosting/DefaultVirtualPathProvider.cs System.Web.Hosting/HostingEnvironment.cs System.Web.Hosting/IAppDomainFactory.cs -System.Web.Hosting/IApplicationHost.cs +../../../external/referencesource/System.Web/Hosting/IApplicationHost.cs System.Web.Hosting/IAppManagerAppDomainFactory.cs System.Web.Hosting/IISAPIRuntime.cs -System.Web.Hosting/IRegisteredObject.cs +../../../external/referencesource/System.Web/Hosting/IRegisteredObject.cs System.Web.Hosting/ISAPIRuntime.cs System.Web.Hosting/SimpleWorkerRequest.cs System.Web.Hosting/VirtualDirectory.cs @@ -352,17 +351,17 @@ System.Web/HttpValidationStatus.cs System.Web/HttpWorkerRequest.cs System.Web/HttpWriter.cs System.Web/IntPtrStream.cs -System.Web/IHttpAsyncHandler.cs -System.Web/IHttpHandler.cs -System.Web/IHttpHandlerFactory.cs +../../../external/referencesource/System.Web/IHttpAsyncHandler.cs +../../../external/referencesource/System.Web/IHttpHandler.cs +../../../external/referencesource/System.Web/IHttpHandlerFactory.cs System.Web/IHttpMapPath.cs -System.Web/IHttpModule.cs +../../../external/referencesource/System.Web/IHttpModule.cs System.Web/IisTraceListener.cs System.Web/IPartitionResolver.cs System.Web/InputFilterStream.cs System.Web/OutputFilterStream.cs -System.Web/RequestNotification.cs -System.Web/RequestNotificationStatus.cs +../../../external/referencesource/System.Web/RequestNotification.cs +../../../external/referencesource/System.Web/RequestNotificationStatus.cs System.Web.Mail/Base64AttachmentEncoder.cs System.Web.Mail/IAttachmentEncoder.cs System.Web.Mail/MailAddressCollection.cs @@ -407,9 +406,9 @@ System.Web.Profile/ProfileAuthenticationOption.cs System.Web.Profile/ProfileAutoSaveEventArgs.cs System.Web.Profile/ProfileAutoSaveEventHandler.cs System.Web.Profile/ProfileBase.cs -System.Web.Profile/ProfileEventArgs.cs -System.Web.Profile/ProfileEventHandler.cs -System.Web.Profile/ProfileGroupBase.cs +../../../external/referencesource/System.Web/Profile/ProfileEventArgs.cs +../../../external/referencesource/System.Web/Profile/ProfileEventHandler.cs +../../../external/referencesource/System.Web/Profile/HttpProfileGroupBase.cs System.Web.Profile/ProfileInfoCollection.cs System.Web.Profile/ProfileInfo.cs System.Web.Profile/ProfileManager.cs @@ -437,19 +436,19 @@ System.Web.Security/DefaultAuthenticationEventHandler.cs System.Web.Security/DefaultAuthenticationModule.cs System.Web.Security/FileAuthorizationModule.cs System.Web.Security/FormsAuthentication.cs -System.Web.Security/FormsAuthenticationEventArgs.cs -System.Web.Security/FormsAuthenticationEventHandler.cs +../../../external/referencesource/System.Web/Security/FormsAuthenticationEventArgs.cs +../../../external/referencesource/System.Web/Security/FormsAuthenticationEventHandler.cs System.Web.Security/FormsAuthenticationModule.cs System.Web.Security/FormsAuthenticationTicket.cs System.Web.Security/FormsIdentity.cs System.Web.Security/Membership.cs System.Web.Security/MembershipHelper.cs -System.Web.Security/PassportAuthenticationEventArgs.cs -System.Web.Security/PassportAuthenticationEventHandler.cs +../../../external/referencesource/System.Web/Security/PassportAuthenticationEventArgs.cs +../../../external/referencesource/System.Web/Security/PassportAuthenticationEventHandler.cs System.Web.Security/PassportAuthenticationModule.cs System.Web.Security/PassportIdentity.cs -System.Web.Security/RoleManagerEventArgs.cs -System.Web.Security/RoleManagerEventHandler.cs +../../../external/referencesource/System.Web/Security/RoleManagerEventArgs.cs +../../../external/referencesource/System.Web/Security/RoleManagerEventHandler.cs System.Web.Security/RoleManagerModule.cs System.Web.Security/RolePrincipal.cs System.Web.Security/RoleProviderCollection.cs @@ -459,15 +458,15 @@ System.Web.Security/SqliteRoleProvider.cs System.Web.Security/SqlMembershipProvider.cs System.Web.Security/SqlRoleProvider.cs System.Web.Security/UrlAuthorizationModule.cs -System.Web.Security/WindowsAuthenticationEventArgs.cs -System.Web.Security/WindowsAuthenticationEventHandler.cs +../../../external/referencesource/System.Web/Security/WindowsAuthenticationEventArgs.cs +../../../external/referencesource/System.Web/Security/WindowsAuthenticationEventHandler.cs System.Web.Security/WindowsAuthenticationModule.cs System.Web/ServerVariablesCollection.cs System.Web.SessionState_2.0/HttpSessionStateContainer.cs System.Web.SessionState_2.0/HttpSessionState.cs System.Web.SessionState_2.0/IHttpSessionState.cs -System.Web.SessionState_2.0/IReadOnlySessionState.cs -System.Web.SessionState_2.0/IRequiresSessionState.cs +../../../external/referencesource/System.Web/State/IReadOnlySessionState.cs +../../../external/referencesource/System.Web/State/IRequiresSessionState.cs System.Web.SessionState_2.0/ISessionIDManager.cs System.Web.SessionState_2.0/ISessionStateItemCollection.cs System.Web.SessionState_2.0/IStateRuntime.cs @@ -497,15 +496,15 @@ System.Web/StaticFileHandler.cs System.Web/StaticSiteMapProvider.cs System.Web/TempFileStream.cs System.Web/TraceContext.cs -System.Web/TraceContextEventArgs.cs -System.Web/TraceContextEventHandler.cs +../../../external/referencesource/System.Web/UI/TraceContextEventArgs.cs +../../../external/referencesource/System.Web/UI/TraceContextEventHandler.cs System.Web/TraceContextRecord.cs System.Web/TraceData.cs System.Web/TraceManager.cs System.Web/TraceMode.cs System.Web.UI.Adapters/ControlAdapter.cs System.Web.UI.Adapters/PageAdapter.cs -System.Web.UI.Adapters/WmlPostFieldType.cs +../../../external/referencesource/System.Web/UI/WebControls/Adapters/WmlPostFieldType.cs System.Web.UI/ApplicationFileParser.cs System.Web.UI/AttributeCollection.cs System.Web.UI/BaseParser.cs @@ -525,9 +524,9 @@ System.Web.UI/CompilationMode.cs System.Web.UI/CompiledBindableTemplateBuilder.cs System.Web.UI/CompiledTemplateBuilder.cs System.Web.UI/ComplexPropertyEntry.cs -System.Web.UI/ConflictOptions.cs -System.Web.UI/ConstructorNeedsTagAttribute.cs -System.Web.UI/ControlBuilderAttribute.cs +../../../external/referencesource/System.Web/UI/ConflictOptions.cs +../../../external/referencesource/System.Web/UI/ConstructorNeedsTagAttribute.cs +../../../external/referencesource/System.Web/UI/ControlBuilderAttribute.cs System.Web.UI/ControlBuilder.cs System.Web.UI/ControlCachePolicy.cs System.Web.UI/ControlCollection.cs @@ -535,20 +534,20 @@ System.Web.UI/Control.cs System.Web.UI/ControlSkin.cs System.Web.UI/ControlSkinDelegate.cs System.Web.UI/ControlValuePropertyAttribute.cs -System.Web.UI/CssClassPropertyAttribute.cs +../../../external/referencesource/System.Web/UI/CssClassPropertyAttribute.cs System.Web.UI/CssStyleCollection.cs System.Web.UI/DataBinder.cs System.Web.UI/DataBindingBuilder.cs System.Web.UI/DataBindingCollection.cs System.Web.UI/DataBinding.cs -System.Web.UI/DataBindingHandlerAttribute.cs +../../../external/referencesource/System.Web/UI/DataBindingHandlerAttribute.cs System.Web.UI/DataBoundLiteralControl.cs System.Web.UI/DataSourceCacheDurationConverter.cs -System.Web.UI/DataSourceCacheExpiry.cs -System.Web.UI/DataSourceCapabilities.cs +../../../external/referencesource/System.Web/UI/DataSourceCacheExpiry.cs +../../../external/referencesource/System.Web/UI/DataSourceCapabilities.cs System.Web.UI/DataSourceControl.cs System.Web.UI/DataSourceControlBuilder.cs -System.Web.UI/DataSourceOperation.cs +../../../external/referencesource/System.Web/UI/DataSourceOperation.cs System.Web.UI/DataSourceSelectArguments.cs System.Web.UI/DataSourceView.cs System.Web.UI/DataSourceViewOperationCallback.cs @@ -562,9 +561,9 @@ System.Web.UI/ExpressionBindingCollection.cs System.Web.UI/ExpressionBinding.cs System.Web.UI/ExtractTemplateValuesMethod.cs System.Web.UI/FileLevelUserControlBuilder.cs -System.Web.UI/FileLevelControlBuilderAttribute.cs +../../../external/referencesource/System.Web/UI/FileLevelControlBuilderAttribute.cs System.Web.UI/FileLevelPageControlBuilder.cs -System.Web.UI/FilterableAttribute.cs +../../../external/referencesource/System.Web/UI/FilterableAttribute.cs System.Web.UI/HiddenFieldPageStatePersister.cs System.Web.UI/HierarchicalDataSourceControl.cs System.Web.UI/HierarchicalDataSourceView.cs @@ -603,52 +602,54 @@ System.Web.UI.HtmlControls/HtmlTableRowCollection.cs System.Web.UI.HtmlControls/HtmlTableRow.cs System.Web.UI.HtmlControls/HtmlTextArea.cs System.Web.UI.HtmlControls/HtmlTitle.cs -System.Web.UI/HtmlTextWriterAttribute.cs +../../../external/referencesource/System.Web/UI/HtmlTextWriterAttribute.cs System.Web.UI/HtmlTextWriter.cs -System.Web.UI/HtmlTextWriterStyle.cs -System.Web.UI/HtmlTextWriterTag.cs -System.Web.UI/IAttributeAccessor.cs -System.Web.UI/IAutoFieldGenerator.cs -System.Web.UI/IBindableControl.cs -System.Web.UI/IBindableTemplate.cs -System.Web.UI/ICallbackEventHandler.cs +../../../external/referencesource/System.Web/UI/HtmlTextWriterStyle.cs +../../../external/referencesource/System.Web/UI/HtmlTextWriterTag.cs +../../../external/referencesource/System.Web/UI/IAttributeAccessor.cs +../../../external/referencesource/System.Web/UI/IAutoFieldGenerator.cs +../../../external/referencesource/System.Web/UI/IBindableControl.cs +../../../external/referencesource/System.Web/UI/IBindableTemplate.cs +../../../external/referencesource/System.Web/UI/ICallbackEventHandler.cs System.Web.UI/ICheckBoxControl.cs -System.Web.UI/IControlBuilderAccessor.cs -System.Web.UI/IControlDesignerAccessor.cs -System.Web.UI/IDataBindingsAccessor.cs -System.Web.UI/IDataItemContainer.cs -System.Web.UI/IDataSource.cs -System.Web.UI/IDataSourceViewSchemaAccessor.cs -System.Web.UI/IDReferencePropertyAttribute.cs +../../../external/referencesource/System.Web/UI/IControlBuilderAccessor.cs +../../../external/referencesource/System.Web/UI/IControlDesignerAccessor.cs +../../../external/referencesource/System.Web/UI/IDataBindingsAccessor.cs +../../../external/referencesource/System.Web/UI/IDataItemContainer.cs +../../../external/referencesource/System.Web/UI/IDataSource.cs +../../../external/referencesource/System.Web/UI/IDataSourceViewSchemaAccessor.cs +../../../external/referencesource/System.Web/UI/IDReferencePropertyAttribute.cs System.Web.UI/IEditableTextControl.cs -System.Web.UI/IExpressionsAccessor.cs -System.Web.UI/IFilterResolutionService.cs +../../../external/referencesource/System.Web/UI/IExpressionsAccessor.cs +../../../external/referencesource/System.Web/UI/IFilterResolutionService.cs System.Web.UI/IgnoreUnknownContentAttribute.cs -System.Web.UI/IHierarchicalDataSource.cs -System.Web.UI/IHierarchicalEnumerable.cs -System.Web.UI/IHierarchyData.cs +../../../external/referencesource/System.Web/UI/IHierarchicalDataSource.cs +../../../external/referencesource/System.Web/UI/IHierarchicalEnumerable.cs +../../../external/referencesource/System.Web/UI/IHierarchyData.cs System.Web.UI/ImageClickEventArgs.cs -System.Web.UI/ImageClickEventHandler.cs +../../../external/referencesource/System.Web/UI/ImageClickEventHandler.cs System.Web.UI/IndexedString.cs -System.Web.UI/INamingContainer.cs -System.Web.UI/INonBindingContainer.cs -System.Web.UI/INavigateUIData.cs -System.Web.UI/IParserAccessor.cs -System.Web.UI/IPostBackDataHandler.cs -System.Web.UI/IPostBackEventHandler.cs -System.Web.UI/IResourceUrlGenerator.cs -System.Web.UI/IStateFormatter.cs -System.Web.UI/IStateManager.cs +../../../external/referencesource/System.Web/UI/INamingContainer.cs +../../../external/referencesource/System.Web/UI/INonBindingContainer.cs +../../../external/referencesource/System.Web/UI/INavigateUIData.cs +../../../external/referencesource/System.Web/UI/IParserAccessor.cs +../../../external/referencesource/System.Web/UI/IPostBackDataHandler.cs +../../../external/referencesource/System.Web/UI/IPostBackEventHandler.cs +../../../external/referencesource/System.Web/UI/IResourceUrlGenerator.cs +../../../external/referencesource/System.Web/UI/IStateFormatter.cs +../../../external/referencesource/System.Web/UI/IStateManager.cs System.Web.UI/IScriptManager.cs -System.Web.UI/IStyleSheet.cs +../../../external/referencesource/System.Web/UI/IStyleSheet.cs +../../../external/referencesource/System.Web/UI/IScriptResourceDefinition.cs +../../../external/referencesource/System.Web/UI/IScriptResourceMapping.cs System.Web.UI/ITagNameToTypeMapper.cs -System.Web.UI/ITemplate.cs +../../../external/referencesource/System.Web/UI/ITemplate.cs System.Web.UI/ITextControl.cs -System.Web.UI/IThemeResolutionService.cs -System.Web.UI/IUrlResolutionService.cs -System.Web.UI/IUserControlDesignerAccessor.cs -System.Web.UI/IUserControlTypeResolutionService.cs -System.Web.UI/IValidator.cs +../../../external/referencesource/System.Web/UI/IThemeResolutionService.cs +../../../external/referencesource/System.Web/UI/IUrlResolutionService.cs +../../../external/referencesource/System.Web/UI/IUserControlDesignerAccessor.cs +../../../external/referencesource/System.Web/UI/IUserControlTypeResolutionService.cs +../../../external/referencesource/System.Web/UI/IValidator.cs System.Web.UI/ListSourceHelper.cs System.Web.UI/LiteralControl.cs System.Web.UI/LosFormatter.cs @@ -657,7 +658,7 @@ System.Web.UI/MasterPage.cs System.Web.UI/MasterPageControlBuilder.cs System.Web.UI/MasterPageParser.cs System.Web.UI/MinimizableAttributeTypeConverter.cs -System.Web.UI/NonVisualControlAttribute.cs +../../../external/referencesource/System.Web/UI/NonVisualControlAttribute.cs System.Web.UI/ObjectConverter.cs System.Web.UI/ObjectPersistData.cs System.Web.UI/ObjectStateFormatter.cs @@ -680,9 +681,9 @@ System.Web.UI/Pair.cs System.Web.UI/ParseChildrenAttribute.cs System.Web.UI/PartialCachingAttribute.cs System.Web.UI/PartialCachingControl.cs -System.Web.UI/PersistChildrenAttribute.cs +../../../external/referencesource/System.Web/UI/PersistChildrenAttribute.cs System.Web.UI/PersistenceModeAttribute.cs -System.Web.UI/PersistenceMode.cs +../../../external/referencesource/System.Web/UI/PersistenceMode.cs System.Web.UI/PostBackOptions.cs System.Web.UI/PropertyConverter.cs System.Web.UI/PropertyEntry.cs @@ -700,18 +701,18 @@ System.Web.UI/StateItem.cs System.Web.UI/StateManagedCollection.cs System.Web.UI/StaticPartialCachingControl.cs System.Web.UI/StringPropertyBuilder.cs -System.Web.UI/SupportsEventValidationAttribute.cs +../../../external/referencesource/System.Web/UI/SupportsEventValidationAttribute.cs System.Web.UI/TagPrefixAttribute.cs System.Web.UI/TemplateBuilder.cs System.Web.UI/TemplateContainerAttribute.cs System.Web.UI/TemplateContentType.cs System.Web.UI/TemplateControl.cs System.Web.UI/TemplateControlParser.cs -System.Web.UI/TemplateInstance.cs -System.Web.UI/TemplateInstanceAttribute.cs +../../../external/referencesource/System.Web/UI/TemplateInstance.cs +../../../external/referencesource/System.Web/UI/TemplateInstanceAttribute.cs System.Web.UI/TemplateParser.cs System.Web.UI/TemplatePropertyEntry.cs -System.Web.UI/ThemeableAttribute.cs +../../../external/referencesource/System.Web/UI/ThemeableAttribute.cs System.Web.UI/ThemeProvider.cs System.Web.UI/ToolboxDataAttribute.cs System.Web.UI/Triplet.cs @@ -727,7 +728,7 @@ System.Web.UI/VerificationAttribute.cs System.Web.UI/VerificationConditionalOperator.cs System.Web.UI/VerificationReportLevel.cs System.Web.UI/VerificationRule.cs -System.Web.UI/ViewStateEncryptionMode.cs +../../../external/referencesource/System.Web/UI/ViewStateEncryptionMode.cs System.Web.UI/ViewStateException.cs System.Web.UI/ViewStateModeByIdAttribute.cs System.Web.UI/VirtualReferenceType.cs @@ -739,12 +740,12 @@ System.Web.UI.WebControls.Adapters/WebControlAdapter.cs System.Web.UI.WebControls/AccessDataSource.cs System.Web.UI.WebControls/AccessDataSourceView.cs System.Web.UI.WebControls/AdCreatedEventArgs.cs -System.Web.UI.WebControls/AdCreatedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/AdCreatedEventHandler.cs System.Web.UI.WebControls/AdRotator.cs System.Web.UI.WebControls/AssociatedControlConverter.cs -System.Web.UI.WebControls/AuthenticateEventArgs.cs -System.Web.UI.WebControls/AuthenticateEventHandler.cs -System.Web.UI.WebControls/AutoCompleteType.cs +../../../external/referencesource/System.Web/UI/WebControls/AuthenticateEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/AuthenticateEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/AutoCompleteType.cs System.Web.UI.WebControls/AutoGeneratedField.cs System.Web.UI.WebControls/AutoGeneratedFieldProperties.cs System.Web.UI.WebControls/BaseCompareValidator.cs @@ -752,23 +753,23 @@ System.Web.UI.WebControls/BaseDataBoundControl.cs System.Web.UI.WebControls/BaseDataList.cs System.Web.UI.WebControls/BaseMenuRenderer.cs System.Web.UI.WebControls/BaseValidator.cs -System.Web.UI.WebControls/BorderStyle.cs +../../../external/referencesource/System.Web/UI/WebControls/BorderStyle.cs System.Web.UI.WebControls/BoundColumn.cs System.Web.UI.WebControls/BoundField.cs System.Web.UI.WebControls/BulletedList.cs System.Web.UI.WebControls/BulletedListDisplayMode.cs -System.Web.UI.WebControls/BulletedListEventArgs.cs -System.Web.UI.WebControls/BulletedListEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/BulletedListEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/BulletedListEventHandler.cs System.Web.UI.WebControls/BulletStyle.cs System.Web.UI.WebControls/ButtonColumn.cs -System.Web.UI.WebControls/ButtonColumnType.cs +../../../external/referencesource/System.Web/UI/WebControls/ButtonColumnType.cs System.Web.UI.WebControls/Button.cs System.Web.UI.WebControls/ButtonFieldBase.cs System.Web.UI.WebControls/ButtonField.cs -System.Web.UI.WebControls/ButtonType.cs +../../../external/referencesource/System.Web/UI/WebControls/ButtonType.cs System.Web.UI.WebControls/Calendar.cs System.Web.UI.WebControls/CalendarDay.cs -System.Web.UI.WebControls/CalendarSelectionMode.cs +../../../external/referencesource/System.Web/UI/WebControls/CalendarSelectionMode.cs System.Web.UI.WebControls/ChangePassword.cs System.Web.UI.WebControls/CheckBox.cs System.Web.UI.WebControls/CheckBoxField.cs @@ -776,8 +777,8 @@ System.Web.UI.WebControls/CheckBoxList.cs System.Web.UI.WebControls/ChildTable.cs System.Web.UI.WebControls/CircleHotSpot.cs System.Web.UI.WebControls/CollectionDataSource.cs -System.Web.UI.WebControls/CommandEventArgs.cs -System.Web.UI.WebControls/CommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/CommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/CommandEventHandler.cs System.Web.UI.WebControls/CommandField.cs System.Web.UI.WebControls/CompareValidator.cs System.Web.UI.WebControls/CompleteWizardStep.cs @@ -786,165 +787,165 @@ System.Web.UI.WebControls/CompositeDataBoundControl.cs System.Web.UI.WebControls/ContainedTable.cs System.Web.UI.WebControls/ContentControlBuilderInternal.cs System.Web.UI.WebControls/Content.cs -System.Web.UI.WebControls/ContentDirection.cs +../../../external/referencesource/System.Web/UI/WebControls/ContentDirection.cs System.Web.UI.WebControls/ContentPlaceHolderBuilder.cs System.Web.UI.WebControls/ContentPlaceHolder.cs System.Web.UI.WebControls/ControlIDConverter.cs System.Web.UI.WebControls/ControlParameter.cs System.Web.UI.WebControls/ControlPropertyNameConverter.cs System.Web.UI.WebControls/CookieParameter.cs -System.Web.UI.WebControls/CreateUserErrorEventArgs.cs -System.Web.UI.WebControls/CreateUserErrorEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/CreateUserErrorEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/CreateUserErrorEventHandler.cs System.Web.UI.WebControls/CreateUserWizard.cs System.Web.UI.WebControls/CreateUserWizardStep.cs System.Web.UI.WebControls/CustomValidator.cs System.Web.UI.WebControls/DataBoundControl.cs -System.Web.UI.WebControls/DataBoundControlMode.cs +../../../external/referencesource/System.Web/UI/WebControls/DataBoundControlMode.cs System.Web.UI.WebControls/DataControlButton.cs -System.Web.UI.WebControls/DataControlCellType.cs +../../../external/referencesource/System.Web/UI/WebControls/DataControlCellType.cs System.Web.UI.WebControls/DataControlCommands.cs System.Web.UI.WebControls/DataControlFieldCell.cs System.Web.UI.WebControls/DataControlFieldCollection.cs System.Web.UI.WebControls/DataControlField.cs System.Web.UI.WebControls/DataControlFieldHeaderCell.cs -System.Web.UI.WebControls/DataControlRowState.cs -System.Web.UI.WebControls/DataControlRowType.cs +../../../external/referencesource/System.Web/UI/WebControls/DataControlRowState.cs +../../../external/referencesource/System.Web/UI/WebControls/DataControlRowType.cs System.Web.UI.WebControls/DataGridColumnCollection.cs System.Web.UI.WebControls/DataGridColumn.cs -System.Web.UI.WebControls/DataGridCommandEventArgs.cs -System.Web.UI.WebControls/DataGridCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridCommandEventHandler.cs System.Web.UI.WebControls/DataGrid.cs System.Web.UI.WebControls/DataGridItemCollection.cs System.Web.UI.WebControls/DataGridItem.cs -System.Web.UI.WebControls/DataGridItemEventArgs.cs -System.Web.UI.WebControls/DataGridItemEventHandler.cs -System.Web.UI.WebControls/DataGridPageChangedEventArgs.cs -System.Web.UI.WebControls/DataGridPageChangedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridItemEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridItemEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridPageChangedEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridPageChangedEventHandler.cs System.Web.UI.WebControls/DataGridPagerStyle.cs -System.Web.UI.WebControls/DataGridSortCommandEventArgs.cs -System.Web.UI.WebControls/DataGridSortCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridSortCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataGridSortCommandEventHandler.cs System.Web.UI.WebControls/DataKeyArray.cs System.Web.UI.WebControls/DataKeyCollection.cs System.Web.UI.WebControls/DataKey.cs -System.Web.UI.WebControls/DataListCommandEventArgs.cs -System.Web.UI.WebControls/DataListCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataListCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataListCommandEventHandler.cs System.Web.UI.WebControls/DataList.cs System.Web.UI.WebControls/DataListItemCollection.cs System.Web.UI.WebControls/DataListItem.cs -System.Web.UI.WebControls/DataListItemEventArgs.cs -System.Web.UI.WebControls/DataListItemEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DataListItemEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DataListItemEventHandler.cs System.Web.UI.WebControls/DataSourceCacheManager.cs -System.Web.UI.WebControls/DayNameFormat.cs +../../../external/referencesource/System.Web/UI/WebControls/DayNameFormat.cs System.Web.UI.WebControls/DayRenderEventArgs.cs -System.Web.UI.WebControls/DayRenderEventHandler.cs -System.Web.UI.WebControls/DetailsViewCommandEventArgs.cs -System.Web.UI.WebControls/DetailsViewCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DayRenderEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewCommandEventHandler.cs System.Web.UI.WebControls/DetailsView.cs System.Web.UI.WebControls/DetailsViewDeletedEventArgs.cs -System.Web.UI.WebControls/DetailsViewDeletedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewDeletedEventHandler.cs System.Web.UI.WebControls/DetailsViewDeleteEventArgs.cs -System.Web.UI.WebControls/DetailsViewDeleteEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewDeleteEventHandler.cs System.Web.UI.WebControls/DetailsViewInsertedEventArgs.cs -System.Web.UI.WebControls/DetailsViewInsertedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewInsertedEventHandler.cs System.Web.UI.WebControls/DetailsViewInsertEventArgs.cs -System.Web.UI.WebControls/DetailsViewInsertEventHandler.cs -System.Web.UI.WebControls/DetailsViewMode.cs -System.Web.UI.WebControls/DetailsViewModeEventArgs.cs -System.Web.UI.WebControls/DetailsViewModeEventHandler.cs -System.Web.UI.WebControls/DetailsViewPageEventArgs.cs -System.Web.UI.WebControls/DetailsViewPageEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewInsertEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewMode.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewModeEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewModeEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewPageEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewPageEventHandler.cs System.Web.UI.WebControls/DetailsViewPagerRow.cs System.Web.UI.WebControls/DetailsViewRowCollection.cs System.Web.UI.WebControls/DetailsViewRow.cs System.Web.UI.WebControls/DetailsViewUpdatedEventArgs.cs -System.Web.UI.WebControls/DetailsViewUpdatedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewUpdatedEventHandler.cs System.Web.UI.WebControls/DetailsViewUpdateEventArgs.cs -System.Web.UI.WebControls/DetailsViewUpdateEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/DetailsViewUpdateEventHandler.cs System.Web.UI.WebControls/DropDownList.cs System.Web.UI.WebControls/EditCommandColumn.cs System.Web.UI.WebControls/EmbeddedMailObject.cs System.Web.UI.WebControls/EmbeddedMailObjectsCollection.cs System.Web.UI.WebControls/FileUpload.cs -System.Web.UI.WebControls/FirstDayOfWeek.cs +../../../external/referencesource/System.Web/UI/WebControls/FirstDayOfWeek.cs System.Web.UI.WebControls/FontInfo.cs System.Web.UI.WebControls/FontNamesConverter.cs -System.Web.UI.WebControls/FontSize.cs +../../../external/referencesource/System.Web/UI/WebControls/FontSize.cs System.Web.UI.WebControls/FontUnitConverter.cs System.Web.UI.WebControls/FontUnit.cs System.Web.UI.WebControls/FormParameter.cs System.Web.UI.WebControls/FormViewCommandEventArgs.cs -System.Web.UI.WebControls/FormViewCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewCommandEventHandler.cs System.Web.UI.WebControls/FormView.cs System.Web.UI.WebControls/FormViewDeletedEventArgs.cs -System.Web.UI.WebControls/FormViewDeletedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewDeletedEventHandler.cs System.Web.UI.WebControls/FormViewDeleteEventArgs.cs -System.Web.UI.WebControls/FormViewDeleteEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewDeleteEventHandler.cs System.Web.UI.WebControls/FormViewInsertedEventArgs.cs -System.Web.UI.WebControls/FormViewInsertedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewInsertedEventHandler.cs System.Web.UI.WebControls/FormViewInsertEventArgs.cs -System.Web.UI.WebControls/FormViewInsertEventHandler.cs -System.Web.UI.WebControls/FormViewMode.cs -System.Web.UI.WebControls/FormViewModeEventArgs.cs -System.Web.UI.WebControls/FormViewModeEventHandler.cs -System.Web.UI.WebControls/FormViewPageEventArgs.cs -System.Web.UI.WebControls/FormViewPageEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewInsertEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewMode.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewModeEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewModeEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewPageEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewPageEventHandler.cs System.Web.UI.WebControls/FormViewRow.cs System.Web.UI.WebControls/FormViewPagerRow.cs System.Web.UI.WebControls/FormViewUpdatedEventArgs.cs -System.Web.UI.WebControls/FormViewUpdatedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewUpdatedEventHandler.cs System.Web.UI.WebControls/FormViewUpdateEventArgs.cs -System.Web.UI.WebControls/FormViewUpdateEventHandler.cs -System.Web.UI.WebControls/GridLines.cs -System.Web.UI.WebControls/GridViewCancelEditEventArgs.cs -System.Web.UI.WebControls/GridViewCancelEditEventHandler.cs -System.Web.UI.WebControls/GridViewCommandEventArgs.cs -System.Web.UI.WebControls/GridViewCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/FormViewUpdateEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridLines.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewCancelEditEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewCancelEditEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewCommandEventHandler.cs System.Web.UI.WebControls/GridView.cs System.Web.UI.WebControls/GridViewDeletedEventArgs.cs -System.Web.UI.WebControls/GridViewDeletedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewDeletedEventHandler.cs System.Web.UI.WebControls/GridViewDeleteEventArgs.cs -System.Web.UI.WebControls/GridViewDeleteEventHandler.cs -System.Web.UI.WebControls/GridViewEditEventArgs.cs -System.Web.UI.WebControls/GridViewEditEventHandler.cs -System.Web.UI.WebControls/GridViewPageEventArgs.cs -System.Web.UI.WebControls/GridViewPageEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewDeleteEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewEditEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewEditEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewPageEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewPageEventHandler.cs System.Web.UI.WebControls/GridViewRowCollection.cs System.Web.UI.WebControls/GridViewRow.cs -System.Web.UI.WebControls/GridViewRowEventArgs.cs -System.Web.UI.WebControls/GridViewRowEventHandler.cs -System.Web.UI.WebControls/GridViewSelectEventArgs.cs -System.Web.UI.WebControls/GridViewSelectEventHandler.cs -System.Web.UI.WebControls/GridViewSortEventArgs.cs -System.Web.UI.WebControls/GridViewSortEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewRowEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewRowEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewSelectEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewSelectEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewSortEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewSortEventHandler.cs System.Web.UI.WebControls/GridViewUpdatedEventArgs.cs -System.Web.UI.WebControls/GridViewUpdatedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewUpdatedEventHandler.cs System.Web.UI.WebControls/GridViewUpdateEventArgs.cs -System.Web.UI.WebControls/GridViewUpdateEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/GridViewUpdateEventHandler.cs System.Web.UI.WebControls/HiddenField.cs System.Web.UI.WebControls/HierarchicalDataBoundControl.cs System.Web.UI.WebControls/HorizontalAlignConverter.cs -System.Web.UI.WebControls/HorizontalAlign.cs +../../../external/referencesource/System.Web/UI/WebControls/HorizontalAlign.cs System.Web.UI.WebControls/HotSpotCollection.cs System.Web.UI.WebControls/HotSpot.cs -System.Web.UI.WebControls/HotSpotMode.cs +../../../external/referencesource/System.Web/UI/WebControls/HotSpotMode.cs System.Web.UI.WebControls/HyperLinkColumn.cs System.Web.UI.WebControls/HyperLinkControlBuilder.cs System.Web.UI.WebControls/HyperLink.cs System.Web.UI.WebControls/HyperLinkField.cs -System.Web.UI.WebControls/IButtonControl.cs -System.Web.UI.WebControls/ICallbackContainer.cs -System.Web.UI.WebControls/ICompositeControlDesignerAccessor.cs -System.Web.UI.WebControls/ImageAlign.cs +../../../external/referencesource/System.Web/UI/WebControls/IButtonControl.cs +../../../external/referencesource/System.Web/UI/WebControls/ICallbackContainer.cs +../../../external/referencesource/System.Web/UI/WebControls/ICompositeControlDesignerAccessor.cs +../../../external/referencesource/System.Web/UI/WebControls/ImageAlign.cs System.Web.UI.WebControls/ImageButton.cs System.Web.UI.WebControls/Image.cs System.Web.UI.WebControls/ImageField.cs System.Web.UI.WebControls/ImageMap.cs -System.Web.UI.WebControls/ImageMapEventArgs.cs -System.Web.UI.WebControls/ImageMapEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ImageMapEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ImageMapEventHandler.cs System.Web.UI.WebControls/IMenuRenderer.cs -System.Web.UI.WebControls/IPersistedSelector.cs +../../../external/referencesource/System.Web/UI/WebControls/IPersistedSelector.cs System.Web.UI.WebControls/IPostBackContainer.cs -System.Web.UI.WebControls/IRepeatInfoUser.cs +../../../external/referencesource/System.Web/UI/WebControls/IRepeatInfoUser.cs System.Web.UI.WebControls/LabelControlBuilder.cs System.Web.UI.WebControls/Label.cs System.Web.UI.WebControls/LinkButtonControlBuilder.cs @@ -954,27 +955,27 @@ System.Web.UI.WebControls/ListControl.cs System.Web.UI.WebControls/ListItemCollection.cs System.Web.UI.WebControls/ListItemControlBuilder.cs System.Web.UI.WebControls/ListItem.cs -System.Web.UI.WebControls/ListItemType.cs -System.Web.UI.WebControls/ListSelectionMode.cs +../../../external/referencesource/System.Web/UI/WebControls/ListItemType.cs +../../../external/referencesource/System.Web/UI/WebControls/ListSelectionMode.cs System.Web.UI.WebControls/LiteralControlBuilder.cs System.Web.UI.WebControls/Literal.cs -System.Web.UI.WebControls/LiteralMode.cs +../../../external/referencesource/System.Web/UI/WebControls/LiteralMode.cs System.Web.UI.WebControls/Localize.cs System.Web.UI.WebControls/Login.cs -System.Web.UI.WebControls/LoginCancelEventArgs.cs -System.Web.UI.WebControls/LoginCancelEventHandler.cs -System.Web.UI.WebControls/LoginFailureAction.cs +../../../external/referencesource/System.Web/UI/WebControls/LoginCancelEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/LoginCancelEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/LoginFailureAction.cs System.Web.UI.WebControls/LoginName.cs System.Web.UI.WebControls/LoginStatus.cs System.Web.UI.WebControls/LoginTextLayout.cs System.Web.UI.WebControls/LoginView.cs -System.Web.UI.WebControls/LogoutAction.cs +../../../external/referencesource/System.Web/UI/WebControls/LogoutAction.cs System.Web.UI.WebControls/MailDefinition.cs -System.Web.UI.WebControls/MailMessageEventArgs.cs -System.Web.UI.WebControls/MailMessageEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/MailMessageEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/MailMessageEventHandler.cs System.Web.UI.WebControls/Menu.cs -System.Web.UI.WebControls/MenuEventArgs.cs -System.Web.UI.WebControls/MenuEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/MenuEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/MenuEventHandler.cs System.Web.UI.WebControls/MenuItemBindingCollection.cs System.Web.UI.WebControls/MenuItemBinding.cs System.Web.UI.WebControls/MenuItemCollection.cs @@ -983,37 +984,37 @@ System.Web.UI.WebControls/MenuItemStyleCollection.cs System.Web.UI.WebControls/MenuItemStyle.cs System.Web.UI.WebControls/MenuItemTemplateContainer.cs System.Web.UI.WebControls/MenuTableRenderer.cs -System.Web.UI.WebControls/MonthChangedEventArgs.cs -System.Web.UI.WebControls/MonthChangedEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/MonthChangedEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/MonthChangedEventHandler.cs System.Web.UI.WebControls/MultiView.cs System.Web.UI.WebControls/MultiViewControlBuilder.cs -System.Web.UI.WebControls/NextPrevFormat.cs +../../../external/referencesource/System.Web/UI/WebControls/NextPrevFormat.cs System.Web.UI.WebControls/ObjectDataSource.cs -System.Web.UI.WebControls/ObjectDataSourceDisposingEventArgs.cs -System.Web.UI.WebControls/ObjectDataSourceDisposingEventHandler.cs -System.Web.UI.WebControls/ObjectDataSourceEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceDisposingEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceDisposingEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceEventArgs.cs System.Web.UI.WebControls/ObjectDataSourceEventHandler.cs -System.Web.UI.WebControls/ObjectDataSourceFilteringEventArgs.cs -System.Web.UI.WebControls/ObjectDataSourceFilteringEventHandler.cs -System.Web.UI.WebControls/ObjectDataSourceMethodEventArgs.cs -System.Web.UI.WebControls/ObjectDataSourceMethodEventHandler.cs -System.Web.UI.WebControls/ObjectDataSourceSelectingEventArgs.cs -System.Web.UI.WebControls/ObjectDataSourceSelectingEventHandler.cs -System.Web.UI.WebControls/ObjectDataSourceStatusEventArgs.cs -System.Web.UI.WebControls/ObjectDataSourceStatusEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceFilteringEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceFilteringEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceMethodEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceMethodEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceSelectingEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceSelectingEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceStatusEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/ObjectDataSourceStatusEventHandler.cs System.Web.UI.WebControls/ObjectDataSourceView.cs -System.Web.UI.WebControls/Orientation.cs +../../../external/referencesource/System.Web/UI/WebControls/Orientation.cs System.Web.UI.WebControls/PagedDataSource.cs -System.Web.UI.WebControls/PagerButtons.cs -System.Web.UI.WebControls/PagerMode.cs -System.Web.UI.WebControls/PagerPosition.cs +../../../external/referencesource/System.Web/UI/WebControls/PagerButtons.cs +../../../external/referencesource/System.Web/UI/WebControls/PagerMode.cs +../../../external/referencesource/System.Web/UI/WebControls/PagerPosition.cs System.Web.UI.WebControls/PagerSettings.cs System.Web.UI.WebControls/Panel.cs System.Web.UI.WebControls/PanelStyle.cs System.Web.UI.WebControls/ParameterCollection.cs System.Web.UI.WebControls/Parameter.cs System.Web.UI.WebControls/PasswordRecovery.cs -System.Web.UI.WebControls/PathDirection.cs +../../../external/referencesource/System.Web/UI/WebControls/PathDirection.cs System.Web.UI.WebControls/PlaceHolderControlBuilder.cs System.Web.UI.WebControls/PlaceHolder.cs System.Web.UI.WebControls/PolygonHotSpot.cs @@ -1024,55 +1025,55 @@ System.Web.UI.WebControls/RadioButtonList.cs System.Web.UI.WebControls/RangeValidator.cs System.Web.UI.WebControls/RectangleHotSpot.cs System.Web.UI.WebControls/RegularExpressionValidator.cs -System.Web.UI.WebControls/RepeatDirection.cs -System.Web.UI.WebControls/RepeaterCommandEventArgs.cs -System.Web.UI.WebControls/RepeaterCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeatDirection.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeaterCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeaterCommandEventHandler.cs System.Web.UI.WebControls/Repeater.cs System.Web.UI.WebControls/RepeaterItemCollection.cs System.Web.UI.WebControls/RepeaterItem.cs -System.Web.UI.WebControls/RepeaterItemEventArgs.cs -System.Web.UI.WebControls/RepeaterItemEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeaterItemEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeaterItemEventHandler.cs System.Web.UI.WebControls/RepeatInfo.cs -System.Web.UI.WebControls/RepeatLayout.cs +../../../external/referencesource/System.Web/UI/WebControls/RepeatLayout.cs System.Web.UI.WebControls/RequiredFieldValidator.cs System.Web.UI.WebControls/RoleGroup.cs System.Web.UI.WebControls/RoleGroupCollection.cs System.Web.UI.WebControls/ScrollBars.cs System.Web.UI.WebControls/SelectedDatesCollection.cs System.Web.UI.WebControls/SendMailErrorEventArgs.cs -System.Web.UI.WebControls/SendMailErrorEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SendMailErrorEventHandler.cs System.Web.UI.WebControls/ServerValidateEventArgs.cs -System.Web.UI.WebControls/ServerValidateEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/ServerValidateEventHandler.cs System.Web.UI.WebControls/SessionParameter.cs System.Web.UI.WebControls/SiteMapDataSource.cs System.Web.UI.WebControls/SiteMapDataSourceView.cs System.Web.UI.WebControls/SiteMapHierarchicalDataSourceView.cs System.Web.UI.WebControls/SiteMapNodeItem.cs -System.Web.UI.WebControls/SiteMapNodeItemEventArgs.cs -System.Web.UI.WebControls/SiteMapNodeItemEventHandler.cs -System.Web.UI.WebControls/SiteMapNodeItemType.cs +../../../external/referencesource/System.Web/UI/WebControls/SiteMapNodeItemEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/SiteMapNodeItemEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SiteMapNodeItemType.cs System.Web.UI.WebControls/SiteMapPath.cs System.Web.UI.WebControls/SiteMapViewType.cs -System.Web.UI.WebControls/SortDirection.cs +../../../external/referencesource/System.Web/UI/WebControls/SortDirection.cs System.Web.UI.WebControls/StyleCollection.cs -System.Web.UI.WebControls/SqlDataSourceCommandEventArgs.cs -System.Web.UI.WebControls/SqlDataSourceCommandEventHandler.cs -System.Web.UI.WebControls/SqlDataSourceCommandType.cs -System.Web.UI.WebControls/SqlDataSourceFilteringEventHandler.cs -System.Web.UI.WebControls/SqlDataSourceFilteringEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceCommandEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceCommandEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceCommandType.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceFilteringEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceFilteringEventArgs.cs System.Web.UI.WebControls/SqlDataSource.cs -System.Web.UI.WebControls/SqlDataSourceMode.cs -System.Web.UI.WebControls/SqlDataSourceSelectingEventHandler.cs -System.Web.UI.WebControls/SqlDataSourceSelectingEventArgs.cs -System.Web.UI.WebControls/SqlDataSourceStatusEventArgs.cs -System.Web.UI.WebControls/SqlDataSourceStatusEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceMode.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceSelectingEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceSelectingEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceStatusEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/SqlDataSourceStatusEventHandler.cs System.Web.UI.WebControls/SqlDataSourceView.cs System.Web.UI.WebControls/StringArrayConverter.cs System.Web.UI.WebControls/Style.cs System.Web.UI.WebControls/SubMenuStyleCollection.cs System.Web.UI.WebControls/SubMenuStyle.cs System.Web.UI.WebControls/Substitution.cs -System.Web.UI.WebControls/TableCaptionAlign.cs +../../../external/referencesource/System.Web/UI/WebControls/TableCaptionAlign.cs System.Web.UI.WebControls/TableCellCollection.cs System.Web.UI.WebControls/TableCellControlBuilder.cs System.Web.UI.WebControls/TableCell.cs @@ -1080,48 +1081,48 @@ System.Web.UI.WebControls/Table.cs System.Web.UI.WebControls/TableFooterRow.cs System.Web.UI.WebControls/TableHeaderCell.cs System.Web.UI.WebControls/TableHeaderRow.cs -System.Web.UI.WebControls/TableHeaderScope.cs +../../../external/referencesource/System.Web/UI/WebControls/TableHeaderScope.cs System.Web.UI.WebControls/TableItemStyle.cs System.Web.UI.WebControls/TableRowCollection.cs System.Web.UI.WebControls/TableRow.cs -System.Web.UI.WebControls/TableRowSection.cs +../../../external/referencesource/System.Web/UI/WebControls/TableRowSection.cs System.Web.UI.WebControls/TableSectionStyle.cs System.Web.UI.WebControls/TableStyle.cs System.Web.UI.WebControls/TargetConverter.cs System.Web.UI.WebControls/TemplateColumn.cs System.Web.UI.WebControls/TemplatedWizardStep.cs System.Web.UI.WebControls/TemplateField.cs -System.Web.UI.WebControls/TextAlign.cs +../../../external/referencesource/System.Web/UI/WebControls/TextAlign.cs System.Web.UI.WebControls/TextBoxControlBuilder.cs System.Web.UI.WebControls/TextBox.cs -System.Web.UI.WebControls/TextBoxMode.cs -System.Web.UI.WebControls/TitleFormat.cs +../../../external/referencesource/System.Web/UI/WebControls/TextBoxMode.cs +../../../external/referencesource/System.Web/UI/WebControls/TitleFormat.cs System.Web.UI.WebControls/TreeNodeBindingCollection.cs System.Web.UI.WebControls/TreeNodeBinding.cs System.Web.UI.WebControls/TreeNodeCollection.cs System.Web.UI.WebControls/TreeNode.cs -System.Web.UI.WebControls/TreeNodeEventArgs.cs -System.Web.UI.WebControls/TreeNodeEventHandler.cs -System.Web.UI.WebControls/TreeNodeSelectAction.cs +../../../external/referencesource/System.Web/UI/WebControls/TreeNodeEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/TreeNodeEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/TreeNodeSelectAction.cs System.Web.UI.WebControls/TreeNodeStyleCollection.cs System.Web.UI.WebControls/TreeNodeStyle.cs System.Web.UI.WebControls/TreeNodeTypes.cs System.Web.UI.WebControls/TreeView.cs -System.Web.UI.WebControls/TreeViewImageSet.cs +../../../external/referencesource/System.Web/UI/WebControls/TreeViewImageSet.cs System.Web.UI.WebControls/UnitConverter.cs System.Web.UI.WebControls/Unit.cs -System.Web.UI.WebControls/UnitType.cs +../../../external/referencesource/System.Web/UI/WebControls/UnitType.cs System.Web.UI.WebControls/ValidatedControlConverter.cs -System.Web.UI.WebControls/ValidationCompareOperator.cs -System.Web.UI.WebControls/ValidationDataType.cs +../../../external/referencesource/System.Web/UI/WebControls/ValidationCompareOperator.cs +../../../external/referencesource/System.Web/UI/WebControls/ValidationDataType.cs System.Web.UI.WebControls/ValidationSummary.cs -System.Web.UI.WebControls/ValidationSummaryDisplayMode.cs -System.Web.UI.WebControls/ValidatorDisplay.cs +../../../external/referencesource/System.Web/UI/WebControls/ValidationSummaryDisplayMode.cs +../../../external/referencesource/System.Web/UI/WebControls/ValidatorDisplay.cs System.Web.UI.WebControls/VerticalAlignConverter.cs -System.Web.UI.WebControls/VerticalAlign.cs +../../../external/referencesource/System.Web/UI/WebControls/VerticalAlign.cs System.Web.UI.WebControls/ViewCollection.cs System.Web.UI.WebControls/View.cs -System.Web.UI.WebControls/WebColorConverter.cs +../../../external/referencesource/System.Web/UI/WebControls/WebColorConverter.cs System.Web.UI.WebControls/WebControl.cs System.Web.UI.WebControls.WebParts/ConnectionConsumerCallback.cs System.Web.UI.WebControls.WebParts/ConnectionInterfaceCollection.cs @@ -1132,38 +1133,39 @@ System.Web.UI.WebControls.WebParts/ConsumerConnectionPoint.cs System.Web.UI.WebControls.WebParts/EditorPart.cs System.Web.UI.WebControls.WebParts/EditorPartCollection.cs System.Web.UI.WebControls.WebParts/IPersonalizable.cs -System.Web.UI.WebControls.WebParts/ITrackingPersonalizable.cs -System.Web.UI.WebControls.WebParts/ITransformerConfigurationControl.cs -System.Web.UI.WebControls.WebParts/IVersioningPersonalizable.cs -System.Web.UI.WebControls.WebParts/IWebActionable.cs -System.Web.UI.WebControls.WebParts/IWebEditable.cs -System.Web.UI.WebControls.WebParts/IWebPart.cs -System.Web.UI.WebControls.WebParts/IWebPartHttpHandler.cs -System.Web.UI.WebControls.WebParts/IWebPartField.cs -System.Web.UI.WebControls.WebParts/IWebPartParameters.cs -System.Web.UI.WebControls.WebParts/IWebPartRow.cs -System.Web.UI.WebControls.WebParts/IWebPartTable.cs +../../../external/referencesource/System.Web/UI/WebParts/ITrackingPersonalizable.cs +../../../external/referencesource/System.Web/UI/WebParts/ITransformerConfigurationControl.cs +../../../external/referencesource/System.Web/UI/WebParts/IVersioningPersonalizable.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebActionable.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebEditable.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPart.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPartHttpHandler.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPartField.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPartParameters.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPartRow.cs +../../../external/referencesource/System.Web/UI/WebParts/IWebPartTable.cs System.Web.UI.WebControls.WebParts/Part.cs -System.Web.UI.WebControls.WebParts/PartChromeState.cs -System.Web.UI.WebControls.WebParts/PartChromeType.cs +../../../external/referencesource/System.Web/UI/WebParts/ParametersCallback.cs +../../../external/referencesource/System.Web/UI/WebParts/PartChromeState.cs +../../../external/referencesource/System.Web/UI/WebParts/PartChromeType.cs System.Web.UI.WebControls.WebParts/PersonalizableAttribute.cs -System.Web.UI.WebControls.WebParts/PersonalizationScope.cs +../../../external/referencesource/System.Web/UI/WebParts/PersonalizationScope.cs System.Web.UI.WebControls.WebParts/ProviderConnectionPoint.cs System.Web.UI.WebControls.WebParts/TypeCollection.cs System.Web.UI.WebControls.WebParts/WebPart.cs System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventArgs.cs -System.Web.UI.WebControls.WebParts/WebPartAuthorizationEventHandler.cs -System.Web.UI.WebControls.WebParts/WebPartCancelEventArgs.cs -System.Web.UI.WebControls.WebParts/WebPartCancelEventHandler.cs -System.Web.UI.WebControls.WebParts/WebPartEventArgs.cs -System.Web.UI.WebControls.WebParts/WebPartEventHandler.cs -System.Web.UI.WebControls.WebParts/WebPartExportMode.cs -System.Web.UI.WebControls.WebParts/WebPartHelpMode.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartAuthorizationEventHandler.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartCancelEventArgs.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartCancelEventHandler.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartEventArgs.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartEventHandler.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartExportMode.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartHelpMode.cs System.Web.UI.WebControls.WebParts/WebPartPageMenuMode.cs System.Web.UI.WebControls.WebParts/WebPartVerbCollection.cs System.Web.UI.WebControls.WebParts/WebPartVerb.cs -System.Web.UI.WebControls.WebParts/WebPartVerbsEventArgs.cs -System.Web.UI.WebControls.WebParts/WebPartVerbsEventHandler.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartVerbsEventArgs.cs +../../../external/referencesource/System.Web/UI/WebParts/WebPartVerbsEventHandler.cs System.Web.UI.WebControls/Wizard.cs System.Web.UI.WebControls/WizardNavigationEventArgs.cs System.Web.UI.WebControls/WizardNavigationEventHandler.cs @@ -1194,7 +1196,8 @@ System.Web.Util/FileUtils.cs System.Web.Util/Helpers.cs System.Web.Util/HttpEncoder.cs System.Web.Util/ICalls.cs -System.Web.Util/IWebObjectFactory.cs +../../../external/referencesource/System.Web/Util/IObjectFactory.cs +../../../external/referencesource/System.Web/Util/StringUtil.cs System.Web.Util/IWebPropertyAccessor.cs System.Web.Util/MachineKeySectionUtils.cs System.Web.Util/RuntimeHelpers.cs @@ -1218,5 +1221,152 @@ System.Web/WebROCollection.cs System.Web/WebSysDescriptionAttribute.cs System.Web/XmlSiteMapProvider.cs +../../../external/referencesource/System.Web/IHtmlString.cs +System.Web/HtmlString.cs +../../../external/referencesource/System.Web/PreApplicationStartMethodAttribute.cs + +System.Web.Caching/FileResponseElement.cs +System.Web.Caching/HeaderElement.cs +../../../external/referencesource/System.Web/Cache/IOutputCacheEntry.cs +System.Web.Caching/MemoryResponseElement.cs +System.Web.Caching/OutputCache.cs +System.Web.Caching/OutputCacheProviderCollection.cs +../../../external/referencesource/System.Web/Cache/ResponseElement.cs +System.Web.Caching/SubstitutionResponseElement.cs +System.Web.Configuration_2.0/VersionConverter.cs +../../../external/referencesource/System.Web/Configuration/MachineKeyCompatibilityMode.cs +System.Web.Configuration_2.0/HttpCapabilitiesProvider.cs +System.Web.Configuration_2.0/HttpCapabilitiesDefaultProvider.cs +../../../external/referencesource/System.Web/Compilation/FolderLevelBuildProviderAppliesTo.cs +../../../external/referencesource/System.Web/Compilation/FolderLevelBuildProviderAppliesToAttribute.cs +System.Web.Compilation/RouteUrlExpressionBuilder.cs +System.Web.Compilation/RouteValueExpressionBuilder.cs +System.Web.Security/MachineKey.cs +System.Web.Security/MachineKeyProtection.cs +../../../external/referencesource/System.Web/State/SessionStateBehavior.cs +System.Web.Routing/PageRouteHandler.cs +../../../external/referencesource/System.Web/UI/ClientIDMode.cs +../../../external/referencesource/System.Web/UI/DataKeyPropertyAttribute.cs +System.Web.UI/FileLevelMasterPageControlBuilder.cs +../../../external/referencesource/System.Web/UI/IDataKeysControl.cs +../../../external/referencesource/System.Web/UI/ViewStateMode.cs +../../../external/referencesource/System.Web/UI/WebControls/IDataBoundControl.cs +../../../external/referencesource/System.Web/UI/WebControls/CallingDataMethodsEventHandler.cs +../../../external/referencesource/System.Web/UI/WebControls/CallingDataMethodsEventArgs.cs +../../../external/referencesource/System.Web/UI/WebControls/IDataBoundItemControl.cs +../../../external/referencesource/System.Web/UI/WebControls/IDataBoundListControl.cs +../../../external/referencesource/System.Web/UI/WebControls/IFieldControl.cs +System.Web.UI.WebControls/IRenderOuterTable.cs +System.Web.UI.WebControls/MenuListRenderer.cs +../../../external/referencesource/System.Web/UI/WebControls/MenuRenderingMode.cs +System.Web.UI.WebControls/NamedCssStyleCollection.cs +System.Web.UI.WebControls/RouteParameter.cs +System.Web.UI.WebControls/StyleBlock.cs +System.Web.UI.WebControls/WizardLayoutContainer.cs +System.Web.UI.WebControls/WizardLayoutNavigationContainer.cs +System.Web.Util/SimpleWebObjectFactory.cs +../../../external/referencesource/System.Web/Util/RequestValidationSource.cs +System.Web.Util/RequestValidator.cs + +System.Web.Routing/HttpMethodConstraint.cs +../../../external/referencesource/System.Web/Routing/IRouteConstraint.cs +../../../external/referencesource/System.Web/Routing/IRouteHandler.cs +System.Web.Routing/PatternParser.cs +System.Web.Routing/PatternToken.cs +System.Web.Routing/PatternTokenType.cs +../../../external/referencesource/System.Web/Routing/RequestContext.cs +System.Web.Routing/Route.cs +../../../external/referencesource/System.Web/Routing/RouteBase.cs +System.Web.Routing/RouteCollection.cs +System.Web.Routing/RouteData.cs +../../../external/referencesource/System.Web/Routing/RouteDirection.cs +../../../external/referencesource/System.Web/Routing/RouteTable.cs +../../../external/referencesource/System.Web/Routing/RouteValueDictionary.cs +System.Web.Routing/RouteValueDictionaryExtensions.cs +System.Web.Routing/StopRoutingHandler.cs +System.Web.Routing/UrlRoutingHandler.cs +System.Web.Routing/UrlRoutingModule.cs +../../../external/referencesource/System.Web/Routing/VirtualPathData.cs + +../../../external/referencesource/System.Web/Abstractions/HttpApplicationStateBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpApplicationStateWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpBrowserCapabilitiesBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpBrowserCapabilitiesWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpCachePolicyBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpCachePolicyWrapper.cs +System.Web/HttpContextBase.cs +System.Web/HttpContextWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpFileCollectionBase.cs +System.Web/HttpFileCollectionWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpPostedFileBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpPostedFileWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpRequestBase.cs +System.Web/HttpRequestWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpResponseBase.cs +System.Web/HttpResponseWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpServerUtilityBase.cs +System.Web/HttpServerUtilityWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpSessionStateBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpSessionStateWrapper.cs +../../../external/referencesource/System.Web/Abstractions/HttpStaticObjectsCollectionBase.cs +../../../external/referencesource/System.Web/Abstractions/HttpStaticObjectsCollectionWrapper.cs + System.Collections.Concurrent/SplitOrderedList.cs +System.Web/EventHandlerTaskAsyncHelper.cs +System.Web/HttpTaskAsyncHandler.cs +System.Web/MimeMapping.cs +../../../external/referencesource/System.Web/ReadEntityBodyMode.cs +System.Web/UnvalidatedRequestValues.cs +../../../external/referencesource/System.Web/UnvalidatedRequestValuesWrapper.cs +../../../external/referencesource/System.Web/UnvalidatedRequestValuesBase.cs +System.Web/TaskAsyncResult.cs +System.Web/TaskEventHandler.cs +System.Web.Security/MembershipPasswordAttribute.cs +System.Web/DynamicModuleManager.cs + +../../../external/referencesource/System.Web/ISubscriptionToken.cs +../../../external/referencesource/System.Web/ITlsTokenBindingInfo.cs + +../../../external/referencesource/System.Web/ModelBinding/IModelNameProvider.cs +../../../external/referencesource/System.Web/ModelBinding/BindingBehaviorAttribute.cs +../../../external/referencesource/System.Web/ModelBinding/BindingBehavior.cs +../../../external/referencesource/System.Web/ModelBinding/BindNeverAttribute.cs +../../../external/referencesource/System.Web/ModelBinding/BindRequiredAttribute.cs +../../../external/referencesource/System.Web/ModelBinding/ExtensibleModelBinderAttribute.cs +../../../external/referencesource/System.Web/ModelBinding/ModelBinderProviderOptionsAttribute.cs +../../../external/referencesource/System.Web/ModelBinding/ModelErrorCollection.cs +../../../external/referencesource/System.Web/ModelBinding/ModelError.cs + + +../../../external/referencesource/System.Web/Security/AntiXss/CodeCharts.cs + +../../../external/referencesource/System.Web/UI/WebParts/WebBrowsableAttribute.cs +../../../external/referencesource/System.Web/UI/WebParts/WebDescriptionAttribute.cs +../../../external/referencesource/System.Web/UI/WebParts/WebDisplayNameAttribute.cs +../../../external/referencesource/System.Web/UI/WebParts/TableCallback.cs +../../../external/referencesource/System.Web/UI/WebParts/RowCallback.cs +../../../external/referencesource/System.Web/UI/WebParts/FieldCallback.cs + +../../../external/referencesource/System.Web/UI/UnobtrusiveValidationMode.cs +../../../external/referencesource/System.Web/UI/ValidateRequestMode.cs + +../../../external/referencesource/System.Web/Configuration/AsyncPreloadModeFlags.cs +../../../external/referencesource/System.Web/Configuration/BrowserCapsElementType.cs +../../../external/referencesource/System.Web/Configuration/BrowserTree.cs +../../../external/referencesource/System.Web/Configuration/CustomWebEventKey.cs +../../../external/referencesource/System.Web/Configuration/DelayedRegex.cs +../../../external/referencesource/System.Web/Configuration/ProfileGuidedOptimizationsFlags.cs + +../../../external/referencesource/System.Web/Configuration/RegexMatchTimeoutValidator.cs +../../../external/referencesource/System.Web/Configuration/RegexMatchTimeoutValidatorAttribute.cs +../../../external/referencesource/System.Web/Configuration/RpcAuthent.cs +../../../external/referencesource/System.Web/Configuration/RpcImpers.cs +../../../external/referencesource/System.Web/Configuration/RpcLevel.cs +../../../external/referencesource/System.Web/Configuration/TicketCompatibilityMode.cs +../../../external/referencesource/System.Web/Configuration/WebLevel.cs + +../../../external/referencesource/System.Web/WebSockets/AspNetWebSocketOptions.cs +../../../external/referencesource/System.Web/WebSockets/SubprotocolUtil.cs +../../build/common/SR.cs +ReferenceSources/SR.cs diff --git a/mcs/class/System.Web/System.Web/HeadersCollection.cs b/mcs/class/System.Web/System.Web/HeadersCollection.cs index b2a1c73b7f..fe2cf558af 100644 --- a/mcs/class/System.Web/System.Web/HeadersCollection.cs +++ b/mcs/class/System.Web/System.Web/HeadersCollection.cs @@ -39,6 +39,30 @@ namespace System.Web { } + public override void Add (string name, string value) + { + if (IsReadOnly) + throw new PlatformNotSupportedException (); + + base.Set (name, value); + } + + public override void Set (string name, string value) + { + if (IsReadOnly) + throw new PlatformNotSupportedException (); + + base.Set (name, value); + } + + public override void Remove (string name) + { + if (IsReadOnly) + throw new PlatformNotSupportedException (); + + base.Remove (name); + } + protected override void InsertInfo() { HttpWorkerRequest worker_request = _request.WorkerRequest; diff --git a/mcs/class/System.Web/System.Web/HttpApplication.cs b/mcs/class/System.Web/System.Web/HttpApplication.cs index 34c2d10576..c2fc0ddb71 100644 --- a/mcs/class/System.Web/System.Web/HttpApplication.cs +++ b/mcs/class/System.Web/System.Web/HttpApplication.cs @@ -567,9 +567,9 @@ namespace System.Web AddOnPostAuthenticateRequestAsync (bh, eh, null); } - public void AddOnPostAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostAuthenticateRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostAuthenticateRequest += new EventHandler (invoker.Invoke); } @@ -585,9 +585,9 @@ namespace System.Web AddOnPostAuthorizeRequestAsync (bh, eh, null); } - public void AddOnPostAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostAuthorizeRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostAuthorizeRequest += new EventHandler (invoker.Invoke); } @@ -603,9 +603,9 @@ namespace System.Web AddOnPostResolveRequestCacheAsync (bh, eh, null); } - public void AddOnPostResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostResolveRequestCacheAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostResolveRequestCache += new EventHandler (invoker.Invoke); } @@ -621,9 +621,9 @@ namespace System.Web AddOnPostMapRequestHandlerAsync (bh, eh, null); } - public void AddOnPostMapRequestHandlerAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostMapRequestHandlerAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostMapRequestHandler += new EventHandler (invoker.Invoke); } @@ -639,9 +639,9 @@ namespace System.Web AddOnPostAcquireRequestStateAsync (bh, eh, null); } - public void AddOnPostAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostAcquireRequestStateAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostAcquireRequestState += new EventHandler (invoker.Invoke); } @@ -657,9 +657,9 @@ namespace System.Web AddOnPostReleaseRequestStateAsync (bh, eh, null); } - public void AddOnPostReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostReleaseRequestStateAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostReleaseRequestState += new EventHandler (invoker.Invoke); } @@ -675,72 +675,72 @@ namespace System.Web AddOnPostUpdateRequestCacheAsync (bh, eh, null); } - public void AddOnPostUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostUpdateRequestCacheAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostUpdateRequestCache += new EventHandler (invoker.Invoke); } // // The new overloads that take a data parameter // - public void AddOnAcquireRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnAcquireRequestStateAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); AcquireRequestState += new EventHandler (invoker.Invoke); } - public void AddOnAuthenticateRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnAuthenticateRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); AuthenticateRequest += new EventHandler (invoker.Invoke); } - public void AddOnAuthorizeRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnAuthorizeRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); AuthorizeRequest += new EventHandler (invoker.Invoke); } - public void AddOnBeginRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnBeginRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); BeginRequest += new EventHandler (invoker.Invoke); } - public void AddOnEndRequestAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnEndRequestAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); EndRequest += new EventHandler (invoker.Invoke); } - public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPostRequestHandlerExecuteAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PostRequestHandlerExecute += new EventHandler (invoker.Invoke); } - public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnPreRequestHandlerExecuteAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); PreRequestHandlerExecute += new EventHandler (invoker.Invoke); } - public void AddOnReleaseRequestStateAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnReleaseRequestStateAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); ReleaseRequestState += new EventHandler (invoker.Invoke); } - public void AddOnResolveRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnResolveRequestCacheAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); ResolveRequestCache += new EventHandler (invoker.Invoke); } - public void AddOnUpdateRequestCacheAsync (BeginEventHandler bh, EndEventHandler eh, object data) + public void AddOnUpdateRequestCacheAsync (BeginEventHandler beginHandler, EndEventHandler endHandler, object state) { - AsyncInvoker invoker = new AsyncInvoker (bh, eh, this, data); + AsyncInvoker invoker = new AsyncInvoker (beginHandler, endHandler, this, state); UpdateRequestCache += new EventHandler (invoker.Invoke); } diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpContextBase.cs b/mcs/class/System.Web/System.Web/HttpContextBase.cs similarity index 100% rename from mcs/class/System.Web.Abstractions/System.Web/HttpContextBase.cs rename to mcs/class/System.Web/System.Web/HttpContextBase.cs diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpContextWrapper.cs b/mcs/class/System.Web/System.Web/HttpContextWrapper.cs similarity index 100% rename from mcs/class/System.Web.Abstractions/System.Web/HttpContextWrapper.cs rename to mcs/class/System.Web/System.Web/HttpContextWrapper.cs diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpFileCollectionWrapper.cs b/mcs/class/System.Web/System.Web/HttpFileCollectionWrapper.cs similarity index 100% rename from mcs/class/System.Web.Abstractions/System.Web/HttpFileCollectionWrapper.cs rename to mcs/class/System.Web/System.Web/HttpFileCollectionWrapper.cs diff --git a/mcs/class/System.Web/System.Web/HttpRequest.cs b/mcs/class/System.Web/System.Web/HttpRequest.cs index d273f1cf1f..8e9359a9f8 100755 --- a/mcs/class/System.Web/System.Web/HttpRequest.cs +++ b/mcs/class/System.Web/System.Web/HttpRequest.cs @@ -39,6 +39,7 @@ using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Security.Principal; +using System.Threading; using System.Web.Configuration; using System.Web.Management; using System.Web.UI; @@ -980,6 +981,11 @@ namespace System.Web } } + public Stream GetBufferedInputStream () + { + return input_stream; + } + public Stream GetBufferlessInputStream () { if (bufferlessInputStream == null) { @@ -993,6 +999,11 @@ namespace System.Web return bufferlessInputStream; } + public Stream GetBufferlessInputStream (bool disableMaxRequestLength) + { + return GetBufferlessInputStream (); + } + // // Stream that returns the data as it is read, without buffering // @@ -1399,6 +1410,12 @@ namespace System.Web } } + public CancellationToken TimedOutToken { + get { + throw new NotImplementedException (); + } + } + public int TotalBytes { get { Stream ins = InputStream; @@ -1508,6 +1525,38 @@ namespace System.Web } public int [] MapImageCoordinates (string imageFieldName) + { + string[] parameters = GetImageCoordinatesParameters (imageFieldName); + if (parameters == null) + return null; + int [] result = new int [2]; + try { + result [0] = Int32.Parse (parameters [0]); + result [1] = Int32.Parse (parameters [1]); + } catch { + return null; + } + + return result; + } + + public double [] MapRawImageCoordinates (string imageFieldName) + { + string[] parameters = GetImageCoordinatesParameters (imageFieldName); + if (parameters == null) + return null; + double [] result = new double [2]; + try { + result [0] = Double.Parse (parameters [0]); + result [1] = Double.Parse (parameters [1]); + } catch { + return null; + } + + return result; + } + + string [] GetImageCoordinatesParameters (string imageFieldName) { string method = HttpMethod; NameValueCollection coll = null; @@ -1526,14 +1575,7 @@ namespace System.Web string y = coll [imageFieldName + ".y"]; if (y == null || y == "") return null; - - int [] result = new int [2]; - try { - result [0] = Int32.Parse (x); - result [1] = Int32.Parse (y); - } catch { - return null; - } + string[] result = new string [] { x, y }; return result; } diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpRequestWrapper.cs b/mcs/class/System.Web/System.Web/HttpRequestWrapper.cs similarity index 87% rename from mcs/class/System.Web.Abstractions/System.Web/HttpRequestWrapper.cs rename to mcs/class/System.Web/System.Web/HttpRequestWrapper.cs index 43abae8043..fee41fe43d 100644 --- a/mcs/class/System.Web.Abstractions/System.Web/HttpRequestWrapper.cs +++ b/mcs/class/System.Web/System.Web/HttpRequestWrapper.cs @@ -38,6 +38,7 @@ using System.Runtime.Serialization; using System.Security.Permissions; using System.Security.Principal; using System.Text; +using System.Threading; using System.Web.Caching; using System.Security.Authentication.ExtendedProtection; @@ -126,6 +127,21 @@ namespace System.Web get { return w.Headers; } } + public override Stream GetBufferedInputStream () + { + return w.GetBufferedInputStream (); + } + + public override Stream GetBufferlessInputStream () + { + return w.GetBufferlessInputStream (); + } + + public override Stream GetBufferlessInputStream (System.Boolean disableMaxRequestLength) + { + return w.GetBufferlessInputStream (disableMaxRequestLength); + } + public override string HttpMethod { get { return w.HttpMethod; } } @@ -190,12 +206,16 @@ namespace System.Web } public override RequestContext RequestContext { get { return w.RequestContext; } - internal set { w.RequestContext = value; } + set { w.RequestContext = value; } } public override NameValueCollection ServerVariables { get { return w.ServerVariables; } } + public virtual CancellationToken TimedOutToken { + get { return w.TimedOutToken; } + } + public override int TotalBytes { get { return w.TotalBytes; } } @@ -247,14 +267,19 @@ namespace System.Web return w.MapImageCoordinates (imageFieldName); } - public override string MapPath (string overridePath) + public override string MapPath (string virtualPath) { - return w.MapPath (overridePath); + return w.MapPath (virtualPath); } - public override string MapPath (string overridePath, string baseVirtualDir, bool allowCrossAppMapping) + public override string MapPath (string virtualPath, string baseVirtualDir, bool allowCrossAppMapping) { - return w.MapPath (overridePath, baseVirtualDir, allowCrossAppMapping); + return w.MapPath (virtualPath, baseVirtualDir, allowCrossAppMapping); + } + + public override double [] MapRawImageCoordinates (System.String imageFieldName) + { + return w.MapRawImageCoordinates (imageFieldName); } public override void SaveAs (string filename, bool includeHeaders) diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpResponseWrapper.cs b/mcs/class/System.Web/System.Web/HttpResponseWrapper.cs similarity index 100% rename from mcs/class/System.Web.Abstractions/System.Web/HttpResponseWrapper.cs rename to mcs/class/System.Web/System.Web/HttpResponseWrapper.cs diff --git a/mcs/class/System.Web.Abstractions/System.Web/HttpServerUtilityWrapper.cs b/mcs/class/System.Web/System.Web/HttpServerUtilityWrapper.cs similarity index 100% rename from mcs/class/System.Web.Abstractions/System.Web/HttpServerUtilityWrapper.cs rename to mcs/class/System.Web/System.Web/HttpServerUtilityWrapper.cs diff --git a/mcs/class/System.Web/System.Web/IHtmlString.cs b/mcs/class/System.Web/System.Web/IHtmlString.cs deleted file mode 100644 index b8ee7abc55..0000000000 --- a/mcs/class/System.Web/System.Web/IHtmlString.cs +++ /dev/null @@ -1,29 +0,0 @@ -// -// System.Web.IHtmlString.cs -// -// Copyright (C) 2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -namespace System.Web { - public interface IHtmlString { - string ToHtmlString (); - } -} - \ No newline at end of file diff --git a/mcs/class/System.Web/System.Web/IHttpAsyncHandler.cs b/mcs/class/System.Web/System.Web/IHttpAsyncHandler.cs deleted file mode 100644 index de69220196..0000000000 --- a/mcs/class/System.Web/System.Web/IHttpAsyncHandler.cs +++ /dev/null @@ -1,39 +0,0 @@ -// -// System.Web.IHttpAsyncHandler.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web -{ - public interface IHttpAsyncHandler : IHttpHandler - { - IAsyncResult BeginProcessRequest(HttpContext context, - AsyncCallback cb, - object extraData); - void EndProcessRequest(IAsyncResult result); - } -} diff --git a/mcs/class/System.Web/System.Web/IHttpHandler.cs b/mcs/class/System.Web/System.Web/IHttpHandler.cs deleted file mode 100644 index ea0535ed63..0000000000 --- a/mcs/class/System.Web/System.Web/IHttpHandler.cs +++ /dev/null @@ -1,37 +0,0 @@ -// -// System.IHttpHandler.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web -{ - public interface IHttpHandler - { - bool IsReusable { get; } - void ProcessRequest(HttpContext context); - } -} diff --git a/mcs/class/System.Web/System.Web/IHttpHandlerFactory.cs b/mcs/class/System.Web/System.Web/IHttpHandlerFactory.cs deleted file mode 100644 index d136cae3a3..0000000000 --- a/mcs/class/System.Web/System.Web/IHttpHandlerFactory.cs +++ /dev/null @@ -1,40 +0,0 @@ -// -// System.Web.IHttpHandlerFactory.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web -{ - public interface IHttpHandlerFactory - { - IHttpHandler GetHandler(HttpContext context, - string requestType, - string url, - string pathTranslated); - void ReleaseHandler(IHttpHandler handler); - } -} diff --git a/mcs/class/System.Web/System.Web/IHttpModule.cs b/mcs/class/System.Web/System.Web/IHttpModule.cs deleted file mode 100644 index 84654fcd0a..0000000000 --- a/mcs/class/System.Web/System.Web/IHttpModule.cs +++ /dev/null @@ -1,35 +0,0 @@ -// -// System.Web.IHttpModule.cs -// -// Author: -// Bob Smith -// -// (C) Bob Smith -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web { - public interface IHttpModule { - void Dispose(); - void Init(HttpApplication context); - } -} diff --git a/mcs/class/System.Web/System.Web/PreApplicationStartMethodAttribute.cs b/mcs/class/System.Web/System.Web/PreApplicationStartMethodAttribute.cs deleted file mode 100644 index ad43cb5742..0000000000 --- a/mcs/class/System.Web/System.Web/PreApplicationStartMethodAttribute.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// PreApplicationStartMethodAttribute -// -// Authors: -// Marek Habersack -// -// -// Copyright (C) 2010 Novell, Inc (http://novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; - -namespace System.Web -{ - [AttributeUsage (AttributeTargets.Assembly, AllowMultiple = false)] - public sealed class PreApplicationStartMethodAttribute : Attribute - { - public string MethodName { get; private set; } - public Type Type { get; private set; } - - public PreApplicationStartMethodAttribute (Type type, string methodName) - { - this.MethodName = methodName; - this.Type = type; - } - } -} diff --git a/mcs/class/System.Web/System.Web/ReadEntityBodyMode.cs b/mcs/class/System.Web/System.Web/ReadEntityBodyMode.cs deleted file mode 100644 index a97c3cf5f1..0000000000 --- a/mcs/class/System.Web/System.Web/ReadEntityBodyMode.cs +++ /dev/null @@ -1,34 +0,0 @@ -// -// ReadEntityBodyMode.cs -// -// Author: Martin Thwaites (github@my2cents.co.uk) -// -// Copyright (C) 2014 Martin Thwaites -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -namespace System.Web { - public enum ReadEntityBodyMode { - None, - Classic, - Bufferless, - Buffered, - } -} diff --git a/mcs/class/System.Web/System.Web/RequestNotification.cs b/mcs/class/System.Web/System.Web/RequestNotification.cs deleted file mode 100644 index 793deb1e50..0000000000 --- a/mcs/class/System.Web/System.Web/RequestNotification.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.RequestNotification -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2007-2009 Novell, Inc (http://novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -namespace System.Web -{ - [FlagsAttribute] - public enum RequestNotification - { - BeginRequest = 0x0001, - AuthenticateRequest = 0x0002, - AuthorizeRequest = 0x0004, - ResolveRequestCache = 0x0008, - MapRequestHandler = 0x0010, - AcquireRequestState = 0x0020, - PreExecuteRequestHandler = 0x0040, - ExecuteRequestHandler = 0x0080, - ReleaseRequestState = 0x0100, - UpdateRequestCache = 0x0200, - LogRequest = 0x0400, - EndRequest = 0x0800, - SendResponse = 0x20000000 - } -} diff --git a/mcs/class/System.Web/System.Web/RequestNotificationStatus.cs b/mcs/class/System.Web/System.Web/RequestNotificationStatus.cs deleted file mode 100644 index 177f0c0b04..0000000000 --- a/mcs/class/System.Web/System.Web/RequestNotificationStatus.cs +++ /dev/null @@ -1,42 +0,0 @@ -// -// System.Web.RequestNotificationStatus -// -// Authors: -// Marek Habersack (mhabersack@novell.com) -// -// (C) 2007-2009 Novell, Inc (http://novell.com) -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -using System; -using System.Collections.Generic; -using System.Security.Permissions; - -namespace System.Web -{ - public enum RequestNotificationStatus - { - Continue, - Pending, - FinishRequest - } -} diff --git a/mcs/class/System.Web/System.Web/TraceContextEventArgs.cs b/mcs/class/System.Web/System.Web/TraceContextEventArgs.cs deleted file mode 100644 index f236fd47ee..0000000000 --- a/mcs/class/System.Web/System.Web/TraceContextEventArgs.cs +++ /dev/null @@ -1,49 +0,0 @@ -// -// System.Web.TraceContextEventArgs class -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005-2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System.Collections; -using System.Security.Permissions; - -namespace System.Web { - - // CAS - no InheritanceDemand here as the class is sealed - [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] - public sealed class TraceContextEventArgs : EventArgs { - - ICollection trace_records; - - public TraceContextEventArgs (ICollection records) - { - trace_records = records; - } - - public ICollection TraceRecords { - get { return trace_records; } - } - } -} diff --git a/mcs/class/System.Web/System.Web/TraceContextEventHandler.cs b/mcs/class/System.Web/System.Web/TraceContextEventHandler.cs deleted file mode 100644 index 762aa94bde..0000000000 --- a/mcs/class/System.Web/System.Web/TraceContextEventHandler.cs +++ /dev/null @@ -1,32 +0,0 @@ -// -// System.Web.TraceContextEventHandler delegate -// -// Author: -// Sebastien Pouliot -// -// Copyright (C) 2005-2009 Novell, Inc (http://www.novell.com) -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -namespace System.Web -{ - public delegate void TraceContextEventHandler (object sender, TraceContextEventArgs e); -} diff --git a/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesBase.cs b/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesBase.cs deleted file mode 100644 index 9b54b072e2..0000000000 --- a/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesBase.cs +++ /dev/null @@ -1,90 +0,0 @@ -// -// System.Web.UnvalidatedRequestValuesBase.cs -// -// Author: -// Mike Morano -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections.Specialized; - - -namespace System.Web { - public abstract class UnvalidatedRequestValuesBase { - void NotImplemented () - { - throw new NotImplementedException (); - } - - public virtual HttpCookieCollection Cookies - { - get { NotImplemented (); return null; } - } - - public virtual HttpFileCollection Files - { - get { NotImplemented (); return null; } - } - - public virtual NameValueCollection Form - { - get { NotImplemented (); return null; } - } - - public virtual NameValueCollection Headers - { - get { NotImplemented (); return null; } - } - - public virtual string this[string field] - { - get { NotImplemented (); return null; } - } - - public virtual string Path - { - get { NotImplemented (); return null; } - } - - public virtual string PathInfo - { - get { NotImplemented (); return null; } - } - - public virtual NameValueCollection QueryString - { - get { NotImplemented (); return null; } - } - - public virtual string RawUrl - { - get { NotImplemented (); return null; } - } - - public virtual Uri Url - { - get { NotImplemented (); return null; } - } - } -} diff --git a/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesWrapper.cs b/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesWrapper.cs deleted file mode 100644 index e6b6084f2f..0000000000 --- a/mcs/class/System.Web/System.Web/UnvalidatedRequestValuesWrapper.cs +++ /dev/null @@ -1,92 +0,0 @@ -// -// System.Web.UnvalidatedRequestValuesWrapper.cs -// -// Author: -// Mike Morano -// - -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// - -using System; -using System.Collections.Specialized; - - -namespace System.Web { - public class UnvalidatedRequestValuesWrapper : UnvalidatedRequestValuesBase { - UnvalidatedRequestValues rv; - - public UnvalidatedRequestValuesWrapper (UnvalidatedRequestValues requestValues) - { - rv = requestValues; - } - - public override HttpCookieCollection Cookies - { - get { return rv.Cookies; } - } - - public override HttpFileCollection Files - { - get { return rv.Files; } - } - - public override NameValueCollection Form - { - get { return rv.Form; } - } - - public override NameValueCollection Headers - { - get { return rv.Headers; } - } - - public override string this[string field] - { - get { return rv[field]; } - } - - public override string Path - { - get { return rv.Path; } - } - - public override string PathInfo - { - get { return rv.PathInfo; } - } - - public override NameValueCollection QueryString - { - get { return rv.QueryString; } - } - - public override string RawUrl - { - get { return rv.RawUrl; } - } - - public override Uri Url - { - get { return rv.Url; } - } - } -} diff --git a/mcs/class/System.Web/System.Web_test.dll.sources b/mcs/class/System.Web/System.Web_test.dll.sources index 29339b428c..4416f5a698 100644 --- a/mcs/class/System.Web/System.Web_test.dll.sources +++ b/mcs/class/System.Web/System.Web_test.dll.sources @@ -272,7 +272,6 @@ System.Web.UI.WebControls/RangeValidatorTest.cs System.Web.UI.WebControls/RectangleHotSpotTest.cs System.Web.UI.WebControls/RegularExpressionValidatorTest.cs System.Web.UI.WebControls/RepeatInfoTest.auto.cs -System.Web.UI.WebControls/RepeatInfoTest.auto.2.0.cs System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs System.Web.UI.WebControls/RepeatInfoTest.cs System.Web.UI.WebControls/RepeatInfoUser.cs diff --git a/mcs/class/System.Web/Test/System.Web.Caching/FileResponseElementTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/FileResponseElementTest.cs index ee2bd41226..ac14cee58b 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/FileResponseElementTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/FileResponseElementTest.cs @@ -28,7 +28,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Web; using System.Web.Caching; @@ -70,4 +69,3 @@ namespace MonoTests.System.Web.Caching } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.Caching/HeaderElementTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/HeaderElementTest.cs index e9e5059269..7a6a7434b8 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/HeaderElementTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/HeaderElementTest.cs @@ -28,7 +28,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Web; using System.Web.Caching; @@ -68,4 +67,3 @@ namespace MonoTests.System.Web.Caching } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.Caching/MemoryResponseElementTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/MemoryResponseElementTest.cs index 6f732dddcb..bfee3cc479 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/MemoryResponseElementTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/MemoryResponseElementTest.cs @@ -28,7 +28,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Web; using System.Web.Caching; @@ -74,4 +73,3 @@ namespace MonoTests.System.Web.Caching } } } -#endif diff --git a/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs index c26e99432e..604b418f5e 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/OutputCacheTest.cs @@ -25,7 +25,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Collections.Generic; using System.Configuration; @@ -134,10 +133,10 @@ namespace MonoTests.System.Web.Caching static readonly byte[] substitutionResponseElement = { 0x0, 0x1, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC, 0x2, 0x0, 0x0, 0x0, 0x4D, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2C, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x34, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x43, 0x75, 0x6C, 0x74, 0x75, 0x72, 0x65, 0x3D, 0x6E, 0x65, 0x75, 0x74, 0x72, 0x61, 0x6C, 0x2C, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x4B, 0x65, 0x79, 0x54, 0x6F, 0x6B, 0x65, 0x6E, 0x3D, 0x62, 0x30, 0x33, 0x66, 0x35, 0x66, 0x37, 0x66, 0x31, 0x31, 0x64, 0x35, 0x30, 0x61, 0x33, 0x61, 0x5, 0x1, 0x0, 0x0, 0x0, 0x2E, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2E, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x2E, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x52, 0x65, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x2, 0x0, 0x0, 0x0, 0xF, 0x5F, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x4E, 0x61, 0x6D, 0x65, 0xB, 0x5F, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x1, 0x1, 0x2, 0x0, 0x0, 0x0, 0x6, 0x3, 0x0, 0x0, 0x0, 0x41, 0x4D, 0x6F, 0x6E, 0x6F, 0x54, 0x65, 0x73, 0x74, 0x73, 0x2E, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2E, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x2E, 0x4F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x65, 0x73, 0x74, 0x2C, 0x20, 0x44, 0x6F, 0x74, 0x4E, 0x65, 0x74, 0x34, 0x5F, 0x4E, 0x55, 0x6E, 0x69, 0x74, 0x5F, 0x54, 0x65, 0x73, 0x74, 0x73, 0x6, 0x4, 0x0, 0x0, 0x0, 0x19, 0x44, 0x75, 0x6D, 0x6D, 0x79, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0xB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; static readonly byte[] badSubstitutionResponseElement = { 0x0, 0x1, 0x0, 0x0, 0x0, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC, 0x2, 0x0, 0x0, 0x0, 0x4D, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2C, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x34, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x30, 0x2C, 0x20, 0x43, 0x75, 0x6C, 0x74, 0x75, 0x72, 0x65, 0x3D, 0x6E, 0x65, 0x75, 0x74, 0x72, 0x61, 0x6C, 0x2C, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x63, 0x4B, 0x65, 0x79, 0x54, 0x6F, 0x6B, 0x65, 0x6E, 0x3D, 0x62, 0x30, 0x33, 0x66, 0x35, 0x66, 0x37, 0x66, 0x31, 0x31, 0x64, 0x35, 0x30, 0x61, 0x33, 0x61, 0x5, 0x1, 0x0, 0x0, 0x0, 0x2E, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2E, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x2E, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x52, 0x65, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x45, 0x6C, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x2, 0x0, 0x0, 0x0, 0xF, 0x5F, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x4E, 0x61, 0x6D, 0x65, 0xB, 0x5F, 0x6D, 0x65, 0x74, 0x68, 0x6F, 0x64, 0x4E, 0x61, 0x6D, 0x65, 0x1, 0x1, 0x2, 0x0, 0x0, 0x0, 0x6, 0x3, 0x0, 0x0, 0x0, 0x41, 0x4D, 0x6F, 0x6E, 0x6F, 0x54, 0x65, 0x73, 0x74, 0x73, 0x2E, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x2E, 0x57, 0x65, 0x62, 0x2E, 0x43, 0x61, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x2E, 0x4F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x65, 0x73, 0x74, 0x2C, 0x20, 0x44, 0x6F, 0x74, 0x4E, 0x65, 0x74, 0x34, 0x5F, 0x4E, 0x55, 0x6E, 0x69, 0x74, 0x5F, 0x54, 0x65, 0x73, 0x74, 0x73, 0x6, 0x4, 0x0, 0x0, 0x0, 0x1C, 0x44, 0x75, 0x6D, 0x6D, 0x79, 0x42, 0x61, 0x64, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6F, 0x6E, 0x43, 0x61, 0x6C, 0x6C, 0x62, 0x61, 0x63, 0x6B, 0xB, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; #else - static readonly byte[] substitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x35,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x19,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x6,0x0,0x0,0x0,0x9,0x7,0x0,0x0,0x0,0x4,0x6,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0x8,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0x9,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0xA,0x6,0xA,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x35,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xB,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x4,0x7,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xA,0x0,0x0,0x0,0x9,0xB,0x0,0x0,0x0,0x6,0xF,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x10,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; - static readonly byte[] badSubstitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x35,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x1C,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0xC,0x6,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x35,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x3,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x4,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x6,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x7,0x0,0x0,0x0,0x9,0x8,0x0,0x0,0x0,0x9,0x9,0x0,0x0,0x0,0x4,0x7,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0xA,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0xB,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x6,0xC,0x0,0x0,0x0,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x6,0xD,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x35,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xE,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x5,0x8,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x9,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xD,0x0,0x0,0x0,0x9,0xE,0x0,0x0,0x0,0x6,0x12,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x13,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; static readonly byte[] memoryResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4D,0x65,0x6D,0x6F,0x72,0x79,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x2,0x0,0x0,0x0,0x17,0x3C,0x42,0x75,0x66,0x66,0x65,0x72,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x17,0x3C,0x4C,0x65,0x6E,0x67,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x7,0x0,0x2,0x9,0x2,0x0,0x0,0x0,0x9,0x3,0x0,0x0,0x0,0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xF,0x3,0x0,0x0,0x0,0xC,0x0,0x0,0x0,0x2,0x45,0x6E,0x63,0x6F,0x64,0x65,0x64,0x20,0x64,0x61,0x74,0x61,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; static readonly byte[] fileResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x26,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x46,0x69,0x6C,0x65,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x17,0x3C,0x4C,0x65,0x6E,0x67,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x17,0x3C,0x4F,0x66,0x66,0x73,0x65,0x74,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x15,0x3C,0x50,0x61,0x74,0x68,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x0,0x0,0x1,0x9,0x9,0x2,0x0,0x0,0x0,0xD2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x11,0x2F,0x70,0x61,0x74,0x68,0x2F,0x74,0x6F,0x2F,0x66,0x69,0x6C,0x65,0x2E,0x74,0x78,0x74,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; + static readonly byte[] substitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x19,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x6,0x0,0x0,0x0,0x9,0x7,0x0,0x0,0x0,0x4,0x6,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0x8,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0x9,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0xA,0x6,0xA,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xB,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x4,0x7,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xA,0x0,0x0,0x0,0x9,0xB,0x0,0x0,0x0,0x6,0xF,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x10,0x0,0x0,0x0,0x3F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; + static readonly byte[] badSubstitutionResponseElement = {0x0,0x1,0x0,0x0,0x0,0xFF,0xFF,0xFF,0xFF,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC,0x2,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x5,0x1,0x0,0x0,0x0,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x45,0x6C,0x65,0x6D,0x65,0x6E,0x74,0x3,0x0,0x0,0x0,0x8,0x74,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0x19,0x3C,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x3E,0x6B,0x5F,0x5F,0x42,0x61,0x63,0x6B,0x69,0x6E,0x67,0x46,0x69,0x65,0x6C,0x64,0x1,0x1,0x3,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2,0x0,0x0,0x0,0x6,0x3,0x0,0x0,0x0,0x88,0x1,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x2C,0x20,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0x4,0x0,0x0,0x0,0x1C,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x9,0x5,0x0,0x0,0x0,0xC,0x6,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x4,0x5,0x0,0x0,0x0,0x22,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x3,0x0,0x0,0x0,0x8,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x7,0x6D,0x65,0x74,0x68,0x6F,0x64,0x30,0x3,0x4,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x6,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x9,0x7,0x0,0x0,0x0,0x9,0x8,0x0,0x0,0x0,0x9,0x9,0x0,0x0,0x0,0x4,0x7,0x0,0x0,0x0,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x7,0x0,0x0,0x0,0x4,0x74,0x79,0x70,0x65,0x8,0x61,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x6,0x74,0x61,0x72,0x67,0x65,0x74,0x12,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0xE,0x74,0x61,0x72,0x67,0x65,0x74,0x54,0x79,0x70,0x65,0x4E,0x61,0x6D,0x65,0xA,0x6D,0x65,0x74,0x68,0x6F,0x64,0x4E,0x61,0x6D,0x65,0xD,0x64,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x1,0x1,0x2,0x1,0x1,0x1,0x3,0x30,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x2B,0x44,0x65,0x6C,0x65,0x67,0x61,0x74,0x65,0x45,0x6E,0x74,0x72,0x79,0x6,0xA,0x0,0x0,0x0,0x2B,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x52,0x65,0x73,0x70,0x6F,0x6E,0x73,0x65,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x6,0xB,0x0,0x0,0x0,0x4D,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x34,0x2E,0x30,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x62,0x30,0x33,0x66,0x35,0x66,0x37,0x66,0x31,0x31,0x64,0x35,0x30,0x61,0x33,0x61,0x6,0xC,0x0,0x0,0x0,0x7,0x74,0x61,0x72,0x67,0x65,0x74,0x30,0x6,0xD,0x0,0x0,0x0,0x5A,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x5F,0x74,0x65,0x73,0x74,0x5F,0x6E,0x65,0x74,0x5F,0x34,0x5F,0x78,0x2C,0x20,0x56,0x65,0x72,0x73,0x69,0x6F,0x6E,0x3D,0x31,0x2E,0x33,0x2E,0x30,0x2E,0x30,0x2C,0x20,0x43,0x75,0x6C,0x74,0x75,0x72,0x65,0x3D,0x6E,0x65,0x75,0x74,0x72,0x61,0x6C,0x2C,0x20,0x50,0x75,0x62,0x6C,0x69,0x63,0x4B,0x65,0x79,0x54,0x6F,0x6B,0x65,0x6E,0x3D,0x33,0x31,0x62,0x66,0x33,0x38,0x35,0x36,0x61,0x64,0x33,0x36,0x34,0x65,0x33,0x35,0x6,0xE,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x9,0x4,0x0,0x0,0x0,0xA,0x5,0x8,0x0,0x0,0x0,0x2C,0x4D,0x6F,0x6E,0x6F,0x54,0x65,0x73,0x74,0x73,0x2E,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x43,0x61,0x63,0x68,0x69,0x6E,0x67,0x2E,0x4F,0x75,0x74,0x70,0x75,0x74,0x43,0x61,0x63,0x68,0x65,0x54,0x65,0x73,0x74,0x0,0x0,0x0,0x0,0x6,0x0,0x0,0x0,0x4,0x9,0x0,0x0,0x0,0x2F,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x52,0x65,0x66,0x6C,0x65,0x63,0x74,0x69,0x6F,0x6E,0x2E,0x4D,0x65,0x6D,0x62,0x65,0x72,0x49,0x6E,0x66,0x6F,0x53,0x65,0x72,0x69,0x61,0x6C,0x69,0x7A,0x61,0x74,0x69,0x6F,0x6E,0x48,0x6F,0x6C,0x64,0x65,0x72,0x7,0x0,0x0,0x0,0x4,0x4E,0x61,0x6D,0x65,0xC,0x41,0x73,0x73,0x65,0x6D,0x62,0x6C,0x79,0x4E,0x61,0x6D,0x65,0x9,0x43,0x6C,0x61,0x73,0x73,0x4E,0x61,0x6D,0x65,0x9,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0xA,0x53,0x69,0x67,0x6E,0x61,0x74,0x75,0x72,0x65,0x32,0xA,0x4D,0x65,0x6D,0x62,0x65,0x72,0x54,0x79,0x70,0x65,0x10,0x47,0x65,0x6E,0x65,0x72,0x69,0x63,0x41,0x72,0x67,0x75,0x6D,0x65,0x6E,0x74,0x73,0x1,0x1,0x1,0x1,0x1,0x0,0x3,0x8,0xD,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x54,0x79,0x70,0x65,0x5B,0x5D,0x9,0x4,0x0,0x0,0x0,0x9,0xD,0x0,0x0,0x0,0x9,0xE,0x0,0x0,0x0,0x6,0x12,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x6,0x13,0x0,0x0,0x0,0x42,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x53,0x74,0x72,0x69,0x6E,0x67,0x20,0x44,0x75,0x6D,0x6D,0x79,0x42,0x61,0x64,0x53,0x75,0x62,0x73,0x74,0x69,0x74,0x75,0x74,0x69,0x6F,0x6E,0x43,0x61,0x6C,0x6C,0x62,0x61,0x63,0x6B,0x28,0x53,0x79,0x73,0x74,0x65,0x6D,0x2E,0x57,0x65,0x62,0x2E,0x48,0x74,0x74,0x70,0x43,0x6F,0x6E,0x74,0x65,0x78,0x74,0x29,0x8,0x0,0x0,0x0,0xA,0xB,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; #endif static readonly object[] serializeObjects = { @@ -187,10 +186,12 @@ namespace MonoTests.System.Web.Caching SubstitutionResponseElement sre, sreBad; CreateElements (out mre, out fre, out sre, out sreBad); - // WriteSerializedBytes ("/tmp/bytes.txt", "memoryResponseElement", mre); - // WriteSerializedBytes ("/tmp/bytes.txt", "fileResponseElement", fre); - // WriteSerializedBytes ("/tmp/bytes.txt", "substitutionResponseElement", sre); - // WriteSerializedBytes ("/tmp/bytes.txt", "badSubstitutionResponseElement", sreBad); +#if false + WriteSerializedBytes ("/tmp/bytes.txt", "memoryResponseElement", mre); + WriteSerializedBytes ("/tmp/bytes.txt", "fileResponseElement", fre); + WriteSerializedBytes ("/tmp/bytes.txt", "substitutionResponseElement", sre); + WriteSerializedBytes ("/tmp/bytes.txt", "badSubstitutionResponseElement", sreBad); +#endif byte[] bytes = SerializeElement (mre); AssertExtensions.AreEqual (bytes, memoryResponseElement, "#B1"); @@ -310,4 +311,3 @@ namespace MonoTests.System.Web.Caching } } } -#endif diff --git a/mcs/class/System.Web/Test/System.Web.Caching/SqlCacheDependencyTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/SqlCacheDependencyTest.cs index 264074366b..e26dafb8ce 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/SqlCacheDependencyTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/SqlCacheDependencyTest.cs @@ -65,7 +65,6 @@ namespace MonoTests.System.Web.Caching //}, "#A3"); } -#if NET_4_0 [Test] public void CreateOutputCacheDependency () { @@ -90,7 +89,6 @@ namespace MonoTests.System.Web.Caching //sqc = SqlCacheDependency.CreateOutputCacheDependency ("Database:table; AnotherDatabase:table"); //Assert.IsTrue (sql is AggregateCacheDependency, "#B2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.Caching/SubstitutionResponseElementTest.cs b/mcs/class/System.Web/Test/System.Web.Caching/SubstitutionResponseElementTest.cs index e277b12f0c..64a32af27b 100644 --- a/mcs/class/System.Web/Test/System.Web.Caching/SubstitutionResponseElementTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Caching/SubstitutionResponseElementTest.cs @@ -28,7 +28,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Web; using System.Web.Caching; @@ -61,4 +60,3 @@ namespace MonoTests.System.Web.Caching } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.Compilation/BuildManagerTest.cs b/mcs/class/System.Web/Test/System.Web.Compilation/BuildManagerTest.cs index 7a748e634d..28de9a7623 100644 --- a/mcs/class/System.Web/Test/System.Web.Compilation/BuildManagerTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Compilation/BuildManagerTest.cs @@ -41,7 +41,6 @@ namespace MonoTests.System.Web.Compilation [Serializable] public class BuildManagerTest { -#if NET_4_0 [Test] [Ignore ("Pending investigation if it is indeed the correct test.")] public void GetGlobalAsaxType () @@ -59,6 +58,5 @@ namespace MonoTests.System.Web.Compilation Assert.AreEqual ("", BuildManager.TargetFramework.Profile, "#A1-3"); Assert.AreEqual (new Version (4, 0), BuildManager.TargetFramework.Version, "#A1-4"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.Compilation/BuildProviderTest.cs b/mcs/class/System.Web/Test/System.Web.Compilation/BuildProviderTest.cs index fa8d77031c..852b3773c9 100644 --- a/mcs/class/System.Web/Test/System.Web.Compilation/BuildProviderTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Compilation/BuildProviderTest.cs @@ -25,7 +25,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.CodeDom; using System.IO; @@ -78,4 +77,3 @@ namespace MonoTests.System.Web.Compilation { } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.Compilation/RouteUrlExpressionBuilderTest.cs b/mcs/class/System.Web/Test/System.Web.Compilation/RouteUrlExpressionBuilderTest.cs index a549dd5825..68a97a2e7e 100644 --- a/mcs/class/System.Web/Test/System.Web.Compilation/RouteUrlExpressionBuilderTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Compilation/RouteUrlExpressionBuilderTest.cs @@ -25,7 +25,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.CodeDom; using System.IO; @@ -286,4 +285,3 @@ namespace MonoTests.System.Web.Compilation } } } -#endif diff --git a/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeySectionTest.cs b/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeySectionTest.cs index 7b1b941dae..dd324ad038 100644 --- a/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeySectionTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeySectionTest.cs @@ -40,26 +40,16 @@ namespace MonoTests.System.Web.Configuration { public void DefaultValues () { MachineKeySection section = new MachineKeySection (); -#if NET_4_0 Assert.AreEqual (MachineKeyCompatibilityMode.Framework20SP1, section.CompatibilityMode, "CompatibilityMode"); -#endif Assert.AreEqual ("Auto", section.Decryption, "Decryption"); Assert.AreEqual ("AutoGenerate,IsolateApps", section.DecryptionKey, "DecryptionKey"); -#if NET_4_0 Assert.AreEqual (MachineKeyValidation.HMACSHA256, section.Validation, "Validation"); Assert.AreEqual ("HMACSHA256", section.ValidationAlgorithm, "ValidationAlgorithm"); -#else - Assert.AreEqual (MachineKeyValidation.SHA1, section.Validation, "Validation"); -#endif Assert.AreEqual ("AutoGenerate,IsolateApps", section.ValidationKey, "ValidationKey"); } [Test] -#if NET_4_0 [ExpectedException (typeof (NullReferenceException))] -#else - [ExpectedException (typeof (ConfigurationErrorsException))] -#endif public void Decryption_Null () { MachineKeySection section = new MachineKeySection (); @@ -73,7 +63,6 @@ namespace MonoTests.System.Web.Configuration { MachineKeySection section = new MachineKeySection (); section.Decryption = String.Empty; } -#if NET_4_0 [Test] public void Decryption_RC2 () { @@ -172,7 +161,6 @@ namespace MonoTests.System.Web.Configuration { Assert.AreEqual (MachineKeyValidation.Custom, section.Validation, "after"); Assert.AreEqual ("alg:UnexistingType", section.ValidationAlgorithm, "ValidationAlgorithm"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeyValidationConverterTest.cs b/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeyValidationConverterTest.cs index f99158367c..a9a605c61c 100644 --- a/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeyValidationConverterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Configuration/MachineKeyValidationConverterTest.cs @@ -77,7 +77,6 @@ namespace MonoTests.System.Web.Configuration { o = cv.ConvertFrom (null, null, "AES"); Assert.AreEqual ("AES", o.ToString (), "AES"); -#if NET_4_0 o = cv.ConvertFrom (null, null, "HMACSHA256"); Assert.AreEqual ("HMACSHA256", o.ToString (), "HMACSHA256"); @@ -86,10 +85,8 @@ namespace MonoTests.System.Web.Configuration { o = cv.ConvertFrom (null, null, "HMACSHA512"); Assert.AreEqual ("HMACSHA512", o.ToString (), "HMACSHA512"); -#endif } -#if NET_4_0 [Test] [ExpectedException (typeof (ArgumentException))] public void ConvertFrom_Custom () @@ -97,7 +94,6 @@ namespace MonoTests.System.Web.Configuration { MachineKeyValidationConverter cv = new MachineKeyValidationConverter (); cv.ConvertFrom (null, null, "Custom"); } -#endif [Test] [ExpectedException (typeof (ArgumentException))] @@ -126,14 +122,11 @@ namespace MonoTests.System.Web.Configuration { Assert.AreEqual ("MD5", cv.ConvertTo (null, null, MachineKeyValidation.MD5, typeof (string)), "A1"); Assert.AreEqual ("SHA1", cv.ConvertTo (null, null, MachineKeyValidation.SHA1, typeof (string)), "A2"); Assert.AreEqual ("3DES", cv.ConvertTo (null, null, MachineKeyValidation.TripleDES, typeof (string)), "A3"); -#if NET_4_0 Assert.AreEqual ("HMACSHA256", cv.ConvertTo (null, null, MachineKeyValidation.HMACSHA256, typeof (string)), "HMACSHA256"); Assert.AreEqual ("HMACSHA384", cv.ConvertTo (null, null, MachineKeyValidation.HMACSHA384, typeof (string)), "HMACSHA384"); Assert.AreEqual ("HMACSHA512", cv.ConvertTo (null, null, MachineKeyValidation.HMACSHA512, typeof (string)), "HMACSHA512"); -#endif } -#if NET_4_0 [Test] [ExpectedException (typeof (ArgumentException))] public void ConvertTo_Custom () @@ -141,14 +134,9 @@ namespace MonoTests.System.Web.Configuration { MachineKeyValidationConverter cv = new MachineKeyValidationConverter (); cv.ConvertTo (null, null, MachineKeyValidation.Custom, typeof (string)); } -#endif [Test] -#if NET_4_0 [ExpectedException (typeof (ArgumentException))] -#else - [ExpectedException (typeof (NullReferenceException))] -#endif public void ConvertTo_NullError () { MachineKeyValidationConverter cv = new MachineKeyValidationConverter (); @@ -157,11 +145,7 @@ namespace MonoTests.System.Web.Configuration { } [Test] -#if NET_4_0 [ExpectedException (typeof (ArgumentException))] -#else - [ExpectedException (typeof (FormatException))] -#endif public void ConvertTo_TypeError1 () { MachineKeyValidationConverter cv = new MachineKeyValidationConverter (); @@ -179,11 +163,7 @@ namespace MonoTests.System.Web.Configuration { } [Test] -#if NET_4_0 [ExpectedException (typeof (ArgumentException))] -#else - [ExpectedException (typeof (FormatException))] -#endif public void ConvertTo_TypeError3 () { MachineKeyValidationConverter cv = new MachineKeyValidationConverter (); diff --git a/mcs/class/System.Web/Test/System.Web.Security/MachineKeyTest.cs b/mcs/class/System.Web/Test/System.Web.Security/MachineKeyTest.cs index d00e0eb60d..06ee42a1a1 100644 --- a/mcs/class/System.Web/Test/System.Web.Security/MachineKeyTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Security/MachineKeyTest.cs @@ -28,7 +28,6 @@ using System.Security.Cryptography; -#if NET_4_0 using System; using System.Text; using System.Web.Security; @@ -204,4 +203,3 @@ namespace MonoTests.System.Web.Security #endif } } -#endif diff --git a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlFormTest.cs b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlFormTest.cs index 58b7881c24..b08edd3da7 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlFormTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlFormTest.cs @@ -200,11 +200,9 @@ namespace MonoTests.System.Web.UI.HtmlControls { // Indirect test for HttpRequest.QueryStringRaw, see // https://bugzilla.novell.com/show_bug.cgi?id=376352 -#if NET_4_0 Assert.AreEqual (" method=\"post\" action=\"?q=1&q2=2\"", attrs, "A1"); form.RenderingCompatibility = new Version (3, 5); attrs = form.RenderAttributes (); -#endif Assert.AreEqual (" name=\"aspnetForm\" method=\"post\" action=\"?q=1&q2=2\"", attrs, "A2"); } #endif @@ -218,11 +216,9 @@ namespace MonoTests.System.Web.UI.HtmlControls { form.Page = p; form.Action = "someactionfile.aspx"; string attrs = form.RenderAttributes (); -#if NET_4_0 Assert.AreEqual (" method=\"post\" action=\"someactionfile.aspx\"", attrs, "A1"); form.RenderingCompatibility = new Version (3, 5); attrs = form.RenderAttributes (); -#endif Assert.AreEqual (" name=\"aspnetForm\" method=\"post\" action=\"someactionfile.aspx\"", attrs, "A2"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlInputButtonTest.cs b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlInputButtonTest.cs index a9e39053d6..5ae77e49dd 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlInputButtonTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.HtmlControls/HtmlInputButtonTest.cs @@ -157,13 +157,8 @@ namespace MonoTests.System.Web.UI.HtmlControls { [Test] public void OnClickAttributeWithSpecials () { -#if NET_4_0 string origHtml = "alert('<&');"; string origHtml2 = "alert('<&');"; -#else - string origHtml = "alert('<&');"; - string origHtml2 = "alert('<&');"; -#endif StringWriter sw = new StringWriter (); HtmlTextWriter tw = new HtmlTextWriter (sw); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs index 804313f84a..fe1cb73ac5 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls.Adapters/MenuAdapterTest.cs @@ -57,9 +57,7 @@ namespace MonoTests.System.Web.UI.WebControls.Adapters { p = new Page (); c = new MyMenu (); -#if NET_4_0 c.RenderingMode = MenuRenderingMode.Table; -#endif a = new MyMenuAdapter (c); p.Controls.Add(c); sw = new StringWriter (); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataBoundControlTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataBoundControlTest.cs index b312107569..dc358f382b 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataBoundControlTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataBoundControlTest.cs @@ -180,7 +180,6 @@ namespace MonoTests.System.Web.UI.WebControls p.DataSource = new Object(); Assert.AreEqual (true, p.ValidateDataSourceCalled); } -#if NET_4_0 [Test] public void SupportsDisabledAttribute () { @@ -194,6 +193,5 @@ namespace MonoTests.System.Web.UI.WebControls Assert.AreEqual (ver35, p.RenderingCompatibility, "#A2-1"); Assert.IsTrue (p.SupportsDisabledAttribute, "#A2-2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataListTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataListTest.cs index 82355fa455..8202d2c4ea 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataListTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BaseDataListTest.cs @@ -802,7 +802,6 @@ namespace MonoTests.System.Web.UI.WebControls { // and junk Assert.IsFalse (BaseDataList.IsBindableType (this.GetType ()), "this"); } -#if NET_4_0 [Test] public void SupportsDisabledAttribute () { @@ -816,6 +815,5 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual (ver35, p.RenderingCompatibility, "#A2-1"); Assert.IsTrue (p.SupportsDisabledAttribute, "#A2-2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BoundFieldTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BoundFieldTest.cs index df66f3bca3..1b168a53f2 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/BoundFieldTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/BoundFieldTest.cs @@ -130,11 +130,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 646505")] public void BoundField_Bug646505 () { -#if NET_4_0 string originalHtml = "
    \n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\n\t
      
    Update Cancel
    EditFalse
    \n
    \n"; -#else - string originalHtml = "
    \n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\n\t\t\t\n\t\t\n\t
      
    Update Cancel
    EditFalse
    \n
    \n"; -#endif WebTest t = new WebTest ("BoundField_Bug646505.aspx"); t.Run (); @@ -371,11 +367,7 @@ namespace MonoTests.System.Web.UI.WebControls Assert.IsTrue (bf.DoSupportsHtmlEncode, "#A1-3"); bf.DataFormatString = formatString; -#if NET_4_0 Assert.AreEqual ("<script>alert ('<test>');</script>", bf.DoFormatDataValue ("", true), "#A2"); -#else - Assert.AreEqual ("<script>alert ('<test>');</script>", bf.DoFormatDataValue ("", true), "#A2"); -#endif Assert.AreEqual (String.Format (formatString, ""), bf.DoFormatDataValue ("", false), "#A3"); bf.HtmlEncodeFormatString = false; @@ -383,11 +375,7 @@ namespace MonoTests.System.Web.UI.WebControls var ec = new EncodingTest (); bf.HtmlEncodeFormatString = true; -#if NET_4_0 Assert.AreEqual ("<script>alert ('<EncodingTest>&');</script>", bf.DoFormatDataValue (ec, true), "#A4"); -#else - Assert.AreEqual ("<script>alert ('<EncodingTest>&');</script>", bf.DoFormatDataValue (ec, true), "#A4"); -#endif } [Test] diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangePasswordTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangePasswordTest.cs index 56760e1022..4fc1f75f85 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangePasswordTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ChangePasswordTest.cs @@ -823,7 +823,6 @@ namespace MonoTests.System.Web.UI.WebControls RequiredFieldValidator rfv = cp.ChangePasswordTemplateContainer.FindControl ("text1required") as RequiredFieldValidator; Assert.IsNotNull (rfv, "#A2"); } -#if NET_4_0 [Test] public void RenderOuterTableForbiddenStyles () { @@ -890,7 +889,6 @@ namespace MonoTests.System.Web.UI.WebControls } } } -#endif [TestFixtureTearDown] public void TearDown () { diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxFieldTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxFieldTest.cs index 5645545eed..dc40bf1111 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxFieldTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxFieldTest.cs @@ -127,11 +127,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 595568 #0")] public void CheckBoxField_Bug595568_0 () { -#if NET_4_0 string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#else - string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#endif WebTest t = new WebTest ("CheckBoxField_Bug595568_0.aspx"); string pageHtml = t.Run (); string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); @@ -142,11 +138,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 595568 #1")] public void CheckBoxField_Bug595568_1 () { -#if NET_4_0 string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#else - string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#endif WebTest t = new WebTest ("CheckBoxField_Bug595568_1.aspx"); string pageHtml = t.Run (); string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); @@ -157,11 +149,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 595568 #2")] public void CheckBoxField_Bug595568_2 () { -#if NET_4_0 string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#else - string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#endif WebTest t = new WebTest ("CheckBoxField_Bug595568_2.aspx"); string pageHtml = t.Run (); @@ -185,11 +173,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 595568 #6")] public void CheckBoxField_Bug595568_6 () { -#if NET_4_0 string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#else - string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#endif WebTest t = new WebTest ("CheckBoxField_Bug595568_6.aspx"); string pageHtml = t.Run (); @@ -201,11 +185,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test (Description="Bug 595568 #7")] public void CheckBoxField_Bug595568_7 () { -#if NET_4_0 string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#else - string originalHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
     
    \r\n
    "; -#endif WebTest t = new WebTest ("CheckBoxField_Bug595568_7.aspx"); string pageHtml = t.Run (); string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxListTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxListTest.cs index 1860f47b4b..afa86b3835 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxListTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxListTest.cs @@ -160,13 +160,8 @@ namespace MonoTests.System.Web.UI.WebControls { { WebTest t = new WebTest ("CheckBoxList_Bug377703_1.aspx"); t.Invoker = PageInvoker.CreateOnInit (CheckBoxList_Bug377703_1_OnInit); -#if NET_4_0 string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#else - string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; - string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#endif string html = t.Run (); string listHtml = HtmlDiff.GetControlFromPageHtml (html); @@ -215,15 +210,9 @@ namespace MonoTests.System.Web.UI.WebControls { { WebTest t = new WebTest ("CheckBoxList_Bug377703_2.aspx"); t.Invoker = PageInvoker.CreateOnInit (CheckBoxList_Bug377703_2_OnInit); -#if NET_4_0 string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; string origHtmlThird = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#else - string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; - string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; - string origHtmlThird = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#endif string html = t.Run (); string listHtml = HtmlDiff.GetControlFromPageHtml (html); @@ -276,11 +265,7 @@ namespace MonoTests.System.Web.UI.WebControls { { WebTest t = new WebTest ("CheckBoxList_Bug578770.aspx"); t.Invoker = PageInvoker.CreateOnInit (CheckBoxList_Bug578770_OnInit); -#if NET_4_0 string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#else - string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#endif string html = t.Run (); string listHtml = HtmlDiff.GetControlFromPageHtml (html); @@ -300,15 +285,9 @@ namespace MonoTests.System.Web.UI.WebControls { public void CheckBoxList_Bug600415 () { WebTest t = new WebTest ("CheckBoxList_Bug600415.aspx"); -#if NET_4_0 string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; string origHtmlThird = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#else - string origHtmlFirst = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; - string origHtmlSecond = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; - string origHtmlThird = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#endif string html = t.Run (); string listHtml = HtmlDiff.GetControlFromPageHtml (html); @@ -386,13 +365,8 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void RenderItem () { -#if NET_4_0 string origHtml1 = ""; string origHtml2 = ""; -#else - string origHtml1 = ""; - string origHtml2 = ""; -#endif CheckBoxListPoker c = new CheckBoxListPoker (); ListItem l1 = new ListItem ("item1", "value1"); ListItem l2 = new ListItem ("item2", "value2"); @@ -561,11 +535,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void RepeatInfoRenderItem () { -#if NET_4_0 string origHtml = ""; -#else - string origHtml = ""; -#endif StringWriter sw = new StringWriter (); HtmlTextWriter tw = new HtmlTextWriter (sw); CheckBoxList c = new CheckBoxList (); @@ -640,13 +610,8 @@ namespace MonoTests.System.Web.UI.WebControls { [Category("NotDotNet")] // MS's implementation throws NRE's from these public void Render () { -#if NET_4_0 string origHtml1 = "\n\t\n\t\t\n\t\n
    "; string origHtml2 = "\n\t\n\t\t\n\t\n
    "; -#else - string origHtml1 = "\n\t\n\t\t\n\t\n
    "; - string origHtml2 = "\n\t\n\t\t\n\t\n
    "; -#endif CheckBoxList c; c = new CheckBoxList (); c.Items.Add ("foo"); @@ -666,19 +631,11 @@ namespace MonoTests.System.Web.UI.WebControls { CheckBoxList c = new CheckBoxList (); c.TabIndex = 5; c.Items.Add ("Item1"); -#if NET_4_0 string exp = @"
    "; -#else - string exp = @" - - - -
    "; -#endif Render (c, exp, "B1"); } @@ -690,19 +647,11 @@ namespace MonoTests.System.Web.UI.WebControls { CheckBoxList c = new CheckBoxList (); c.Enabled = false; c.Items.Add ("Item1"); -#if NET_4_0 string exp = @"
    "; -#else - string exp = @" - - - -
    "; -#endif Render (c, exp, "C1"); } class TestCheckBoxList : CheckBoxList diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxTest.cs index 2bcb4c0f9b..1cdc7cdd46 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/CheckBoxTest.cs @@ -186,11 +186,7 @@ namespace MonoTests.System.Web.UI.WebControls { c.InputAttributes.Add ("value", "value1"); c.Text = "Title"; c.Checked = true; -#if NET_4_0 string origHtml = ""; -#else - string origHtml = ""; -#endif string html = c.Render (); HtmlDiff.AssertAreEqual (origHtml, html, "#A1"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs new file mode 100644 index 0000000000..a957bc84b8 --- /dev/null +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs @@ -0,0 +1,2255 @@ +// +// Tests for System.Web.UI.WebControls.DataGrid.cs +// +// Author: +// Jackson Harper (jackson@ximian.com) +// Gonzalo Paniagua Javier (gonzalo@ximian.com) +// +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + +using NUnit.Framework; +using AttributeCollection = System.ComponentModel.AttributeCollection; +using System; +using System.Drawing; +using System.IO; +using System.Globalization; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Collections; +using System.Data; +using System.ComponentModel; +using System.Diagnostics; +using System.Collections.Generic; +using MonoTests.SystemWeb.Framework; +using MonoTests.stand_alone.WebHarness; + +namespace MonoTests.System.Web.UI.WebControls { + + public class DataGridPoker : DataGrid { + + public DataGridPoker () + { + TrackViewState (); + } + + public string GetTagName () + { + return TagName; + } + + public void PrepareCH () + { + PrepareControlHierarchy (); + } + + public string Render () + { + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + + Render (tw); + return sw.ToString (); + } + + public StateBag GetViewState () + { + return ViewState; + } + + public new Style ControlStyle () + { + return CreateControlStyle (); + } + + public void DoCancelCommand (DataGridCommandEventArgs e) + { + OnCancelCommand (e); + } + + public void DoDeleteCommand (DataGridCommandEventArgs e) + { + OnDeleteCommand (e); + } + + public void DoEditCommand (DataGridCommandEventArgs e) + { + OnEditCommand (e); + } + + public void DoItemCommand (DataGridCommandEventArgs e) + { + OnItemCommand (e); + } + + public void DoUpdateCommand (DataGridCommandEventArgs e) + { + OnUpdateCommand (e); + } + + public void DoItemCreated (DataGridItemEventArgs e) + { + OnItemCreated (e); + } + + public void DoItemDataBound (DataGridItemEventArgs e) + { + OnItemDataBound (e); + } + + public void DoPageIndexChanged (DataGridPageChangedEventArgs e) + { + OnPageIndexChanged (e); + } + + public void DoSortCommand (DataGridSortCommandEventArgs e) + { + OnSortCommand (e); + } + + public void DoBubbleEvent (object source, EventArgs e) + { + OnBubbleEvent (source, e); + } + + public void TrackState () + { + TrackViewState (); + } + + public object SaveState () + { + return SaveViewState (); + } + + public ArrayList CreateColumns (PagedDataSource data_source, bool use_data_source) + { + return CreateColumnSet (data_source, use_data_source); + } + + public void CreateControls (bool use_data_source) + { + CreateControlHierarchy (use_data_source); + } + + public void InitPager (DataGridItem item, int columnSpan, + PagedDataSource pagedDataSource) + { + InitializePager (item, columnSpan, pagedDataSource); + } + } + + public class AmazingEnumerable : IEnumerable { + + private IList list; + public int CallCount; + + public AmazingEnumerable (IList list) + { + this.list = list; + } + + public IEnumerator GetEnumerator () + { + CallCount++; + return list.GetEnumerator (); + } + + } + + [TestFixture] + public class DataGridTest { + + [TestFixtureSetUp()] + public void FixtureSetup () + { + WebTest.CopyResource (GetType (), "DataGrid.aspx", "DataGrid.aspx"); + } + + [TestFixtureTearDown()] + public void FixtureTearDown () + { + WebTest.Unload (); + } + + [Test] + public void Defaults () + { + DataGridPoker p = new DataGridPoker (); + + Assert.AreEqual (DataGrid.CancelCommandName, "Cancel", "A1"); + Assert.AreEqual (DataGrid.DeleteCommandName, "Delete", "A2"); + Assert.AreEqual (DataGrid.EditCommandName, "Edit", "A3"); + Assert.AreEqual (DataGrid.NextPageCommandArgument, "Next", "A4"); + Assert.AreEqual (DataGrid.PageCommandName, "Page", "A5"); + Assert.AreEqual (DataGrid.PrevPageCommandArgument, "Prev", "A6"); + Assert.AreEqual (DataGrid.SelectCommandName, "Select", "A7"); + Assert.AreEqual (DataGrid.SortCommandName, "Sort", "A8"); + Assert.AreEqual (DataGrid.UpdateCommandName, "Update", "A9"); + + Assert.AreEqual (p.AllowCustomPaging, false, "A10"); + Assert.AreEqual (p.AllowPaging, false, "A11"); + Assert.AreEqual (p.AllowSorting, false, "A12"); + Assert.AreEqual (p.AutoGenerateColumns, true, "A13"); + Assert.AreEqual (p.BackImageUrl, String.Empty, "A14"); + Assert.AreEqual (p.CurrentPageIndex, 0, "A15"); + Assert.AreEqual (p.EditItemIndex, -1, "A16"); + Assert.AreEqual (p.PageCount, 0, "A17"); + Assert.AreEqual (p.PageSize, 10, "A18"); + Assert.AreEqual (p.SelectedIndex, -1, "A19"); + Assert.AreEqual (p.SelectedItem, null, "A20"); + Assert.AreEqual (p.ShowFooter, false, "A21"); + Assert.AreEqual (p.ShowHeader, true, "A22"); + Assert.AreEqual (p.VirtualItemCount, 0, "A23"); + } + + [Test] + public void TagName () + { + DataGridPoker p = new DataGridPoker (); + Assert.AreEqual (p.GetTagName (), "table", "A1"); + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void NullBackImage () + { + DataGridPoker p = new DataGridPoker (); + + p.BackImageUrl = null; + Assert.AreEqual (p.BackImageUrl, String.Empty, "A1"); + } + + [Test] + public void CleanProperties () + { + DataGridPoker p = new DataGridPoker (); + + p.AllowCustomPaging = true; + Assert.IsTrue (p.AllowCustomPaging, "A1"); + p.AllowCustomPaging = false; + Assert.IsFalse (p.AllowCustomPaging, "A2"); + + p.AllowPaging = true; + Assert.IsTrue (p.AllowPaging, "A3"); + p.AllowPaging = false; + Assert.IsFalse (p.AllowPaging, "A4"); + + p.AllowSorting = true; + Assert.IsTrue (p.AllowSorting, "A5"); + p.AllowSorting = false; + Assert.IsFalse (p.AllowSorting, "A6"); + + p.AutoGenerateColumns = true; + Assert.IsTrue (p.AutoGenerateColumns, "A7"); + p.AutoGenerateColumns = false; + Assert.IsFalse (p.AutoGenerateColumns, "A8"); + + p.BackImageUrl = "foobar"; + Assert.AreEqual (p.BackImageUrl, "foobar", "A9"); + + p.CurrentPageIndex = 0; + Assert.AreEqual (p.CurrentPageIndex, 0, "A10"); + p.CurrentPageIndex = Int32.MaxValue; + Assert.AreEqual (p.CurrentPageIndex, Int32.MaxValue, "A11"); + + p.EditItemIndex = 0; + Assert.AreEqual (p.EditItemIndex, 0, "A12"); + p.EditItemIndex = -1; + Assert.AreEqual (p.EditItemIndex, -1, "A13"); + p.EditItemIndex = Int32.MaxValue; + Assert.AreEqual (p.EditItemIndex, Int32.MaxValue, "A14"); + + p.PageSize = 1; + Assert.AreEqual (p.PageSize, 1, "A15"); + p.PageSize = Int32.MaxValue; + + p.SelectedIndex = 0; + Assert.AreEqual (p.SelectedIndex, 0, "A16"); + p.SelectedIndex = -1; + Assert.AreEqual (p.SelectedIndex, -1, "A17"); + p.SelectedIndex = Int32.MaxValue; + Assert.AreEqual (p.SelectedIndex, Int32.MaxValue, "A18"); + + p.ShowFooter = true; + Assert.IsTrue (p.ShowFooter, "A19"); + p.ShowFooter = false; + Assert.IsFalse (p.ShowFooter, "A20"); + + p.ShowHeader = true; + Assert.IsTrue (p.ShowHeader, "A21"); + p.ShowHeader = false; + Assert.IsFalse (p.ShowHeader, "A22"); + + p.VirtualItemCount = 0; + Assert.AreEqual (p.VirtualItemCount, 0, "A23"); + p.VirtualItemCount = Int32.MaxValue; + Assert.AreEqual (p.VirtualItemCount, Int32.MaxValue, "A24"); + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void CurrentPageIndexTooLow () + { + DataGridPoker p = new DataGridPoker (); + p.CurrentPageIndex = -1; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void EditItemIndexTooLow () + { + DataGridPoker p = new DataGridPoker (); + p.EditItemIndex = -2; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void PageSizeTooLow () + { + DataGridPoker p = new DataGridPoker (); + p.PageSize = 0; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void SelectedIndexTooLow () + { + DataGridPoker p = new DataGridPoker (); + p.SelectedIndex = -2; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void VirtualItemCountTooLow () + { + DataGridPoker p = new DataGridPoker (); + p.VirtualItemCount = -1; + } + + [Test] + public void ViewState () + { + DataGridPoker p = new DataGridPoker (); + StateBag vs = p.GetViewState (); + + Assert.AreEqual (vs.Count, 0, "A1"); + + p.AllowCustomPaging = true; + Assert.AreEqual (vs.Count, 1, "A2"); + Assert.AreEqual (vs ["AllowCustomPaging"], true, "A3"); + p.AllowCustomPaging = false; + Assert.AreEqual (vs.Count, 1, "A4"); + Assert.AreEqual (vs ["AllowCustomPaging"], false, "A5"); + + p.AllowPaging = true; + Assert.AreEqual (vs.Count, 2, "A6"); + Assert.AreEqual (vs ["AllowPaging"], true, "A7"); + p.AllowPaging = false; + Assert.AreEqual (vs.Count, 2, "A8"); + Assert.AreEqual (vs ["AllowPaging"], false, "A9"); + + p.AllowSorting = true; + Assert.AreEqual (vs.Count, 3, "A10"); + Assert.AreEqual (vs ["AllowSorting"], true, "A11"); + p.AllowSorting = false; + Assert.AreEqual (vs.Count, 3, "A12"); + Assert.AreEqual (vs ["AllowSorting"], false, "A13"); + + p.AutoGenerateColumns = true; + Assert.AreEqual (vs.Count, 4, "A14"); + Assert.AreEqual (vs ["AutoGenerateColumns"], true, "A15"); + p.AutoGenerateColumns = false; + Assert.AreEqual (vs.Count, 4, "A16"); + Assert.AreEqual (vs ["AutoGenerateColumns"], false, "A17"); + + p.CurrentPageIndex = 1; + Assert.AreEqual (vs.Count, 5, "A18"); + Assert.AreEqual (vs ["CurrentPageIndex"], 1, "A19"); + + p.EditItemIndex = 1; + Assert.AreEqual (vs.Count, 6, "A20"); + Assert.AreEqual (vs ["EditItemIndex"], 1, "A20"); + + p.PageSize = 25; + Assert.AreEqual (vs.Count, 7, "A21"); + Assert.AreEqual (vs ["PageSize"], 25, "A22"); + + p.SelectedIndex = 25; + Assert.AreEqual (vs.Count, 8, "A23"); + Assert.AreEqual (vs ["SelectedIndex"], 25, "A24"); + + p.ShowFooter = false; + Assert.AreEqual (vs.Count, 9, "A25"); + Assert.AreEqual (vs ["ShowFooter"], false, "A26"); + p.ShowFooter = true; + Assert.AreEqual (vs ["ShowFooter"], true, "A27"); + + p.ShowHeader = false; + Assert.AreEqual (vs.Count, 10, "A28"); + Assert.AreEqual (vs ["ShowHeader"], false, "A29"); + p.ShowHeader = true; + Assert.AreEqual (vs ["ShowHeader"], true, "A30"); + + p.VirtualItemCount = 100; + Assert.AreEqual (vs.Count, 11, "A31"); + Assert.AreEqual (vs ["VirtualItemCount"], 100, "A32"); + } + + [Test] + public void SelectIndexOutOfRange () + { + DataGridPoker p = new DataGridPoker (); + + // No exception is thrown + p.SelectedIndex = 25; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void SelectItemOutOfRange () + { + DataGridPoker p = new DataGridPoker (); + DataGridItem d; + + p.SelectedIndex = 25; + d = p.SelectedItem; + } + + [Test] + public void ControlStyle () + { + DataGridPoker p = new DataGridPoker (); + + Assert.AreEqual (p.ControlStyle ().GetType (), + typeof (TableStyle), "A1"); + + TableStyle t = (TableStyle) p.ControlStyle (); + Assert.AreEqual (t.GridLines, GridLines.Both, "A2"); + Assert.AreEqual (t.CellSpacing, 0, "A3"); + } + + [Test] + public void Styles () + { + DataGridPoker p = new DataGridPoker (); + StateBag vs = p.GetViewState (); + + p.BackImageUrl = "foobar url"; + + // The styles get stored in the view state + Assert.AreEqual (vs.Count, 0, "A1"); + Assert.IsNull (vs ["BackImageUrl"], "A2"); + Assert.IsNull (vs ["GridLines"], "A3"); + Assert.IsNull (vs ["CellSpacing"], "A4"); + } + + private bool cancel_command; + private bool delete_command; + private bool edit_command; + private bool item_command; + private bool update_command; + private bool item_created; + private bool item_data_bound; + private bool page_index_changed; + private bool sort_command; + private bool selected_changed; + + private int new_page_index; + + private void ResetEvents () + { + cancel_command = + delete_command = + edit_command = + item_command = + update_command = + item_created = + item_data_bound = + page_index_changed = + sort_command = + selected_changed = false; + + new_page_index = Int32.MinValue; + } + + private void CancelCommandHandler (object sender, DataGridCommandEventArgs e) + { + cancel_command = true; + } + + private void DeleteCommandHandler (object sender, DataGridCommandEventArgs e) + { + delete_command = true; + } + + private void EditCommandHandler (object sender, DataGridCommandEventArgs e) + { + edit_command = true; + } + + private void ItemCommandHandler (object sender, DataGridCommandEventArgs e) + { + item_command = true; + } + + private void UpdateCommandHandler (object sender, DataGridCommandEventArgs e) + { + update_command = true; + } + + private void ItemCreatedHandler (object sender, DataGridItemEventArgs e) + { + item_created = true; + } + + private void ItemDataBoundHandler (object sender, DataGridItemEventArgs e) + { + item_data_bound = true; + } + + private void PageIndexChangedHandler (object sender, DataGridPageChangedEventArgs e) + { + page_index_changed = true; + new_page_index = e.NewPageIndex; + } + + private void SortCommandHandler (object sender, DataGridSortCommandEventArgs e) + { + sort_command = true; + } + + private void SelectedIndexChangedHandler (object sender, EventArgs e) + { + selected_changed = true; + } + + [Test] + public void Events () + { + DataGridPoker p = new DataGridPoker (); + DataGridCommandEventArgs command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs (String.Empty, String.Empty)); + DataGridItemEventArgs item_args = new DataGridItemEventArgs (null); + DataGridPageChangedEventArgs page_args = new DataGridPageChangedEventArgs (null, 0); + DataGridSortCommandEventArgs sort_args = new DataGridSortCommandEventArgs (null, + command_args); + + ResetEvents (); + p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); + p.DoCancelCommand (command_args); + Assert.IsTrue (cancel_command, "A1"); + + ResetEvents (); + p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); + p.DoDeleteCommand (command_args); + Assert.IsTrue (delete_command, "A2"); + + ResetEvents (); + p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); + p.DoEditCommand (command_args); + Assert.IsTrue (edit_command, "A3"); + + ResetEvents (); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DoItemCommand (command_args); + Assert.IsTrue (item_command, "A4"); + + ResetEvents (); + p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); + p.DoUpdateCommand (command_args); + Assert.IsTrue (update_command, "A5"); + + ResetEvents (); + p.ItemCreated += new DataGridItemEventHandler (ItemCreatedHandler); + p.DoItemCreated (item_args); + Assert.IsTrue (item_created, "A6"); + + ResetEvents (); + p.ItemDataBound += new DataGridItemEventHandler (ItemDataBoundHandler); + p.DoItemDataBound (item_args); + Assert.IsTrue (item_data_bound, "A7"); + + ResetEvents (); + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoPageIndexChanged (page_args); + Assert.IsTrue (page_index_changed, "A8"); + + ResetEvents (); + p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); + p.DoSortCommand (sort_args); + Assert.IsTrue (sort_command, "A9"); + } + + [Test] + public void BubbleEvent () + { + DataGridPoker p = new DataGridPoker (); + DataGridCommandEventArgs command_args; + + // + // Cancel + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Cancel", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (cancel_command, "A1"); + Assert.IsTrue (item_command, "#01"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("cancel", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (cancel_command, "A2"); + Assert.IsTrue (item_command, "#02"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("CANCEL", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.CancelCommand += new DataGridCommandEventHandler (CancelCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (cancel_command, "A3"); + Assert.IsTrue (item_command, "#03"); + + // + // Delete + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Delete", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (delete_command, "A4"); + Assert.IsTrue (item_command, "#04"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("delete", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (delete_command, "A5"); + Assert.IsTrue (item_command, "#05"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("DELETE", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DeleteCommand += new DataGridCommandEventHandler (DeleteCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (delete_command, "A6"); + Assert.IsTrue (item_command, "#06"); + + // + // Edit + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Edit", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (edit_command, "A7"); + Assert.IsTrue (item_command, "#07"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("edit", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (edit_command, "A8"); + Assert.IsTrue (item_command, "#08"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("EDIT", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.EditCommand += new DataGridCommandEventHandler (EditCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (edit_command, "A9"); + Assert.IsTrue (item_command, "#09"); + + // + // Item + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Item", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (item_command, "A10"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("item", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (item_command, "A11"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("ITEM", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (item_command, "A12"); + + // + // Sort + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Sort", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (sort_command, "A13"); + Assert.IsTrue (item_command, "#10"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("sort", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (sort_command, "A14"); + Assert.IsTrue (item_command, "#11"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("SORT", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SortCommand += new DataGridSortCommandEventHandler (SortCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (sort_command, "A15"); + Assert.IsTrue (item_command, "#12"); + + // + // Update + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("Update", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (update_command, "A16"); + Assert.IsTrue (item_command, "#13"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("update", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (update_command, "A17"); + Assert.IsTrue (item_command, "#14"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (null, + null, new CommandEventArgs ("UPDATE", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.UpdateCommand += new DataGridCommandEventHandler (UpdateCommandHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (update_command, "A18"); + Assert.IsTrue (item_command, "#15"); + + // + // Select + // + DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Select", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (selected_changed, "A19"); + Assert.IsTrue (item_command, "#16"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("select", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (selected_changed, "A20"); + Assert.IsTrue (item_command, "#17"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("SELECT", String.Empty)); + p.ItemCommand += new DataGridCommandEventHandler (ItemCommandHandler); + p.SelectedIndexChanged += new EventHandler (SelectedIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (selected_changed, "A21"); + Assert.IsTrue (item_command, "#18"); + } + + [Test] + public void BubblePageCommand () + { + DataGridPoker p = new DataGridPoker (); + DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); + DataGridCommandEventArgs command_args; + + + // + // Prev + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", "Prev")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A1"); + Assert.AreEqual (new_page_index, 9, "A2"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("page", "prev")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A3"); + Assert.AreEqual (new_page_index, 9, "A4"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("PAGE", "PREV")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A5"); + Assert.AreEqual (new_page_index, 9, "A6"); + + + // + // Next + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", "Next")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A5"); + Assert.AreEqual (new_page_index, 11, "A6"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("page", "next")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A7"); + Assert.AreEqual (new_page_index, 11, "A8"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("PAGE", "NEXT")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A9"); + Assert.AreEqual (new_page_index, 11, "A10"); + + + // + // Specific + // + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", "25")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A11"); + Assert.AreEqual (new_page_index, 24, "A12"); + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", "0")); + p.CurrentPageIndex = 10; + p.PageIndexChanged += new DataGridPageChangedEventHandler (PageIndexChangedHandler); + p.DoBubbleEvent (this, command_args); + Assert.IsTrue (page_index_changed, "A11"); + Assert.AreEqual (new_page_index, -1, "A12"); + } + + [Test] + [ExpectedException (typeof (FormatException))] + public void BadBubblePageArg () + { + DataGridPoker p = new DataGridPoker (); + DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); + DataGridCommandEventArgs command_args; + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", "i am bad")); + + p.DoBubbleEvent (this, command_args); + } + + [Test] + [ExpectedException (typeof (InvalidCastException))] + public void BadBubblePageArg2 () + { + DataGridPoker p = new DataGridPoker (); + DataGridItem item = new DataGridItem (0, 0, ListItemType.Item); + DataGridCommandEventArgs command_args; + + ResetEvents (); + command_args = new DataGridCommandEventArgs (item, null, + new CommandEventArgs ("Page", new object ())); + + p.DoBubbleEvent (this, command_args); + } + + [Test] + public void SaveViewState () + { + DataGridPoker p = new DataGridPoker (); + + p.TrackState (); + + object [] vs = (object []) p.SaveState (); + Assert.AreEqual (vs.Length, 11, "A1"); + + // By default the viewstate is all null + for (int i = 0; i < vs.Length; i++) + Assert.IsNull (vs [i], "A2-" + i); + + // + // TODO: What goes in the [1] and [9] slots? + // + + p.AllowPaging = true; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [0], "A3"); + + /* + This test doesn't work right now. It must be an issue + in the DataGridPagerStyle + + p.PagerStyle.Visible = true; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [2], "A5"); + */ + + p.HeaderStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [3], "A6"); + + p.FooterStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [4], "A7"); + + p.ItemStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [5], "A8"); + + p.AlternatingItemStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [6], "A9"); + + p.SelectedItemStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [7], "A10"); + + p.EditItemStyle.HorizontalAlign = HorizontalAlign.Center; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [8], "A11"); + + PagedDataSource source = new PagedDataSource (); + DataTable table = new DataTable (); + ArrayList columns; + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + source.DataSource = new DataView (table); + columns = p.CreateColumns (source, true); + + vs = (object []) p.SaveState (); + Assert.IsNull (vs [9], "A12"); + p.BackImageUrl = "foobar url"; + vs = (object []) p.SaveState (); + Assert.IsNotNull (vs [9], "A12"); + + Assert.IsNotNull (vs [10], "A12"); + Assert.AreEqual (vs [10].GetType (), typeof (object []), "A12"); + + object [] cols = (object []) vs [10]; + Assert.AreEqual (cols.Length, 3, "A13"); + } + + [Test] + public void CreateColumnSet () + { + DataGridPoker p = new DataGridPoker (); + PagedDataSource source = new PagedDataSource (); + DataTable table = new DataTable (); + ArrayList columns; + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + + source.DataSource = new DataView (table); + + columns = p.CreateColumns (source, true); + Assert.AreEqual (columns.Count, 3, "A1"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A2"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A3"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A4"); + + // AutoGenerated columns are not added to the ColumnsCollection + Assert.AreEqual (p.Columns.Count, 0, "A5"); + + // Without allowing data dinding, + columns = p.CreateColumns (source, false); + Assert.AreEqual (columns.Count, 3, "A6"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A7"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A8"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A9"); + + + // Mixing with already added columns + p = new DataGridPoker (); + DataGridColumn a = new ButtonColumn (); + DataGridColumn b = new ButtonColumn (); + + a.HeaderText = "A"; + b.HeaderText = "B"; + p.Columns.Add (a); + p.Columns.Add (b); + + columns = p.CreateColumns (source, true); + Assert.AreEqual (columns.Count, 5, "A6"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "A", "A10"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "B", "A11"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "one", "A12"); + Assert.AreEqual (((DataGridColumn) columns [3]).HeaderText, "two", "A13"); + Assert.AreEqual (((DataGridColumn) columns [4]).HeaderText, "three", "A14"); + + // Assigned properties of the newly created columns + BoundColumn one = (BoundColumn) columns [2]; + + Assert.AreEqual (one.HeaderText, "one", "A15"); + Assert.AreEqual (one.DataField, "one", "A16"); + Assert.AreEqual (one.DataFormatString, String.Empty, "A17"); + Assert.AreEqual (one.SortExpression, "one", "A18"); + Assert.AreEqual (one.HeaderImageUrl, String.Empty, "A19"); + Assert.AreEqual (one.FooterText, String.Empty, "A20"); + } + + [Test] + public void CreateColumnsBinding () + { + DataGridPoker p = new DataGridPoker (); + PagedDataSource source = new PagedDataSource (); + DataTable table = new DataTable (); + ArrayList columns; + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + + source.DataSource = new DataView (table); + + columns = p.CreateColumns (source, true); + Assert.AreEqual (columns.Count, 3, "A1"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A2"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A3"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A4"); + + table.Columns.Add (new DataColumn ("four", typeof (string))); + table.Columns.Add (new DataColumn ("five", typeof (string))); + table.Columns.Add (new DataColumn ("six", typeof (string))); + + // Just gets the old columns + columns = p.CreateColumns (source, false); + Assert.AreEqual (columns.Count, 3, "A5"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A6"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A7"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A8"); + + columns = p.CreateColumns (source, true); + Assert.AreEqual (columns.Count, 6, "A9"); + Assert.AreEqual (((DataGridColumn) columns [0]).HeaderText, "one", "A10"); + Assert.AreEqual (((DataGridColumn) columns [1]).HeaderText, "two", "A11"); + Assert.AreEqual (((DataGridColumn) columns [2]).HeaderText, "three", "A12"); + Assert.AreEqual (((DataGridColumn) columns [3]).HeaderText, "four", "A13"); + Assert.AreEqual (((DataGridColumn) columns [4]).HeaderText, "five", "A14"); + Assert.AreEqual (((DataGridColumn) columns [5]).HeaderText, "six", "A15"); + + // Assigned properties of the newly created columns + BoundColumn one = (BoundColumn) columns [0]; + + Assert.AreEqual (one.HeaderText, "one", "A16"); + Assert.AreEqual (one.DataField, "one", "A17"); + Assert.AreEqual (one.DataFormatString, String.Empty, "A18"); + Assert.AreEqual (one.SortExpression, "one", "A19"); + Assert.AreEqual (one.HeaderImageUrl, String.Empty, "A20"); + Assert.AreEqual (one.FooterText, String.Empty, "A21"); + } + + [Test] + public void CreateSimpleColumns () + { + DataGridPoker p = new DataGridPoker (); + PagedDataSource source = new PagedDataSource (); + ArrayList list = new ArrayList (); + ArrayList columns; + + list.Add ("One"); + list.Add ("Two"); + list.Add ("Three"); + + source.DataSource = list; + columns = p.CreateColumns (source, true); + Assert.AreEqual (1, columns.Count, "A1"); + Assert.AreEqual ("Item", ((DataGridColumn) columns [0]).HeaderText, "A2"); + + AmazingEnumerable amazing = new AmazingEnumerable (list); + + source.DataSource = amazing; + columns = p.CreateColumns (source, true); + Assert.AreEqual (1, columns.Count, "A3"); + + BoundColumn one = (BoundColumn) columns [0]; + + Assert.AreEqual ("Item", one.HeaderText, "A4"); + + // I guess this makes it bind to itself ? + Assert.AreEqual (BoundColumn.thisExpr, one.DataField, "A5"); + + Assert.AreEqual (String.Empty, one.DataFormatString, "A6"); + Assert.AreEqual ("Item", one.SortExpression, "A7"); + Assert.AreEqual (String.Empty, one.HeaderImageUrl, "A8"); + Assert.AreEqual (String.Empty, one.FooterText, "A9"); + Assert.AreEqual ("Item", one.HeaderText, "A10"); + + source.DataSource = new ArrayList (); + columns = p.CreateColumns (source, true); + Assert.AreEqual (0, columns.Count, "A11"); + } + + [Test] + public void DataBindingEnumerator () + { + DataGridPoker p = new DataGridPoker (); + PagedDataSource source = new PagedDataSource (); + ArrayList list = new ArrayList (); + ArrayList columns; + + list.Add ("One"); + list.Add ("Two"); + list.Add ("Three"); + + AmazingEnumerable amazing = new AmazingEnumerable (list); + source.DataSource = amazing; + columns = p.CreateColumns (source, true); + Assert.AreEqual (1, columns.Count, "A1"); + Assert.AreEqual ("Item", ((DataGridColumn) columns [0]).HeaderText, "A2"); + Assert.AreEqual (1, amazing.CallCount, "A3"); + Assert.AreEqual (0, p.DataKeys.Count, "A4"); + } + + class Custom : ICustomTypeDescriptor { + public AttributeCollection GetAttributes () + { + throw new Exception (); + } + + public string GetClassName() + { + throw new Exception (); + } + + public string GetComponentName() + { + throw new Exception (); + } + + public TypeConverter GetConverter() + { + throw new Exception (); + } + + public EventDescriptor GetDefaultEvent() + { + throw new Exception (); + } + + public PropertyDescriptor GetDefaultProperty() + { + throw new Exception (); + } + + public object GetEditor (Type editorBaseType) + { + throw new Exception (); + } + + public EventDescriptorCollection GetEvents () + { + throw new Exception (); + } + + public EventDescriptorCollection GetEvents (Attribute[] arr) + { + throw new Exception (); + } + + public int CallCount; + public PropertyDescriptorCollection GetProperties() + { + // MS calls this one + if (CallCount++ > 0) + throw new Exception ("This should not happen"); + PropertyDescriptorCollection coll = new PropertyDescriptorCollection (null); + coll.Add (new MyPropertyDescriptor ()); + return coll; + } + + public PropertyDescriptorCollection GetProperties (Attribute[] arr) + { + // We call this one + return GetProperties (); + } + + public object GetPropertyOwner (PropertyDescriptor pd) + { + throw new Exception (); + } + } + + class MyPropertyDescriptor : PropertyDescriptor { + int val; + + public MyPropertyDescriptor () : base ("CustomName", null) + { + } + + public override Type ComponentType { + get { return typeof (MyPropertyDescriptor); } + } + + public override bool IsReadOnly { + get { return true; } + } + + public override Type PropertyType { + get { return typeof (int); } + } + + public override object GetValue (object component) + { + return val++; + } + + public override void SetValue (object component, object value) + { + } + + public override void ResetValue (object component) + { + } + + public override bool CanResetValue (object component) + { + return false; + } + + public override bool ShouldSerializeValue (object component) + { + return false; + } + } + + class MyEnumerable : IEnumerable { + public object Item; + public IEnumerator GetEnumerator () + { + ArrayList list = new ArrayList (); + list.Add (Item); + return list.GetEnumerator (); + } + } + + [Test] + public void DataBindingCustomElement () + { + DataGridPoker p = new DataGridPoker (); + p.DataKeyField = "CustomName"; + PagedDataSource source = new PagedDataSource (); + MyEnumerable myenum = new MyEnumerable (); + myenum.Item = new Custom (); + source.DataSource = myenum; + ArrayList columns = p.CreateColumns (source, true); + Assert.AreEqual (1, columns.Count, "A1"); + Assert.AreEqual ("CustomName", ((DataGridColumn) columns [0]).HeaderText, "A2"); + Assert.AreEqual (0, p.DataKeys.Count, "A3"); + } + + public class data + { + private static ArrayList _data = new ArrayList (); + + static data () { + _data.Add (new DataItem (1, "heh1")); + _data.Add (new DataItem (2, "heh2")); + _data.Add (new DataItem (3, "heh3")); + _data.Add (new DataItem (4, "heh4")); + _data.Add (new DataItem (5, "heh5")); + _data.Add (new DataItem (6, "heh6")); + _data.Add (new DataItem (7, "heh7")); + _data.Add (new DataItem (8, "heh8")); + _data.Add (new DataItem (9, "heh9")); + _data.Add (new DataItem (10, "heh10")); + } + + public data () { + } + + public ArrayList GetAllItems () { + return _data; + } + + public ArrayList GetPagedItems (int startIndex, int maxRows) + { + ArrayList list = new ArrayList (); + if (startIndex < _data.Count - 1) { + int countToReturn = Math.Min (maxRows, _data.Count - startIndex); + for (int i = startIndex; i < startIndex + countToReturn; i++) { + list.Add (_data [i]); + } + } + + return list; + } + + public int GetCount () + { + return _data.Count; + } + + public void UpdateItem (int id, string name) { + foreach (DataItem i in _data) { + if (i.ID == id) { + i.Name = name; + return; + } + } + } + } + + public class DataItem + { + int _id = 0; + string _name = ""; + + public DataItem (int id, string name) { + _id = id; + _name = name; + } + + public int ID { + get { return _id; } + } + + public string Name { + get { return _name; } + set { _name = value; } + } + } + + public class DataSourceObject + { + public static List GetList (string sortExpression, int startRowIndex, int maximumRows) { + return GetList (); + } + + public static List GetList (int startRowIndex, int maximumRows) { + return GetList (); + } + + public static List GetList (string sortExpression) { + return GetList (); + } + + public static List GetList () { + List list = new List (); + list.Add ("Norway"); + list.Add ("Sweden"); + list.Add ("France"); + list.Add ("Italy"); + list.Add ("Israel"); + list.Add ("Russia"); + return list; + } + + public static int GetCount () { + return GetList ().Count; + } + } + + [Test] + [ExpectedException(typeof(InvalidOperationException))] + public void DataSourceAndDataSourceID () + { + Page page = new Page (); + DataGridPoker dg = new DataGridPoker (); + + page.Controls.Add (dg); + + DataTable dt = new DataTable (); + dt.Columns.Add (new DataColumn ("something", typeof (Int32))); + DataRow dr = dt.NewRow (); + dt.Rows.Add (new object [] { 1 }); + DataView dv = new DataView (dt); + + dg.DataSource = dv; + + ObjectDataSource ds = new ObjectDataSource (); + ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; + ds.SelectMethod = "GetList"; + ds.SortParameterName = "sortExpression"; + ds.ID = "Data"; + page.Controls.Add (ds); + + dg.DataSourceID = "Data"; + + dg.DataBind (); + } + + [Test] + public void DataBindingDataSourceID () + { + Page page = new Page (); + DataGridPoker dg = new DataGridPoker (); + page.Controls.Add (dg); + + ObjectDataSource ds = new ObjectDataSource (); + ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; + ds.SelectMethod = "GetList"; + ds.SortParameterName = "sortExpression"; + ds.ID = "Data"; + page.Controls.Add (ds); + + dg.DataSourceID = "Data"; + dg.DataBind (); + + Assert.AreEqual (6, dg.Items.Count, "DataBindingDataSourceID"); + } + + [Test] + [NUnit.Framework.Category ("NunitWeb")] + public void DataBindingDataSourceIDAutomatic () + { + WebTest t = new WebTest (); + PageDelegates pd = new PageDelegates(); + pd.Load = DataSourceIDAutomatic_Load; + pd.PreRender = DataSourceIDAutomatic_PreRender; + t.Invoker = new PageInvoker (pd); + + t.Run (); + } + + public static void DataSourceIDAutomatic_Load (Page page) + { + DataGridPoker dg = new DataGridPoker (); + dg.ID = "DataGrid"; + page.Controls.Add (dg); + + ObjectDataSource ds = new ObjectDataSource (); + ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; + ds.SelectMethod = "GetList"; + ds.SortParameterName = "sortExpression"; + ds.ID = "Data"; + page.Controls.Add (ds); + + dg.DataSourceID = "Data"; + } + + public static void DataSourceIDAutomatic_PreRender (Page page) + { + DataGrid dg = (DataGrid)page.FindControl ("DataGrid"); + + Assert.AreEqual (6, dg.Items.Count, "DataBindingDataSourceID"); + } + + [Test] + public void DataSourceIDBindingNoColumns () + { + Page page = new Page (); + DataGridPoker dg = new DataGridPoker (); + dg.ID = "DataGrid"; + dg.AutoGenerateColumns = false; + + page.Controls.Add (dg); + + ObjectDataSource ds = new ObjectDataSource (); + ds.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; + ds.SelectMethod = "GetList"; + ds.SortParameterName = "sortExpression"; + ds.ID = "Data"; + page.Controls.Add (ds); + + dg.DataSourceID = "Data"; + dg.DataBind (); + + Assert.AreEqual (0, dg.Columns.Count, "Columns Count"); + Assert.AreEqual (0, dg.Items.Count, "Items Count"); + } + + [Test] + public void DataSourceIDBindingManualColumns () + { + Page page = new Page (); + DataGridPoker dg = new DataGridPoker (); + dg.ID = "DataGrid"; + dg.AutoGenerateColumns = false; + BoundColumn col = new BoundColumn(); + col.DataField = "something"; + dg.Columns.Add (col); + + page.Controls.Add (dg); + + DataTable dt = new DataTable (); + dt.Columns.Add (new DataColumn ("something", typeof (Int32))); + DataRow dr = dt.NewRow (); + dt.Rows.Add (new object [] { 1 }); + dt.Rows.Add (new object [] { 2 }); + dt.Rows.Add (new object [] { 3 }); + dt.Rows.Add (new object [] { 4 }); + dt.Rows.Add (new object [] { 5 }); + dt.Rows.Add (new object [] { 6 }); + + DataView dv = new DataView (dt); + + dg.DataSource = dv; + dg.DataBind (); + + Assert.AreEqual (1, dg.Columns.Count, "Columns Count"); + Assert.AreEqual (6, dg.Items.Count, "Items Count"); + Assert.AreEqual ("1", dg.Items[0].Cells[0].Text, "Cell content"); + } + + [Test] + [NUnit.Framework.Category ("NunitWeb")] + public void Paging () + { + WebTest t = new WebTest ("DataGrid.aspx"); + t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); + string html = t.Run (); + string gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedFirstPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1heh1EditDelete1heh1Comment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); +#if DOT_NET + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl09$ctl01"; +#else + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl08$ctl01"; +#endif + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedSecondPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    6heh6EditDelete6heh6Comment 6
    7heh7EditDelete7heh7Comment 7
    8heh8EditDelete8heh8Comment 8
    9heh9EditDelete9heh9Comment 9
    10heh10EditDelete10heh10Comment 10
           
    Previous Next
    "; + HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Paging Next"); + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); +#if DOT_NET + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl09$ctl00"; +#else + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl08$ctl00"; +#endif + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + + HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid Paging Previous"); + } + + [Test] + [NUnit.Framework.Category ("NunitWeb")] + public void EditUpdateDelete () + { + WebTest t = new WebTest ("DataGrid.aspx"); + t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); + string html = t.Run (); + string gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedFirstPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1heh1EditDelete1heh1Comment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); +#if DOT_NET + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl00"; +#else + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl02$ctl00"; +#endif + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedSecondPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1Update CancelDelete1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Edit"); + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); +#if DOT_NET + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl01"; +#else + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl02$ctl01"; +#endif + fr.Controls ["__EVENTARGUMENT"].Value = ""; +#if DOT_NET + fr.Controls.Add ("DataGrid1$ctl03$ctl00"); + fr.Controls ["DataGrid1$ctl03$ctl00"].Value = "New Value"; +#else + fr.Controls.Add ("DataGrid1$ctl02$ctl00"); + fr.Controls ["DataGrid1$ctl02$ctl00"].Value = "New Value"; +#endif + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedThirdPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1New ValueEditDelete1New ValueComment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedThirdPage, gridHtml, "DataGrid Update"); + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); +#if DOT_NET + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl04$ctl01"; +#else + fr.Controls ["__EVENTTARGET"].Value = "DataGrid1$ctl03$ctl01"; +#endif + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedFourthPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1New ValueEditDelete1New ValueComment 1
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
    6heh6EditDelete6heh6Comment 6
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedFourthPage, gridHtml, "DataGrid Delete"); + } + + [Test] + [NUnit.Framework.Category ("NunitWeb")] + public void SelectedIndex () + { + WebTest t = new WebTest ("DataGrid.aspx"); + t.Invoker = PageInvoker.CreateOnInit (DataGrid_OnInit); + string html = t.Run (); + string gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedFirstPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1heh1EditDelete1heh1Comment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedFirstPage, gridHtml, "DataGrid initial Render"); + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls ["__EVENTTARGET"].Value = "Button1"; + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedSecondPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1heh1EditDelete1heh1Comment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + HtmlDiff.AssertAreEqual (expectedSecondPage, gridHtml, "DataGrid Selected 1"); + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls ["__EVENTTARGET"].Value = "Button1"; + fr.Controls ["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + + html = t.Run (); + gridHtml = HtmlDiff.GetControlFromPageHtml (html); + string expectedThirdPage = "\n \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    IDName  IDNameComment
    1heh1EditDelete1heh1Comment 1
    2heh2EditDelete2heh2Comment 2
    3heh3EditDelete3heh3Comment 3
    4heh4EditDelete4heh4Comment 4
    5heh5EditDelete5heh5Comment 5
           
    Previous Next
    "; + + HtmlDiff.AssertAreEqual (expectedThirdPage, gridHtml, "DataGrid Selected 2"); + } + + public static void DataGrid_OnInit (Page p) + { + if (!p.IsPostBack) + MyDataSource.Init (); + DataGrid DataGrid1 = (DataGrid)p.FindControl ("DataGrid1"); + DataGrid1.PageIndexChanged += new DataGridPageChangedEventHandler (DataGrid1_PageIndexChanged); + DataGrid1.CancelCommand += new DataGridCommandEventHandler (DataGrid1_CancelCommand); + DataGrid1.DeleteCommand += new DataGridCommandEventHandler (DataGrid1_DeleteCommand); + DataGrid1.EditCommand += new DataGridCommandEventHandler (DataGrid1_EditCommand); + DataGrid1.UpdateCommand += new DataGridCommandEventHandler (DataGrid1_UpdateCommand); + DataGrid1.ItemCreated += new DataGridItemEventHandler (DataGrid1_ItemCreated); + } + + public static void DataGrid1_ItemCreated (object sender, DataGridItemEventArgs e) + { + if (e.Item.ItemType == ListItemType.Pager) { + e.Item.Cells [0].ColumnSpan = 4; + } + } + + public static void DataGrid1_PageIndexChanged (object source, DataGridPageChangedEventArgs e) + { + DataGrid DataGrid1 = (DataGrid) source; + DataGrid1.CurrentPageIndex = e.NewPageIndex; + DataGrid1.DataBind (); + } + + public static void DataGrid1_EditCommand (object source, DataGridCommandEventArgs e) + { + DataGrid DataGrid1 = (DataGrid) source; + DataGrid1.EditItemIndex = e.Item.ItemIndex; + DataGrid1.DataBind (); + } + + public static void DataGrid1_DeleteCommand (object source, DataGridCommandEventArgs e) + { + DataGrid DataGrid1 = (DataGrid) source; + MyDataSource ds = new MyDataSource (); + ds.DeleteItem (e.Item.DataSetIndex); + DataGrid1.DataBind (); + } + + public static void DataGrid1_UpdateCommand (object source, DataGridCommandEventArgs e) + { + DataGrid DataGrid1 = (DataGrid) source; + MyDataSource ds = new MyDataSource (); + TextBox edittedName = (TextBox) e.Item.Cells [1].Controls [0]; + ds.UpdateItem (e.Item.DataSetIndex, Int32.Parse (e.Item.Cells [0].Text), edittedName.Text); + DataGrid1.EditItemIndex = -1; + DataGrid1.DataBind (); + } + + public static void DataGrid1_CancelCommand (object source, DataGridCommandEventArgs e) + { + DataGrid DataGrid1 = (DataGrid) source; + DataGrid1.EditItemIndex = -1; + DataGrid1.DataBind (); + } + + public class MyDataSource + { + private static ArrayList _data; + + static MyDataSource () + { + Init (); + } + + public static void Init () + { + _data = new ArrayList (); + _data.Add (new MyDataItem (1, "heh1", "Comment 1")); + _data.Add (new MyDataItem (2, "heh2", "Comment 2")); + _data.Add (new MyDataItem (3, "heh3", "Comment 3")); + _data.Add (new MyDataItem (4, "heh4", "Comment 4")); + _data.Add (new MyDataItem (5, "heh5", "Comment 5")); + _data.Add (new MyDataItem (6, "heh6", "Comment 6")); + _data.Add (new MyDataItem (7, "heh7", "Comment 7")); + _data.Add (new MyDataItem (8, "heh8", "Comment 8")); + _data.Add (new MyDataItem (9, "heh9", "Comment 9")); + _data.Add (new MyDataItem (10, "heh10", "Comment 10")); + } + + public MyDataSource () + { + } + + public ArrayList GetAllItems () + { + return _data; + } + + public int GetCount () + { + return _data.Count; + } + + public void UpdateItem (int itemIndex, int id, string name) + { + if (itemIndex >= 0 && itemIndex < _data.Count) { + MyDataItem item = (MyDataItem) _data [itemIndex]; + item.Name = name; + return; + } + } + + public void DeleteItem (int p) + { + _data.RemoveAt (p); + } + } + + public class MyDataItem + { + int _id = 0; + string _name = ""; + string _comment = ""; + + public MyDataItem (int id, string name, string comment) + { + _id = id; + _name = name; + _comment = comment; + } + + public int ID { + get { return _id; } + } + + public string Name { + get { return _name; } + set { _name = value; } + } + + public string Comment { + get { return _comment; } + set { _comment = value; } + } + } + + + class MyTemplate : ITemplate { + string text; + public MyTemplate (string text) + { + this.text = text; + } + + public void InstantiateIn (Control control) + { + control.Controls.Add (new LiteralControl (text)); + } + } + + [Test] + public void OneTemplateColumn1 () + { + DataGridPoker p = new DataGridPoker (); + TemplateColumn tc = new TemplateColumn (); + tc.ItemTemplate = new MyTemplate ("hola"); + p.Columns.Add (tc); + ControlCollection controls = p.Controls; + p.CreateControls (true); + Assert.AreEqual (1, p.Columns.Count, "columns"); + Assert.AreEqual (0, controls.Count, "controls"); + string render = p.Render (); + // no items, even with a templated column. + // The table is not added if DataSource == null + Assert.IsTrue (-1 == render.IndexOf ("hola"), "template"); + } + + [Test] + public void OneTemplateColumn2 () + { + DataGridPoker p = new DataGridPoker (); + p.ShowFooter = true; + p.AutoGenerateColumns = false; + p.DataSource = new ArrayList (); + TemplateColumn tc = new TemplateColumn (); + tc.HeaderText = " "; + tc.FooterTemplate = new MyTemplate ("hola"); + p.Columns.Add (tc); + Assert.AreEqual (1, p.Columns.Count, "columns-1"); + Assert.AreEqual (0, p.Controls.Count, "controls-1"); + p.CreateControls (true); + // This time we have the table there. Thanks to the empty ArrayList + Assert.AreEqual (1, p.Columns.Count, "columns-2"); + Assert.AreEqual (1, p.Controls.Count, "controls-2"); + p.PrepareCH (); + Assert.AreEqual (1, p.Columns.Count, "columns-3"); + Assert.AreEqual (1, p.Controls.Count, "controls-3"); + } + + [Test] + public void OneTemplateColumn3 () + { + DataGridPoker p = new DataGridPoker (); + p.ShowFooter = true; + p.AutoGenerateColumns = false; + p.DataSource = new ArrayList (); + TemplateColumn tc = new TemplateColumn (); + tc.FooterTemplate = new MyTemplate ("hola"); + p.Columns.Add (tc); + p.DataBind (); + + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + Assert.AreEqual (1, p.Columns.Count, "columns"); + Assert.AreEqual (1, p.Controls.Count, "controls"); + + string render = p.Render (); + // no items, but we have a footer + Assert.IsTrue (-1 != render.IndexOf ("hola"), "template"); + } + + // This one throw nullref on MS and works with mono + /* + [Test] + [NUnit.Framework.CategoryAttribute ("NotDotNet")] + public void OneTemplateColumn4 () + { + DataGridPoker p = new DataGridPoker (); + TemplateColumn tc = new TemplateColumn (); + tc.ItemTemplate = new MyTemplate ("hola"); + p.Columns.Add (tc); + p.DataSource = new ArrayList (); + p.CreateControls (false); + Assert.AreEqual (1, p.Columns.Count, "columns"); + // Table added because useDataSource == false... + Assert.AreEqual (1, p.Controls.Count, "controls"); + string render = p.Render (); + // ... but no template rendered. + Assert.IsTrue (-1 == render.IndexOf ("hola"), "template"); + } + */ + + [Test] + public void CreateControls () + { + DataGridPoker p = new DataGridPoker (); + DataTable table = new DataTable (); + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + table.Rows.Add (new object [] { "1", "2", "3" }); + + p.DataSource = new DataView (table); + + p.CreateControls (true); + Assert.AreEqual (p.Controls.Count, 1, "A1"); + + ShowControlsRecursive (p.Controls [0], 1); + } + + [Test] + public void CreationEvents () + { + DataGridPoker p = new DataGridPoker (); + DataTable table = new DataTable (); + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + + p.DataSource = new DataView (table); + + p.ItemCreated += new DataGridItemEventHandler (ItemCreatedHandler); + p.ItemDataBound += new DataGridItemEventHandler (ItemDataBoundHandler); + + // No items added yet + ResetEvents (); + p.CreateControls (true); + Assert.IsTrue (item_created, "A1"); + Assert.IsTrue (item_data_bound, "A2"); + + table.Rows.Add (new object [] { "1", "2", "3" }); + + ResetEvents (); + p.CreateControls (true); + Assert.IsTrue (item_created, "A3"); + Assert.IsTrue (item_data_bound, "A4"); + + // no databinding + ResetEvents (); + p.CreateControls (false); + Assert.IsTrue (item_created, "A5"); + Assert.IsFalse (item_data_bound, "A6"); + } + + [Test] + public void InitializePager () + { + DataGridPoker p = new DataGridPoker (); + PagedDataSource paged = new PagedDataSource (); + DataTable table = new DataTable (); + DataGridItem item = new DataGridItem (-1, -1, ListItemType.Pager); + ArrayList columns; + LinkButton next; + LinkButton prev; + + table.Columns.Add (new DataColumn ("one", typeof (string))); + table.Columns.Add (new DataColumn ("two", typeof (string))); + table.Columns.Add (new DataColumn ("three", typeof (string))); + + for (int i = 0; i < 25; i++) + table.Rows.Add (new object [] { "1", "2", "3" }); + paged.DataSource = new DataView (table); + + columns = p.CreateColumns (paged, true); + p.InitPager (item, columns.Count, paged); + + // + // No where to go + // + + Assert.AreEqual (item.Controls.Count, 1, "A1"); + Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A2"); + Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A3"); + Assert.AreEqual (item.Controls [0].Controls [0].GetType (), typeof (Label), "A4"); + Assert.AreEqual (item.Controls [0].Controls [1].GetType (), + typeof (LiteralControl), "A5"); + Assert.AreEqual (item.Controls [0].Controls [2].GetType (), typeof (Label), "A6"); + Assert.AreEqual (((Label) item.Controls [0].Controls [0]).Text, "<", "A7"); + Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, + " ", "A7"); + Assert.AreEqual (((Label) item.Controls [0].Controls [2]).Text, ">", "A8"); + + // + // Next + // + + item = new DataGridItem (-1, -1, ListItemType.Pager); + paged.PageSize = 5; + paged.VirtualCount = 25; + paged.AllowPaging = true; + p.InitPager (item, columns.Count, paged); + + Assert.AreEqual (item.Controls.Count, 1, "A9"); + Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A10"); + Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A11"); + Assert.AreEqual (item.Controls [0].Controls [0].GetType (), typeof (Label), "A12"); + Assert.AreEqual (item.Controls [0].Controls [1].GetType (), + typeof (LiteralControl), "A13"); + Assert.AreEqual (((Label) item.Controls [0].Controls [0]).Text, "<", "A14"); + Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, + " ", "A16"); + + next = (LinkButton) item.Controls [0].Controls [2]; + Assert.AreEqual (next.Text, ">", "A17"); + Assert.AreEqual (next.CommandName, "Page", "A18"); + Assert.AreEqual (next.CommandArgument, "Next", "A19"); + + + // + // Both + // + + item = new DataGridItem (-1, -1, ListItemType.Pager); + paged.PageSize = 5; + paged.VirtualCount = 25; + paged.AllowPaging = true; + paged.CurrentPageIndex = 2; + p.InitPager (item, columns.Count, paged); + + Assert.AreEqual (item.Controls.Count, 1, "A20"); + Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A21"); + Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A22"); + Assert.AreEqual (item.Controls [0].Controls [1].GetType (), + typeof (LiteralControl), "A23"); + Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, + " ", "A24"); + + // This is failing with an invalidcast right now. It's something related to + // the pager thinking that it's on the last page and rendering a label instead + next = (LinkButton) item.Controls [0].Controls [2]; + Assert.AreEqual (next.Text, ">", "A25"); + Assert.AreEqual (next.CommandName, "Page", "A26"); + Assert.AreEqual (next.CommandArgument, "Next", "A27"); + + prev = (LinkButton) item.Controls [0].Controls [0]; + Assert.AreEqual (prev.Text, "<", "A28"); + Assert.AreEqual (prev.CommandName, "Page", "A29"); + Assert.AreEqual (prev.CommandArgument, "Prev", "A30"); + + // + // Back only + // + + item = new DataGridItem (-1, -1, ListItemType.Pager); + paged.PageSize = 5; + paged.VirtualCount = 25; + paged.AllowPaging = true; + paged.CurrentPageIndex = 4; + p.InitPager (item, columns.Count, paged); + + Assert.AreEqual (item.Controls.Count, 1, "A31"); + Assert.AreEqual (item.Controls [0].GetType (), typeof (TableCell), "A32"); + Assert.AreEqual (item.Controls [0].Controls.Count, 3, "A33"); + Assert.AreEqual (item.Controls [0].Controls [1].GetType (), + typeof (LiteralControl), "A34"); + Assert.AreEqual (item.Controls [0].Controls [2].GetType (), typeof (Label), "A35"); + Assert.AreEqual (((LiteralControl) item.Controls [0].Controls [1]).Text, + " ", "A36"); + Assert.AreEqual (((Label) item.Controls [0].Controls [2]).Text, ">", "A37"); + + prev = (LinkButton) item.Controls [0].Controls [0]; + Assert.AreEqual (prev.Text, "<", "A38"); + Assert.AreEqual (prev.CommandName, "Page", "A39"); + Assert.AreEqual (prev.CommandArgument, "Prev", "A40"); + + } + + [Conditional ("VERBOSE_DATAGRID")] + private void ShowControlsRecursive (Control c, int depth) + { + for (int i = 0; i < depth; i++) + Console.Write ("-"); + + // StringWriter sw = new StringWriter (); + // HtmlTextWriter tw = new HtmlTextWriter (sw); + + // c.RenderControl (tw); + // Console.WriteLine (sw.ToString ()); + + Console.WriteLine (c); + + foreach (Control child in c.Controls) + ShowControlsRecursive (child, depth + 5); + } + + [Test] + public void Render () + { + DataGridPoker p = new DataGridPoker (); + + Assert.AreEqual (p.Render (), String.Empty, "A1"); + } + + Control FindByType (Control parent, Type type) + { + if (!parent.HasControls ()) + return null; + + foreach (Control c in parent.Controls) { + if (type.IsAssignableFrom (c.GetType ())) + return c; + + Control ret = FindByType (c, type); + if (ret != null) + return ret; + } + return null; + } + + // Header link + [Test] + public void SpecialLinkButton1 () + { + DataTable dt = new DataTable(); + dt.Columns.Add (new DataColumn("something", typeof(Int32))); + DataRow dr = dt.NewRow (); + dt.Rows.Add (new object [] { 1 }); + DataView dv = new DataView (dt); + DataGridPoker dg = new DataGridPoker (); + dg.AllowSorting = true; + dg.HeaderStyle.Font.Bold = true; + dg.HeaderStyle.ForeColor = Color.FromArgb (255,255,255,255); + dg.HeaderStyle.BackColor = Color.FromArgb (33,33,33,33); + dg.DataSource = dv; + dg.DataBind (); + LinkButton lb = (LinkButton) FindByType (dg.Controls [0], typeof (LinkButton)); + Assert.IsNotNull (lb, "lb"); + StringWriter sr = new StringWriter (); + HtmlTextWriter output = new HtmlTextWriter (sr); + // Nothing here... + Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore"); + lb.RenderControl (output); + // Nothing here... + Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore2"); + dg.Render (); + // Surprise! after rendering the datagrid, the linkbutton has the ForeColor from the datagrid + Assert.AreEqual (Color.FromArgb (255,255,255,255), lb.ControlStyle.ForeColor, "fore3"); + + // Extra. Items != empty + Assert.AreEqual (1, dg.Items.Count, "itemCount"); + } + + // value link in buttoncolumn + [Test] + public void SpecialLinkButton2 () + { + DataTable dt = new DataTable(); + dt.Columns.Add (new DataColumn("string_col", typeof(string))); + DataRow dr = dt.NewRow (); + dt.Rows.Add (new object [] { "Item 1" }); + DataView dv = new DataView (dt); + + DataGridPoker dg = new DataGridPoker (); + dg.DataSource = dv; + dg.AutoGenerateColumns = false; + dg.HeaderStyle.ForeColor = Color.FromArgb (255,255,255,255); + dg.HeaderStyle.BackColor = Color.FromArgb (33,33,33,33); + + ButtonColumn bc = new ButtonColumn (); + bc.HeaderText = "Some header"; + bc.DataTextField = "string_col"; + bc.CommandName = "lalala"; + dg.Columns.Add (bc); + + BoundColumn bound = new BoundColumn (); + bound.HeaderText = "The other column"; + bound.DataField = "string_col"; + dg.Columns.Add (bound); + + dg.DataBind (); + + LinkButton lb = (LinkButton) FindByType (dg.Controls [0], typeof (LinkButton)); + Assert.IsNotNull (lb, "lb"); + StringWriter sr = new StringWriter (); + HtmlTextWriter output = new HtmlTextWriter (sr); + Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore"); + lb.RenderControl (output); + Assert.AreEqual (Color.Empty, lb.ControlStyle.ForeColor, "fore2"); + string str = dg.Render (); + Assert.IsTrue (-1 != str.IndexOf ("Item 1"), "item1"); + Assert.IsTrue (-1 != str.IndexOf ("Item 1"), "item1-2"); + } + } +} + diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs.REMOVED.git-id deleted file mode 100644 index 79e2e1a6be..0000000000 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataGridTest.cs.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -1e1daa9a8a28a4f12bc766e426f50b17ce6bf6ae \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataKeyTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataKeyTest.cs index e34fa9b64f..9b34ea9568 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataKeyTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataKeyTest.cs @@ -67,7 +67,6 @@ namespace MonoTests.System.Web.UI.WebControls Assert.AreEqual (2, iDictionary.Count, "AllValuesReferringToKey#1"); Assert.AreEqual ("value1", iDictionary[1], "ValueReferringToKey#1"); } -#if NET_4_0 [Test] public void DataKey_Equals () { @@ -229,6 +228,5 @@ namespace MonoTests.System.Web.UI.WebControls Assert.IsFalse (key1.Equals (key2), "#A17-1"); Assert.IsFalse (key2.Equals (key1), "#A17-2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListItemTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListItemTest.cs index af110da16a..25684a24f8 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListItemTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListItemTest.cs @@ -241,17 +241,10 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void Controls_Table () { -#if NET_4_0 string origHtml1 = "\n\tmono\n"; string origHtml2 = "\n\tmono\n"; string origHtml3 = "\n\t\n\t\t\n\t\n
    mono
    "; string origHtml4 = "\n\t\n\t\t\n\t\n
    mono
    "; -#else - string origHtml1 = "\n\tmono\n"; - string origHtml2 = "\n\tmono\n"; - string origHtml3 = "\n\t\n\t\t\n\t\n
    mono
    "; - string origHtml4 = "\n\t\n\t\t\n\t\n
    mono
    "; -#endif TestDataListItem dli = new TestDataListItem (0, ListItemType.Item); dli.Controls.Add (GetTable ("mono")); @@ -271,17 +264,10 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void Controls_Table_Dual () { -#if NET_4_0 string origHtml1 = "\n\tmono\n"; string origHtml2 = "\n\tmono\n"; string origHtml3 = "\n\t\n\t\t\n\t\n
    mono
    \n\t\n\t\t\n\t\n
    monkey
    "; string origHtml4 = "\n\t\n\t\t\n\t\n
    mono
    \n\t\n\t\t\n\t\n
    monkey
    "; -#else - string origHtml1 = "\n\tmono\n"; - string origHtml2 = "\n\tmono\n"; - string origHtml3 = "\n\t\n\t\t\n\t\n
    mono
    \n\t\n\t\t\n\t\n
    monkey
    "; - string origHtml4 = "\n\t\n\t\t\n\t\n
    mono
    \n\t\n\t\t\n\t\n
    monkey
    "; -#endif TestDataListItem dli = new TestDataListItem (0, ListItemType.Item); dli.Controls.Add (GetTable ("mono")); dli.Controls.Add (GetTable ("monkey")); @@ -315,7 +301,6 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual ("mono", dli.Render (false, true), "Render-Empty-F-T"); Assert.AreEqual ("mono", dli.Render (false, false), "Render-Empty-F-F"); } -#if NET_4_0 [Test] public void SupportsDisabledAttribute () { @@ -329,6 +314,5 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual (ver35, p.RenderingCompatibility, "#A2-1"); Assert.IsTrue (p.SupportsDisabledAttribute, "#A2-2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListTest.cs index 54ae69e334..9e61762f00 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataListTest.cs @@ -322,7 +322,6 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual (0, dl.Attributes.Count, "Attributes.Count-2"); } -#if NET_4_0 [Test] public void RepeatLayout_Lists () { @@ -336,7 +335,6 @@ namespace MonoTests.System.Web.UI.WebControls { dl.RepeatLayout = RepeatLayout.UnorderedList; }, "#A2"); } -#endif [Test] public void CleanProperties () { diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataSourceControlTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataSourceControlTest.cs index af5e33c80e..e6a55f8f67 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataSourceControlTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DataSourceControlTest.cs @@ -76,11 +76,7 @@ namespace MonoTests.System.Web.UI.WebControls public void DataSourceControl_DefaultProperty () { PokerDataSource ds = new PokerDataSource (); -#if NET_4_0 Assert.AreEqual (String.Empty, ds.ClientID, "ClientID"); -#else - Assert.AreEqual (null, ds.ClientID, "ClientID"); -#endif Assert.IsNotNull (ds.Controls, "Controls#1"); Assert.AreEqual ( 0 , ds.Controls.Count , "Controls#2"); Assert.AreEqual (false, ds.Visible, "Visible"); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DetailsViewTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DetailsViewTest.cs.REMOVED.git-id index 8cbe197e30..0db1f6a047 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/DetailsViewTest.cs.REMOVED.git-id +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/DetailsViewTest.cs.REMOVED.git-id @@ -1 +1 @@ -5813d894d5739d2826a5f32486fa6c849c81cddc \ No newline at end of file +12a7ab9e97bc4ad43efdca1e7f12435ee44c417c \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/EditCommandColumnTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/EditCommandColumnTest.cs index 5b2987fb5e..85072013f6 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/EditCommandColumnTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/EditCommandColumnTest.cs @@ -121,11 +121,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test] public void InitializeCell () { -#if NET_4_0 string origHtml = "
      onetwothree
    Edit123
         
    "; -#else - string origHtml = "
      onetwothree
    Edit123
         
    "; -#endif DataGridTest p = new DataGridTest (); DataTable table = new DataTable (); EditCommandColumn e; @@ -170,11 +166,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test] public void ThisIsADGTest () { -#if NET_4_0 string origHtml = "
      onetwothree
    Edit123
         
    "; -#else - string origHtml = "
      onetwothree
    Edit123
         
    "; -#endif DataGridTest p = new DataGridTest (); DataTable table = new DataTable (); EditCommandColumn e; @@ -228,11 +220,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test] public void InitializeEditCell () { -#if NET_4_0 string origHtml = "
      onetwothree
    Update Cancel 
         
    "; -#else - string origHtml = "
      onetwothree
    Update Cancel 
         
    "; -#endif DataGridTest p = new DataGridTest (); DataTable table = new DataTable (); EditCommandColumn e; diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs new file mode 100644 index 0000000000..33bb4b6d09 --- /dev/null +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs @@ -0,0 +1,2628 @@ +// +// Tests for System.Web.UI.WebControls.FormView.cs +// +// Author: +// Chris Toshok (toshok@ximian.com) +// + +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// + + +using NUnit.Framework; +using System; +using System.Data; +using System.IO; +using System.Drawing; +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.Globalization; +using System.Web; +using System.Web.UI; +using System.Web.UI.HtmlControls; +using System.Web.UI.WebControls; +using MonoTests.SystemWeb.Framework; +using MonoTests.stand_alone.WebHarness; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Threading; + + + +namespace MonoTests.System.Web.UI.WebControls +{ + [TestFixture] + public class FormViewTest { + + public class DataSourceObject + { + public static List GetList (string sortExpression, int startRowIndex, int maximumRows) { + return GetList (); + } + + public static List GetList (int startRowIndex, int maximumRows) { + return GetList (); + } + + public static List GetList (string sortExpression) { + return GetList (); + } + + public static List GetList () { + List list = new List (); + list.Add ("Norway"); + list.Add ("Sweden"); + list.Add ("France"); + list.Add ("Italy"); + list.Add ("Israel"); + list.Add ("Russia"); + return list; + } + + public static int GetCount () { + return GetList ().Count; + } + } + + public class DS : ObjectDataSource + { + public static List GetList () + { + List list = new List (); + list.Add ("Norway"); + list.Add ("Sweden"); + list.Add ("France"); + list.Add ("Italy"); + list.Add ("Israel"); + list.Add ("Russia"); + return list; + } + + public void DoRaiseDataSourceChangedEvent (EventArgs e) + { + RaiseDataSourceChangedEvent (e); + } + } + + public class Poker : FormView { + public bool isInitializePager=false; + public bool ensureDataBound=false; + public bool controlHierarchy=false; + bool _onPageIndexChangingCalled = false; + bool _onPageIndexChangedCalled = false; + + public Poker () { + TrackViewState (); + } + + public object SaveState () { + return SaveViewState (); + } + + public void LoadState (object state) { + LoadViewState (state); + + } + + public HtmlTextWriterTag PokerTagKey + { + get { return base.TagKey; } + } + + public int DoCreateChildControls (IEnumerable source,bool dataBind) + { + return CreateChildControls (source, dataBind); + + } + + public Style DoCreateControlStyle () + { + return base.CreateControlStyle (); + } + + public DataSourceSelectArguments DoCreateDataSourceSelectArguments () + { + return CreateDataSourceSelectArguments (); + } + + public DataSourceView DoGetData () + { + return GetData (); + } + + public FormViewRow DoCreateRow (int itemIndex,DataControlRowType rowType,DataControlRowState rowState) + { + return CreateRow( itemIndex, rowType,rowState); + } + + public Table DoCreateTable () + { + return CreateTable (); + } + + protected override void EnsureDataBound () + { + base.EnsureDataBound (); + ensureDataBound = true; + } + + public void DoExtractRowValues (IOrderedDictionary filedValues, bool includeKeys) + { + base.ExtractRowValues (filedValues, includeKeys); + + } + + public bool IsRequiresDataBinding () + { + return base.RequiresDataBinding; + } + + protected override void InitializePager (FormViewRow row, PagedDataSource pageData) + { + base.InitializePager (row, pageData); + isInitializePager = true; + } + + public void DoInitializeRow (FormViewRow row) + { + InitializeRow (row); + } + public void DoLoadControlState (object savedState) + { + LoadControlState (savedState); + } + + public void DoLoadViewState (object savedState) + { + LoadViewState (savedState); + } + + public bool DoOnBubbleEvent (object source, EventArgs e) + { + return OnBubbleEvent (source, e); + } + + public void DoOnInit (EventArgs e) + { + OnInit (e); + } + + public void DoOnItemCommand (FormViewCommandEventArgs e) + { + OnItemCommand (e); + } + + public void DoOnItemCreated (EventArgs e) + { + OnItemCreated (e); + } + + public void DoOnItemDeleted (FormViewDeletedEventArgs e) + { + OnItemDeleted (e); + } + + public void DoOnItemDeleting (FormViewDeleteEventArgs e) + { + OnItemDeleting (e); + } + + public void DoOnItemInserted (FormViewInsertedEventArgs e) + { + OnItemInserted (e); + } + + public void DoOnItemInserting (FormViewInsertEventArgs e) + { + OnItemInserting (e); + } + + public void DoOnItemUpdated (FormViewUpdatedEventArgs e) + { + OnItemUpdated (e); + } + + public void DoOnItemUpdating (FormViewUpdateEventArgs e) + { + OnItemUpdating (e); + } + + public void DoOnModeChanged (EventArgs e ) + { + OnModeChanged (e); + } + + public void DoOnModeChanging (FormViewModeEventArgs e) + { + OnModeChanging (e); + } + + public void DoOnPageIndexChanged (EventArgs e) + { + OnPageIndexChanged (e); + } + + public void DoOnPageIndexChanging (FormViewPageEventArgs e) + { + OnPageIndexChanging (e); + } + + public void DoPerformDataBinding (IEnumerable data) + { + PerformDataBinding (data); + } + + protected internal override void PrepareControlHierarchy () + { + + base.PrepareControlHierarchy (); + controlHierarchy = true; + } + + public void DoRaisePostBackEvent (string eventArgument) + { + RaisePostBackEvent (eventArgument); + } + + public string Render () + { + + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + Render (tw); + return sw.ToString (); + + } + + + + public object DoSaveControlState () + { + return SaveControlState (); + } + + + + public void DoConfirmInitState () + { + base.ConfirmInitState (); + } + + public void DoOnPreRender (EventArgs e) + { + base.OnPreRender (e); + } + + public void DoOnDataBinding (EventArgs e) + { + base.OnDataBinding (e); + } + public void DoOnDataBound (EventArgs e) + { + base.OnDataBound (e); + } + + public bool OnPageIndexChangingCalled { + set { _onPageIndexChangingCalled = value; } + get { return _onPageIndexChangingCalled; } + } + + public bool OnPageIndexChangedCalled { + set { _onPageIndexChangedCalled = value; } + get { return _onPageIndexChangedCalled; } + } + + protected override void OnPageIndexChanging (FormViewPageEventArgs e) { + OnPageIndexChangingCalled = true; + base.OnPageIndexChanging (e); + } + + protected override void OnPageIndexChanged (EventArgs e) { + OnPageIndexChangedCalled = true; + base.OnPageIndexChanged (e); + } + + public bool GetRequiresDataBinding () { + return RequiresDataBinding; + } + public bool GetInitialized () { + return Initialized; + } + public string CallModifiedOuterTableStylePropertyName () + { + return ModifiedOuterTableStylePropertyName (); + } + } + + class Template : ITemplate + { + bool _instantiated; + + public bool Instantiated { + get { return _instantiated; } + } + +#region ITemplate Members + + public void InstantiateIn (Control container) { + _instantiated = true; + } + + #endregion + } + + + ArrayList myds = new ArrayList (); + [TestFixtureSetUp] + public void setup () + { + TestMyData.InitData(); + myds.Add ("Item1"); + myds.Add ("Item2"); + myds.Add ("Item3"); + myds.Add ("Item4"); + myds.Add ("Item5"); + myds.Add ("Item6"); + + WebTest.CopyResource (GetType (), "FormView.aspx", "FormView.aspx"); + WebTest.CopyResource (GetType (), "FormViewTest1.aspx", "FormViewTest1.aspx"); + WebTest.CopyResource (GetType (), "FormViewTest1_2.aspx", "FormViewTest1_2.aspx"); + WebTest.CopyResource (GetType (), "FormViewTest1_3.aspx", "FormViewTest1_3.aspx"); + WebTest.CopyResource (GetType (), "FormViewTest1_4.aspx", "FormViewTest1_4.aspx"); + WebTest.CopyResource (GetType (), "FormViewInsertEditDelete.aspx", "FormViewInsertEditDelete.aspx"); + WebTest.CopyResource (GetType (), "FormViewPagerVisibility.aspx", "FormViewPagerVisibility.aspx"); + } + + [Test] + public void Defaults () + { + Poker p = new Poker (); + Assert.IsFalse (p.AllowPaging, "A1"); + Assert.AreEqual ("", p.BackImageUrl, "A2"); + Assert.IsNull (p.BottomPagerRow, "A3"); + Assert.AreEqual ("", p.Caption, "A4"); + Assert.AreEqual (TableCaptionAlign.NotSet, p.CaptionAlign, "A5"); + Assert.AreEqual (-1, p.CellPadding, "A6"); + Assert.AreEqual (0, p.CellSpacing, "A7"); + Assert.AreEqual (FormViewMode.ReadOnly, p.CurrentMode, "A8"); + Assert.AreEqual (FormViewMode.ReadOnly, p.DefaultMode, "A9"); + Assert.IsNotNull (p.DataKeyNames, "A10"); + Assert.AreEqual (0, p.DataKeyNames.Length, "A10.1"); + Assert.IsNotNull (p.DataKey, "A11"); + Assert.AreEqual (0, p.DataKey.Values.Count, "A11.1"); + Assert.IsNull (p.EditItemTemplate, "A12"); + Assert.IsNotNull (p.EditRowStyle, "A13"); + Assert.IsNotNull (p.EmptyDataRowStyle, "A14"); + Assert.IsNull (p.EmptyDataTemplate, "A15"); + Assert.AreEqual ("", p.EmptyDataText, "A16"); + Assert.IsNull (p.FooterRow, "A17"); + Assert.IsNull (p.FooterTemplate, "A18"); + Assert.AreEqual ("", p.FooterText, "A19"); + Assert.IsNotNull (p.FooterStyle, "A20"); + Assert.AreEqual (GridLines.None, p.GridLines, "A21"); + Assert.IsNull (p.HeaderRow, "A22"); + Assert.IsNotNull (p.HeaderStyle, "A23"); + Assert.IsNull (p.HeaderTemplate, "A24"); + Assert.AreEqual ("", p.HeaderText, "A25"); + Assert.AreEqual (HorizontalAlign.NotSet, p.HorizontalAlign, "A26"); + Assert.IsNull (p.InsertItemTemplate, "A27"); + Assert.IsNotNull (p.InsertRowStyle, "A28"); + Assert.IsNull (p.ItemTemplate, "A29"); + Assert.AreEqual (0, p.PageCount, "A30"); + Assert.AreEqual (0, p.PageIndex, "A31"); + Assert.IsNull (p.PagerTemplate, "A32"); + Assert.IsNull (p.Row, "A33"); + Assert.IsNotNull (p.RowStyle, "A34"); + Assert.IsNull (p.SelectedValue, "A35"); + Assert.IsNull (p.TopPagerRow, "A36"); + Assert.IsNull (p.DataItem, "A37"); + Assert.AreEqual (0, p.DataItemCount, "A38"); + Assert.AreEqual (0, p.DataItemIndex, "A39"); + } + + [Test] + public void FormView_AssignToDefaultProperties () + { + Poker p = new Poker (); + MyTemplate customTemplate = new MyTemplate (); + TableItemStyle tableStyle = new TableItemStyle (); + p.AllowPaging = true; + Assert.AreEqual (true, p.AllowPaging, "A40"); + p.BackImageUrl = "image.jpg"; + Assert.AreEqual ("image.jpg", p.BackImageUrl, "A41"); + // ToDo: p.BottomPagerRow + p.Caption = "Employee Details"; + Assert.AreEqual ("Employee Details", p.Caption, "A42"); + p.CaptionAlign = TableCaptionAlign.Bottom; + Assert.AreEqual (TableCaptionAlign.Bottom, p.CaptionAlign, "A43"); + p.CaptionAlign = TableCaptionAlign.Left; + Assert.AreEqual (TableCaptionAlign.Left, p.CaptionAlign, "A44"); + p.CaptionAlign = TableCaptionAlign.NotSet; + Assert.AreEqual (TableCaptionAlign.NotSet, p.CaptionAlign, "A45"); + p.CaptionAlign = TableCaptionAlign.Right; + Assert.AreEqual (TableCaptionAlign.Right, p.CaptionAlign, "A46"); + p.CaptionAlign = TableCaptionAlign.Top; + Assert.AreEqual (TableCaptionAlign.Top, p.CaptionAlign, "A47"); + p.CellPadding = 10; + Assert.AreEqual (10, p.CellPadding, "A48"); + p.CellSpacing = 20; + Assert.AreEqual (20, p.CellSpacing, "A49"); + Assert.AreEqual (FormViewMode.ReadOnly, p.CurrentMode, "A52"); + p.DefaultMode = FormViewMode.Edit; + Assert.AreEqual (FormViewMode.Edit, p.DefaultMode, "A53"); + p.DefaultMode = FormViewMode.Insert; + Assert.AreEqual (FormViewMode.Insert, p.DefaultMode, "A54"); + p.DefaultMode = FormViewMode.ReadOnly; + Assert.AreEqual (FormViewMode.ReadOnly, p.DefaultMode, "A55"); + p.EditRowStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red, p.EditRowStyle.BackColor, "A56"); + p.EmptyDataRowStyle.ForeColor = Color.Purple; + Assert.AreEqual (Color.Purple, p.EmptyDataRowStyle.ForeColor, "A57"); + p.EmptyDataTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.EmptyDataTemplate, "A58"); + p.EmptyDataText = "No data"; + Assert.AreEqual ("No data", p.EmptyDataText, "A59"); + p.EditItemTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.EditItemTemplate, "A60"); + p.FooterTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.FooterTemplate, "A61"); + p.FooterText = "Test Footer"; + Assert.AreEqual ("Test Footer", p.FooterText, "A62"); + p.FooterStyle.BorderStyle = BorderStyle.Double; + Assert.AreEqual (BorderStyle.Double, p.FooterStyle.BorderStyle, "A63"); + p.GridLines = GridLines.Both; + Assert.AreEqual (GridLines.Both, p.GridLines, "A64"); + p.GridLines = GridLines.Horizontal; + Assert.AreEqual (GridLines.Horizontal, p.GridLines, "A65"); + p.GridLines = GridLines.None; + Assert.AreEqual (GridLines.None, p.GridLines, "A66"); + p.GridLines = GridLines.Vertical; + Assert.AreEqual (GridLines.Vertical, p.GridLines, "A67"); + p.HeaderStyle.HorizontalAlign = HorizontalAlign.Left; + Assert.AreEqual (HorizontalAlign.Left, p.HeaderStyle.HorizontalAlign, "A68"); + p.HeaderTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.HeaderTemplate, "A69"); + p.HeaderText = "Test Header"; + Assert.AreEqual ("Test Header", p.HeaderText, "A70"); + p.HorizontalAlign = HorizontalAlign.Center; + Assert.AreEqual (HorizontalAlign.Center, p.HorizontalAlign, "A71"); + p.HorizontalAlign = HorizontalAlign.Justify; + Assert.AreEqual (HorizontalAlign.Justify, p.HorizontalAlign, "A72"); + p.HorizontalAlign = HorizontalAlign.Left; + Assert.AreEqual (HorizontalAlign.Left, p.HorizontalAlign, "A73"); + p.HorizontalAlign = HorizontalAlign.NotSet; + Assert.AreEqual (HorizontalAlign.NotSet, p.HorizontalAlign, "A74"); + p.HorizontalAlign = HorizontalAlign.Right; + Assert.AreEqual (HorizontalAlign.Right, p.HorizontalAlign, "A75"); + p.InsertItemTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.InsertItemTemplate, "A76"); + p.InsertRowStyle.BorderStyle = BorderStyle.Outset; + Assert.AreEqual (BorderStyle.Outset, p.InsertRowStyle.BorderStyle, "A77"); + p.ItemTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.ItemTemplate, "A78"); + p.PagerSettings.FirstPageText = "PagerSettings Test"; + Assert.AreEqual ("PagerSettings Test", p.PagerSettings.FirstPageText, "A79"); + p.PagerStyle.BorderStyle = BorderStyle.Groove; + Assert.AreEqual (BorderStyle.Groove, p.PagerStyle.BorderStyle, "A80"); + p.PagerTemplate = customTemplate; + Assert.AreEqual (customTemplate, p.PagerTemplate, "A81"); + p.RowStyle.ForeColor = Color.Plum; + Assert.AreEqual (Color.Plum, p.RowStyle.ForeColor, "A82"); + } + + [Test] + public void FormView_PageIndex () + { + Poker p = new Poker (); + Assert.AreEqual (0, p.PageIndex, "#00"); + Assert.AreEqual (false, p.GetInitialized (), "#01"); + Assert.AreEqual (false, p.GetRequiresDataBinding(), "#02"); + p.PageIndex = 2; + Assert.AreEqual (2, p.PageIndex, "#03"); + Assert.AreEqual (false, p.GetRequiresDataBinding (), "#04"); + p.PageIndex = -1; + Assert.AreEqual (2, p.PageIndex, "#05"); + Assert.AreEqual (false, p.GetRequiresDataBinding (), "#06"); + } + + [Test] + [Category ("NunitWeb")] + public void FormView_PageIndex2 () + { + PageDelegates delegates = new PageDelegates (); + delegates.Load = FormView_PageIndex2_load; + delegates.LoadComplete = FormView_PageIndex2_loadComplete; + PageInvoker invoker = new PageInvoker (delegates); + WebTest test = new WebTest (invoker); + test.Run (); + } + + public static void FormView_PageIndex2_load (Page p) + { + Poker fv = new Poker (); + p.Form.Controls.Add (fv); + Assert.AreEqual (0, fv.PageIndex, "#00"); + Assert.AreEqual (false, fv.GetInitialized (), "#01"); + Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#02"); + fv.PageIndex = 2; + Assert.AreEqual (2, fv.PageIndex, "#03"); + Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#04"); + fv.PageIndex = -1; + Assert.AreEqual (2, fv.PageIndex, "#05"); + Assert.AreEqual (false, fv.GetRequiresDataBinding (), "#06"); + } + + public static void FormView_PageIndex2_loadComplete (Page p) + { + Poker fv = new Poker (); + p.Form.Controls.Add (fv); + Assert.AreEqual (0, fv.PageIndex, "#100"); + Assert.AreEqual (true, fv.GetInitialized (), "#101"); + Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#102"); + fv.PageIndex = 2; + Assert.AreEqual (2, fv.PageIndex, "#103"); + Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#104"); + fv.PageIndex = -1; + Assert.AreEqual (2, fv.PageIndex, "#105"); + Assert.AreEqual (true, fv.GetRequiresDataBinding (), "#106"); + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void FormView_PageIndex_Ex () + { + Poker p = new Poker (); + p.PageIndex = -2; + } + + [Test] + public void FormView_ItemsProperties () + { + Poker p = new Poker (); + p.Page = new Page (); + p.AllowPaging = true; + p.DataSource = myds; + p.DataBind (); + //Assert.AreEqual (typeof (FormViewPagerRow), (p.BottomPagerRow).GetType (), "BottomPagerRow1"); + Assert.AreEqual (0, p.BottomPagerRow.ItemIndex, "BottomPagerRow2"); + Assert.AreEqual (DataControlRowType.Pager, p.BottomPagerRow.RowType, "BottomPagerRow2"); + Assert.AreEqual ("Item1", p.DataItem, "DataItem"); + Assert.AreEqual (6, p.DataItemCount, "DataItemCount"); + Assert.AreEqual (0, p.DataItemIndex, "DataItemIndex"); + Assert.AreEqual (0, p.DataItemIndex, "DataItemIndex"); + string[] str = new string[] { "1", "2", "3", "4", "5", "6" }; + Assert.AreEqual (typeof (DataKey), p.DataKey.GetType (), "DataKey"); + p.DataKeyNames = str; + Assert.AreEqual (str, p.DataKeyNames, "DataKeyNames"); + p.ChangeMode (FormViewMode.Edit); + Assert.AreEqual (FormViewMode.Edit, p.CurrentMode, "CurrentModeEdit"); + p.ChangeMode (FormViewMode.Insert); + Assert.AreEqual (FormViewMode.Insert, p.CurrentMode, "CurrentModeInsert"); + + } + + [Test] + public void FormView_DefaultProtectedProperties () + { + Poker fv = new Poker (); + Assert.AreEqual (HtmlTextWriterTag.Table, fv.PokerTagKey, "TagKey"); + } + + // Protected methods + + [Test] + public void FormView_CreateChildControls () + { + Poker fv = new Poker (); + fv.DataSource = myds; + fv.Page = new Page (); + Assert.AreEqual (6, fv.DoCreateChildControls (myds, true), "CreateChildControlFromDS"); + myds.Add ("item7"); + Assert.AreEqual (7, fv.DoCreateChildControls (myds, false), "CreateChildControlFromViewState"); + myds.Remove ("item7"); + + } + + class MyEnumSource : IEnumerable + { + int _count; + + public MyEnumSource (int count) { + _count = count; + } + + #region IEnumerable Members + + public IEnumerator GetEnumerator () { + + for (int i = 0; i < _count; i++) + yield return i; + } + + #endregion + } + + [Test] + public void FormView_CreateChildControls2 () + { + Poker fv = new Poker (); + fv.Page = new Page (); + fv.DataSource = new MyEnumSource (20); + fv.DataBind (); + + Assert.AreEqual (20, fv.PageCount, "CreateChildControls#0"); + + Assert.AreEqual (0, fv.DoCreateChildControls (new MyEnumSource (0), true), "CreateChildControls#1"); + Assert.AreEqual (20, fv.DoCreateChildControls (new MyEnumSource (20), true), "CreateChildControls#2"); + + Assert.AreEqual (0, fv.DoCreateChildControls (new object [0], false), "CreateChildControls#3"); + Assert.AreEqual (5, fv.DoCreateChildControls (new object [5], false), "CreateChildControls#4"); + } + + [Test] + public void FormView_CreateDataSourceSelectArguments () + { + //Checks the default DataSourceSelectArgument object returned. + Poker fv = new Poker (); + DataSourceSelectArguments selectArgs = fv.DoCreateDataSourceSelectArguments (); + Assert.AreEqual (0, selectArgs.MaximumRows, "CreateDataSourceSelectArguments1"); + Assert.AreEqual (false, selectArgs.RetrieveTotalRowCount, "CreateDataSourceSelectArguments2"); + + } + + [Test] + public void FormView_CreateControlStyle () + { + Poker fv = new Poker (); + Style s = fv.DoCreateControlStyle (); + Assert.AreEqual (typeof (TableStyle), s.GetType (), "CreateControlStyle1"); + Assert.AreEqual (GridLines.None, ((TableStyle) s).GridLines, "CreateControlStyle2"); + Assert.AreEqual ("", ((TableStyle) s).BackImageUrl, "CreateControlStyle3"); + Assert.AreEqual (0, ((TableStyle) s).CellSpacing, "CreateControlStyle4"); + Assert.AreEqual (-1, ((TableStyle) s).CellPadding, "CreateControlStyle5"); + + } + + [Test] + public void FormView_InitializeRow () + { + //not implemented + } + + [Test] + public void FormView_InitializePager () + { + Poker fv = new Poker (); + Page page = new Page (); + page.Controls.Add (fv); + fv.AllowPaging = true; + fv.DataSource = myds; + Assert.AreEqual (false, fv.isInitializePager, "BeforeInitializePager"); + Assert.AreEqual (0, fv.PageCount, "BeforeInitializePagerPageCount"); + fv.DataBind (); + Assert.AreEqual (true, fv.isInitializePager, "AfterInitializePager"); + Assert.AreEqual (6, fv.PageCount, "AfterInitializePagerPageCount"); + } + + [Test] + public void FormView_CreateRow () + { + Poker fv = new Poker (); + fv.AllowPaging =true; + fv.DataSource = myds; + fv.Page = new Page (); + fv.DataBind (); + FormViewRow row = fv.DoCreateRow (2,DataControlRowType.DataRow ,DataControlRowState.Normal ); + Assert.AreEqual (2, row.ItemIndex, "CreatedRowItemIndex1"); + Assert.AreEqual (DataControlRowState.Normal , row.RowState, "CreatedRowState1"); + Assert.AreEqual (DataControlRowType.DataRow , row.RowType, "CreatedRowType1"); + row = fv.DoCreateRow (4, DataControlRowType.Footer, DataControlRowState.Edit); + Assert.AreEqual (4, row.ItemIndex, "CreatedRowItemIndex2"); + Assert.AreEqual (DataControlRowState.Edit , row.RowState, "CreatedRowState2"); + Assert.AreEqual (DataControlRowType.Footer , row.RowType, "CreatedRowType2"); + //FormViewPagerRow pagerRow = (FormViewPagerRow)fv.DoCreateRow (3, DataControlRowType.Pager , DataControlRowState.Insert); + //Assert.AreEqual (3, pagerRow.ItemIndex, "CreatedPageRowItemIndex"); + //Assert.AreEqual (DataControlRowState.Insert, pagerRow.RowState, "CreatedPageRowState"); + //Assert.AreEqual (DataControlRowType.Pager, pagerRow.RowType, "CreatedPageRowType"); + + } + + [Test] + public void FormView_CreateTable () + { + Poker fv = new Poker (); + Table tb = fv.DoCreateTable (); + fv.Page = new Page (); + Assert.AreEqual ("", tb.BackImageUrl , "CreateTable1"); + Assert.AreEqual (0, tb.Rows.Count, "CreateTable2"); + fv.DataSource = myds; + fv.DataBind (); + fv.ID = "TestFormView"; + tb = fv.DoCreateTable (); + Assert.AreEqual (-1, tb.CellPadding , "CreateTable3"); + + } + + [Test] + public void FormView_EnsureDataBound () + { + Poker fv = new Poker (); + fv.DataSource = myds; + fv.DoOnPreRender (EventArgs.Empty); + Assert.AreEqual (true, fv.ensureDataBound, "EnsureDataBound"); + + } + + [Test] + public void FormView_PerformDataBinding () + { + Poker fv = new Poker (); + fv.Page = new Page (); + Assert.AreEqual (0,fv.DataItemCount, "BeforePerformDataBinding"); + fv.DoPerformDataBinding (myds); + Assert.AreEqual (6, fv.DataItemCount, "AfterPerformDataBinding"); + } + + [Test] + public void FormView_ExtractRowValues () + { + Poker fv=new Poker (); + fv.ItemTemplate = new MyTemplate (); + fv.DataKeyNames = new string[] { "ID", "FName", "LName" }; + //IOrderedDictionary dict = (IOrderedDictionary) new OrderedDictionary (0x19); + //fv.DoExtractRowValues (dict, true); + //DataTable ds = CreateDataTable (); + //fv.DataSource = ds; + //fv.DataBind (); + //OrderedDictionary fieldsValues = new OrderedDictionary (); + //fv.DoExtractRowValues (fieldsValues, true); + //Assert.AreEqual (3, fieldsValues.Count, "ExtractRowValues1"); + //Assert.AreEqual (3, fieldsValues.Keys.Count, "ExtractRowValues2"); + //Assert.AreEqual (3, fieldsValues.Values.Count, "ExtractRowValues3"); + //Assert.AreEqual (true, fieldsValues.Contains ("ID"), "ExtractRowValues4"); + //IDictionaryEnumerator enumerator = fieldsValues.GetEnumerator (); + //enumerator.MoveNext (); + //Assert.AreEqual ("ID", enumerator.Key, "FieldValue1"); + //Assert.AreEqual ("1001", enumerator.Value, "FieldValue2"); + //enumerator.MoveNext (); + //Assert.AreEqual ("FName", enumerator.Key, "FieldValue3"); + //Assert.AreEqual ("Mahesh", enumerator.Value, "FieldValue4"); + //enumerator.MoveNext (); + //Assert.AreEqual ("LName", enumerator.Key, "FieldValue5"); + //Assert.AreEqual ("Chand", enumerator.Value, "FieldValue6"); + + } + + [Test] + public void FormView_PrepareControlHierarchy () + { + Poker fv = new Poker (); + fv.Page = new Page (); + fv.controlHierarchy = false; + fv.Render (); + Assert.AreEqual (0, fv.Controls.Count, "ControlHierarchy1"); + Assert.AreEqual (true, fv.controlHierarchy, "ControlHierarchy2"); + fv.AllowPaging = true; + fv.DataSource = myds; + fv.DataBind (); + fv.controlHierarchy = false; + fv.Render (); + Assert.AreEqual (1, fv.Controls.Count, "ControlHierarchy3"); + Assert.AreEqual (true, fv.controlHierarchy, "ControlHierarchy4"); + + + } + + //Public Methods + + [Test] + public void FormView_ChangeMode () + { + Poker fv = new Poker (); + Assert.AreEqual (FormViewMode.ReadOnly, fv.CurrentMode, "ChangeModeDefault"); + fv.ChangeMode (FormViewMode.Insert); + Assert.AreEqual (FormViewMode.Insert, fv.CurrentMode, "ChangeModeInsert"); + fv.ChangeMode (FormViewMode.Edit); + Assert.AreEqual (FormViewMode.Edit, fv.CurrentMode, "ChangeModeEdit"); + fv.ChangeMode (FormViewMode.ReadOnly); + Assert.AreEqual (FormViewMode.ReadOnly, fv.CurrentMode, "ChangeModeReadOnly"); + } + + [Test] + public void FormView_PageCount () { + Page p = new Page (); + + Poker fv = new Poker (); + p.Controls.Add (fv); + + ObjectDataSource data = new ObjectDataSource (); + data.TypeName = typeof (FormViewDataObject).AssemblyQualifiedName; + data.SelectMethod = "Select"; + p.Controls.Add (data); + + fv.DataSource = data; + + Assert.AreEqual (0, fv.PageCount, "PageCount before binding"); + + fv.DataBind (); + + Assert.AreEqual (3, fv.PageCount, "PageCount after binding"); + } + + [Test] + public void FormView_DataKey () + { + Page p = new Page (); + + Poker fv = new Poker (); + p.Controls.Add (fv); + + ObjectDataSource data = new ObjectDataSource (); + data.TypeName = typeof (FormViewDataObject).AssemblyQualifiedName; + data.SelectMethod = "Select"; + p.Controls.Add (data); + + fv.DataSource = data; + fv.DataKeyNames = new string [] { "ID", "FName" }; + + DataKey key1 = fv.DataKey; + + Assert.AreEqual (null, key1.Value, "DataKey.Value before binding"); + Assert.AreEqual (0, key1.Values.Count, "DataKey.Values count before binding"); + + fv.DataBind (); + + DataKey key2 = fv.DataKey; + DataKey key3 = fv.DataKey; + + Assert.IsFalse (Object.ReferenceEquals (key1, key2), "DataKey returns the same instans"); + Assert.IsTrue (Object.ReferenceEquals (key2, key3), "DataKey returns the same instans"); + + Assert.AreEqual (1001, key1.Value, "DataKey.Value after binding"); + Assert.AreEqual (2, key1.Values.Count, "DataKey.Values count after binding"); + Assert.AreEqual (1001, key1.Values [0], "DataKey.Values[0] after binding"); + Assert.AreEqual ("Mahesh", key1.Values [1], "DataKey.Values[1] after binding"); + + Poker copy = new Poker (); + object state = fv.DoSaveControlState (); + copy.DoLoadControlState (state); + + DataKey key4 = copy.DataKey; + + Assert.AreEqual (1001, key4.Value, "DataKey.Value from ViewState"); + Assert.AreEqual (2, key4.Values.Count, "DataKey.Values count from ViewState"); + Assert.AreEqual (1001, key4.Values [0], "DataKey.Values[0] from ViewState"); + Assert.AreEqual ("Mahesh", key4.Values [1], "DataKey.Values[1] from ViewState"); + } + + [Test] + public void FormView_DataBind () + { + Poker fv = new Poker (); + fv.AllowPaging = true; + fv.DataSource = myds; + fv.Page = new Page (); + Assert.AreEqual (0, fv.PageCount, "BeforeDataBind1"); + Assert.AreEqual (null, fv.DataItem, "BeforeDataBind2"); + fv.DataBind (); + Assert.AreEqual (6, fv.PageCount, "AfterDataBind1"); + Assert.AreEqual (6, fv.DataItemCount, "AfterDataBind2"); + Assert.AreEqual ("Item1", fv.DataItem, "AfterDataBind3"); + } + + private bool isDeleted = false; + + [Test] + public void FormView_DeleteItem () + { + Poker fv = new Poker (); + fv.Page = new Page (); + fv.DataSource = myds; + fv.DataBind (); + Assert.AreEqual (false, isDeleted, "BeforeDeleteItem"); + fv.ItemDeleting += new FormViewDeleteEventHandler (fv_DeleteingHandler); + fv.DeleteItem (); + Assert.AreEqual (true, isDeleted, "BeforeDeleteItem"); + + } + + public void fv_DeleteingHandler (Object sender, FormViewDeleteEventArgs e) + { + isDeleted = true; + } + + private bool insertItem = false; + + [Test] + public void FormView_InsertItem () + { + Poker fv = new Poker (); + fv.Page = new Page (); + fv.ChangeMode (FormViewMode.Insert); + fv.ItemInserting += new FormViewInsertEventHandler (insert_item); + Assert.AreEqual (false, insertItem, "BeforeInsertItem"); + fv.InsertItem (false); + Assert.AreEqual (true, insertItem, "AfterInsertItem"); + + } + + public void insert_item (object sender, FormViewInsertEventArgs e) + { + insertItem = true; + } + + private bool updateItem = false; + [Test] + public void FormView_UpdateItem () + { + Poker fv = new Poker (); + fv.Page = new Page (); + fv.DataSource = myds; + fv.DataBind (); + fv.ChangeMode (FormViewMode.Edit); + fv.ItemUpdating += new FormViewUpdateEventHandler (update_item); + Assert.AreEqual (false, updateItem, "BeforeUpdateItem"); + fv.UpdateItem (false); + Assert.AreEqual (true, updateItem, "AfterUpdateItem"); + + } + + public void update_item (object sender, FormViewUpdateEventArgs e) + { + updateItem = true; + } + + [Test] + public void FormView_IsBindableType () + { + bool isBindable = false; + Poker fv = new Poker (); + isBindable = fv.IsBindableType (typeof (Decimal)); + Assert.AreEqual (true, isBindable, "IsBindableTypeDecimal"); + isBindable = fv.IsBindableType (typeof (Int32)); + Assert.AreEqual (true, isBindable, "IsBindableTypeInt32"); + isBindable = fv.IsBindableType (typeof (String)); + Assert.AreEqual (true, isBindable, "IsBindableTypeString"); + isBindable = fv.IsBindableType (typeof (Boolean)); + Assert.AreEqual (true, isBindable, "IsBindableTypeBoolean"); + isBindable = fv.IsBindableType (typeof (DateTime)); + Assert.AreEqual (true, isBindable, "IsBindableTypeDateTime"); + isBindable = fv.IsBindableType (typeof (Byte)); + Assert.AreEqual (true, isBindable, "IsBindableTypeByte"); + isBindable = fv.IsBindableType (typeof (Guid)); + Assert.AreEqual (true, isBindable, "IsBindableTypeGuid"); + isBindable = fv.IsBindableType (typeof (MyTemplate)); + Assert.AreEqual (false, isBindable, "IsBindableTypeMyTemplate"); + } + + [Test] + public void FormView_ControlState () { + + Poker fv = new Poker (); + Poker copy = new Poker (); + string[] keys = new String[2]; + keys[0] = "key1"; + keys[1] = "key2"; + fv.DataKeyNames = keys; + fv.BackImageUrl = "photo.jpg"; + fv.DefaultMode = FormViewMode.Insert ; + fv.ChangeMode (FormViewMode.Edit); + object state = fv.DoSaveControlState (); + copy.DoLoadControlState (state); + Assert.AreEqual (2, copy.DataKeyNames.Length, "DataKeyNames.Length"); + Assert.AreEqual ("key1", copy.DataKeyNames[0], "ControlStateDataKeyValue"); + Assert.AreEqual ("key2", copy.DataKeyNames[1], "ControlStateDataKeyValue2"); + Assert.AreEqual (FormViewMode.Insert, copy.DefaultMode, "ControlStateDefaultMode"); + Assert.AreEqual (FormViewMode.Edit, copy.CurrentMode, "ControlStateCurrentMode"); + + } + + //ViewState + [Test] + public void FormView_ViewState () + { + Poker fv = new Poker (); + Poker copy = new Poker (); + fv.AllowPaging = true; + fv.HeaderText = "Testing"; + fv.CssClass = "style.css"; + object state = fv.SaveState (); + copy.LoadState (state); + Assert.AreEqual (true, copy.AllowPaging, "ViewStateAllowPaging"); + Assert.AreEqual ("Testing", copy.HeaderText, "ViewStateHeaderText"); + Assert.AreEqual ("style.css", copy.CssClass, "ViewStateCssClass"); + } + + //Events + private bool init; + private bool itemCommand; + private bool itemCreated; + private bool itemDeleted; + private bool itemDeleting; + private bool itemInserted; + private bool itemInserting; + private bool itemUpdated; + private bool itemUpdating; + private bool modeChanged; + private bool modeChanging; + private bool pageIndexChanged; + private bool pageIndexChanging; + private int newPageIndex; + + public void ResetEvents () + { + init = false; + itemCommand = false; + itemCreated = false; + itemDeleted = false; + itemDeleting = false; + itemInserted = false; + itemInserting = false; + itemUpdated = false; + itemUpdating = false; + modeChanged = false; + modeChanging = false; + pageIndexChanged = false; + pageIndexChanging = false; + } + + [Test] + public void FormView_BubbleEvent () + { + FormViewCommandEventArgs com; + Poker fv = new Poker (); + Page page = new Page (); + Button bt = new Button (); + fv.AllowPaging = true; + fv.DataSource = myds; + page.Controls.Add (fv); + fv.DataBind (); + ResetEvents (); + fv.ItemCommand += new FormViewCommandEventHandler (fv_ItemCommand); + fv.ItemDeleted += new FormViewDeletedEventHandler (fv_ItemDeleted); + //Delete + fv.ItemDeleting += new FormViewDeleteEventHandler (fv_ItemDeleting); + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Delete", null)); + Assert.AreEqual (false, itemDeleting, "BeforeDeleteCommandBubbleEvent"); + Assert.AreEqual (false, itemCommand, "BeforeDeleteBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Delete"); + Assert.AreEqual (true, itemDeleting, "AfterDeleteBubbleEvent"); + Assert.AreEqual (true, itemCommand, "AfterDeleteCommandBubbleEvent"); + + + //Insert + itemCommand = false; + fv.ItemInserting += new FormViewInsertEventHandler (fv_ItemInserting); + fv.ChangeMode (FormViewMode.Insert); + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Insert", null)); + Assert.AreEqual (false, itemCommand, "BeforeInsertCommandBubbleEvent"); + Assert.AreEqual (false, itemInserting, "BeforeInsertBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Insert"); + Assert.AreEqual (true, itemCommand, "AfterInsertCommandBubbleEvent"); + Assert.AreEqual (true, itemInserting, "AfterInsertBubbleEvent"); + + + //Update + itemCommand = false; + fv.ItemUpdating += new FormViewUpdateEventHandler (fv_ItemUpdating); + fv.ChangeMode (FormViewMode.Edit); + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Update", null)); + Assert.AreEqual (false, itemUpdating, "BeforeUpdateEvent"); + Assert.AreEqual (false, itemCommand, "BeforeUpdateCommandEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Update"); + Assert.AreEqual (true, itemCommand, "AfterUpdateCommandBubbleEvent"); + Assert.AreEqual (true, itemUpdating, "AfterUpdateBubbleEvent"); + + + //Cancel + itemCommand = false; + fv.ModeChanging += new FormViewModeEventHandler (fv_ModeChanging); + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Cancel", null)); + Assert.AreEqual (false, itemCommand, "BeforeCancelCommandBubbleEvent"); + Assert.AreEqual (false, modeChanging, "BeforeCancelBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Cancel"); + Assert.AreEqual (true, itemCommand, "AfterCancelCommandBubbleEvent"); + Assert.AreEqual (true, modeChanging, "AfterCancelBubbleEvent"); + + //Edit + itemCommand = false; + modeChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Edit", null)); + Assert.AreEqual (false, itemCommand, "BeforeEditCommandBubbleEvent"); + Assert.AreEqual (false, modeChanging, "BeforeEditBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Edit"); + Assert.AreEqual (true, itemCommand, "AfterEditCommandBubbleEvent"); + Assert.AreEqual (true, modeChanging, "AfterEditBubbleEvent"); + + //New + itemCommand = false; + modeChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("New", null)); + Assert.AreEqual (false, itemCommand, "BeforeNewCommandBubbleEvent"); + Assert.AreEqual (false, modeChanging, "BeforeNewBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - New"); + Assert.AreEqual (true, itemCommand, "AfterNewCommandBubbleEvent"); + Assert.AreEqual (true, modeChanging, "AfterNewBubbleEvent"); + + //Page Index default + itemCommand = false; + fv.PageIndexChanging += new FormViewPageEventHandler (fv_PageIndexChanging); + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", null)); + Assert.AreEqual (false, itemCommand, "BeforePageCommandBubbleEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforePageBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Page Index default"); + Assert.AreEqual (true, itemCommand, "AfterPageCommandBubbleEvent"); + Assert.AreEqual (true, pageIndexChanging, "AfterPageBubbleEvent"); + Assert.AreEqual (-1, newPageIndex, "PageIndex"); + + //Next Page + itemCommand = false; + pageIndexChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Next")); + Assert.AreEqual (false, itemCommand, "BeforeNextPageCommandBubbleEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforeNextPageBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Next Page"); + Assert.AreEqual (true, itemCommand, "AfterNextPageCommandBubbleEvent"); + Assert.AreEqual (true, pageIndexChanging, "AfterNextPageBubbleEvent"); + Assert.AreEqual (1, newPageIndex, "NextPageIndex"); + + //Prev Page + itemCommand = false; + pageIndexChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Prev")); + Assert.AreEqual (false, itemCommand, "BeforePrevPageCommandBubbleEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforePrevPageBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Prev Page"); + Assert.AreEqual (true, itemCommand, "AfterPrevPageCommandBubbleEvent"); + Assert.AreEqual (true, pageIndexChanging, "AfterPrevPageBubbleEvent"); + Assert.AreEqual (-1, newPageIndex, "PrevPageIndex"); + + //First Page + itemCommand = false; + pageIndexChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "First")); + Assert.AreEqual (false, itemCommand, "BeforeFirstPageCommandBubbleEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforeFirstPageBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - First Page"); + Assert.AreEqual (true, itemCommand, "AfterFirstPageCommandBubbleEvent"); + Assert.AreEqual (true, pageIndexChanging, "AfterFirstPageBubbleEvent"); + Assert.AreEqual (0, newPageIndex, "FirstPageIndex"); + + //Last Page + itemCommand = false; + pageIndexChanging = false; + com = new FormViewCommandEventArgs (bt, new CommandEventArgs ("Page", "Last")); + Assert.AreEqual (false, itemCommand, "BeforeLastPageCommandBubbleEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforeLastPageBubbleEvent"); + Assert.IsTrue (fv.DoOnBubbleEvent (bt, com), "OnBubbleEvent - Last Page"); + Assert.AreEqual (true, itemCommand, "AfterLastPageCommandBubbleEvent"); + Assert.AreEqual (true, pageIndexChanging, "AfterLastPageBubbleEvent"); + Assert.AreEqual (5, newPageIndex, "FirstPageIndex"); + + } + + [Test] + [Category("NunitWeb")] + public void FormView_DataSourceChangedEvent () + { + WebTest t = new WebTest(); + PageDelegates pd = new PageDelegates (); + pd.Load = FormView_Init; + pd.PreRenderComplete = FormView_Load; + t.Invoker = new PageInvoker (pd); + t.Run (); + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = ""; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + t.Run (); + if (t.UserData == null) + Assert.Fail ("DataSourceChangedEvent#1"); + Assert.AreEqual ("Data_rebounded", t.UserData.ToString (), "DataSourceChangedEvent#2"); + } + + #region FormView_DataSourceChangedEvent + public static void FormView_Init(Page p) + { + Poker fv = new Poker (); + DS data = new DS (); + p.Controls.Add (fv); + p.Controls.Add (data); + data.TypeName = typeof (DS).AssemblyQualifiedName; + data.SelectMethod = "GetList"; + data.ID = "Data"; + fv.DataBinding += new EventHandler (data_DataBinding); + fv.DataSourceID = "Data"; + } + + public static void FormView_Load (Page p) + { + if (p.IsPostBack) { + DS data = (DS) p.FindControl ("Data") ; + if (data == null) + Assert.Fail ("Data soource control not created#1"); + data.DoRaiseDataSourceChangedEvent (new EventArgs ()); + } + } + + public static void data_DataBinding (object sender, EventArgs e) + { + if (((WebControl) sender).Page.IsPostBack) + WebTest.CurrentTest.UserData = "Data_rebounded"; + } + #endregion + + [Test] + public void FormView_Events () + { + ResetEvents (); + Poker fv = new Poker (); + fv.Page = new Page (); + fv.Init += new EventHandler (fv_Init); + fv.ItemCommand += new FormViewCommandEventHandler (fv_ItemCommand); + fv.ItemCreated += new EventHandler (fv_ItemCreated); + fv.ItemDeleted += new FormViewDeletedEventHandler (fv_ItemDeleted); + fv.ItemDeleting += new FormViewDeleteEventHandler (fv_ItemDeleting); + fv.ItemInserted += new FormViewInsertedEventHandler (fv_ItemInserted); + fv.ItemInserting += new FormViewInsertEventHandler (fv_ItemInserting); + fv.ItemUpdated += new FormViewUpdatedEventHandler (fv_ItemUpdated); + fv.ItemUpdating += new FormViewUpdateEventHandler (fv_ItemUpdating); + fv.ModeChanged += new EventHandler (fv_ModeChanged); + fv.ModeChanging += new FormViewModeEventHandler (fv_ModeChanging); + fv.PageIndexChanged += new EventHandler (fv_PageIndexChanged); + fv.PageIndexChanging += new FormViewPageEventHandler (fv_PageIndexChanging); + + Assert.AreEqual (false, init, "BeforeInit"); + fv.DoOnInit (new EventArgs ()); + Assert.AreEqual (true, init, "AfterInit"); + Assert.AreEqual (false, itemCommand, "BeforeItemCommandEvent"); + Button bt = new Button (); + fv.DoOnItemCommand (new FormViewCommandEventArgs (bt, new CommandEventArgs ("", null))); + Assert.AreEqual (true, itemCommand, "AfterItemCommandEvent"); + Assert.AreEqual (false, itemCreated, "BeforeItemCreatedEvent"); + fv.DoOnItemCreated (new EventArgs ()); + Assert.AreEqual (true, itemCreated, "AfterItemCreatedEvent"); + Assert.AreEqual (false, itemDeleted, "BeforeItemDeletedEvent"); + fv.DoOnItemDeleted (new FormViewDeletedEventArgs (3, new Exception ())); + Assert.AreEqual (true, itemDeleted, "AfterItemDeletedEvent"); + Assert.AreEqual (false, itemDeleting, "BeforeItemDeletingEvent"); + fv.DoOnItemDeleting (new FormViewDeleteEventArgs (1)); + Assert.AreEqual (true, itemDeleting, "AfterItemDeletingEvent"); + Assert.AreEqual (false, itemInserted, "BeforeItemInsertedEvent"); + fv.DoOnItemInserted (new FormViewInsertedEventArgs (2, new Exception ())); + Assert.AreEqual (true, itemInserted, "AfterItemInsetedEvent"); + Assert.AreEqual (false, itemInserting, "BeforeItemInsertingEvent"); + fv.DoOnItemInserting (new FormViewInsertEventArgs (bt)); + Assert.AreEqual (true, itemInserting, "AfterItemInsetingEvent"); + Assert.AreEqual (false, itemUpdated, "BeforeItemUpdatedEvent"); + fv.DoOnItemUpdated (new FormViewUpdatedEventArgs (1, new Exception ())); + Assert.AreEqual (true, itemUpdated, "AfterItemUpdatedEvent"); + Assert.AreEqual (false, itemUpdating, "BeforeItemUpdatingEvent"); + fv.DoOnItemUpdating (new FormViewUpdateEventArgs (bt)); + Assert.AreEqual (true, itemUpdating, "AfterItemUpdatingEvent"); + Assert.AreEqual (false, modeChanged, "BeforeModeChangedEvent"); + fv.DoOnModeChanged (new EventArgs ()); + Assert.AreEqual (true, modeChanged, "AfterModeChangedEvent"); + Assert.AreEqual (false, modeChanging, "BeforeModeChangingEvent"); + fv.DoOnModeChanging (new FormViewModeEventArgs (FormViewMode.Edit, true)); + Assert.AreEqual (true, modeChanging, "AfterModeChangingEvent"); + Assert.AreEqual (false, pageIndexChanged, "BeforePageIndexChangedEvent"); + fv.DoOnPageIndexChanged (new EventArgs ()); + Assert.AreEqual (true, pageIndexChanged, "AfterPageIndexChangedEvent"); + Assert.AreEqual (false, pageIndexChanging, "BeforePageIndexChangingEvent"); + fv.DoOnPageIndexChanging (new FormViewPageEventArgs (1)); + Assert.AreEqual (true, pageIndexChanging, "AfterPageIndexChangingEvent"); + } + private void fv_Init (object sender, EventArgs e) + { + init = true; + } + + private void fv_ItemCommand (object sender, FormViewCommandEventArgs e) + { + itemCommand = true; + } + + private void fv_ItemCreated (object sender, EventArgs e) + { + itemCreated = true; + } + + private void fv_ItemDeleted (object sender, FormViewDeletedEventArgs e) + { + itemDeleted = true; + } + + private void fv_ItemDeleting (object sender, FormViewDeleteEventArgs e) + { + itemDeleting = true; + } + + private void fv_ItemInserted (object sender, FormViewInsertedEventArgs e) + { + itemInserted = true; + } + + private void fv_ItemInserting (object sender, FormViewInsertEventArgs e) + { + itemInserting = true; + } + + private void fv_ItemUpdated (object sender, FormViewUpdatedEventArgs e) + { + itemUpdated = true; + } + + private void fv_ItemUpdating (object sender, FormViewUpdateEventArgs e) + { + itemUpdating = true; + } + + private void fv_ModeChanged (object sender, EventArgs e) + { + modeChanged = true; + } + + private void fv_ModeChanging (object sender, FormViewModeEventArgs e) + { + modeChanging = true; + } + + private void fv_PageIndexChanged (object sender, EventArgs e) + { + pageIndexChanged = true; + } + private void fv_PageIndexChanging (object sender, FormViewPageEventArgs e) + { + pageIndexChanging = true; + newPageIndex = e.NewPageIndex; + e.NewPageIndex = -1; + } + + //Exceptions + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void CellPaddingException () + { + Poker p = new Poker (); + p.CellPadding = -2; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void CellSpacingException () + { + Poker p = new Poker (); + p.CellSpacing = -5; + } + + [Test] + [ExpectedException (typeof (ArgumentOutOfRangeException))] + public void PageIndexException () + { + Poker p = new Poker (); + p.PageIndex = -5; + } + + [Test] + [ExpectedException (typeof (HttpException))] + public void InsertItemException () + { + Poker p = new Poker (); + p.InsertItem (true); + } + + [Test] + [ExpectedException (typeof (HttpException))] + public void UpdateItemException () + { + Poker p = new Poker (); + p.UpdateItem (true); + } + + + [Test] + [Category ("NotDotNet")] //TODO + public void PageIndex () + { + ObjectDataSource ds = new ObjectDataSource (); + ds.ID = "ObjectDataSource1"; + ds.TypeName = "System.Guid"; + ds.SelectMethod = "ToByteArray"; + Page p = new Page (); + Poker f = new Poker (); + f.Page = p; + ds.Page = p; + p.Controls.Add (f); + p.Controls.Add (ds); + f.DataSourceID = "ObjectDataSource1"; + f.DoConfirmInitState (); + f.DoOnPreRender (EventArgs.Empty); + object cur = f.DataItem; + f.PageIndex = 1; + Assert.IsTrue (cur != f.DataItem, "#01"); + +CommandEventArgs cargs = new CommandEventArgs ("Page", "Prev"); + FormViewCommandEventArgs fvargs = new FormViewCommandEventArgs (f, cargs); + f.DoOnBubbleEvent (f, fvargs); + Assert.IsTrue (f.OnPageIndexChangingCalled, "#02"); + Assert.IsTrue (f.OnPageIndexChangedCalled, "#03"); + f.OnPageIndexChangingCalled = false; + f.OnPageIndexChangedCalled = false; + + f.DoOnBubbleEvent (f, fvargs); + Assert.IsTrue (f.OnPageIndexChangingCalled, "#04"); + Assert.IsFalse (f.OnPageIndexChangedCalled, "#05"); + f.OnPageIndexChangingCalled = false; + f.OnPageIndexChangedCalled = false; + + f.PageIndex = f.PageCount - 1; + cargs = new CommandEventArgs ("Page", "Next"); + fvargs = new FormViewCommandEventArgs (f, cargs); + f.DoOnBubbleEvent (f, fvargs); + Assert.IsTrue (f.OnPageIndexChangingCalled, "#06"); + Assert.IsFalse (f.OnPageIndexChangedCalled, "#07"); + f.OnPageIndexChangingCalled = false; + f.OnPageIndexChangedCalled = false; + } + + [Test] + public void PageCount () + { + ObjectDataSource ds = new ObjectDataSource (); + ds.ID = "ObjectDataSource1"; + ds.TypeName = "System.Guid"; + ds.SelectMethod = "ToByteArray"; + Page p = new Page (); + Poker f = new Poker (); + f.Page = p; + ds.Page = p; + p.Controls.Add (f); + p.Controls.Add (ds); + f.DataSourceID = "ObjectDataSource1"; + f.DoConfirmInitState (); + f.DoOnPreRender (EventArgs.Empty); + f.PageIndex = 1; + Assert.AreEqual (16, f.PageCount, "#01"); + } + + [Test] + public void InsertTemplate () { + ObjectDataSource ds = new ObjectDataSource (); + ds.ID = "ObjectDataSource1"; + ds.TypeName = "System.Collections.ArrayList"; + ds.SelectMethod = "ToArray"; + Page p = new Page (); + Poker f = new Poker (); + Template itemTemplate = new Template (); + Template emptyTemplate = new Template (); + Template insertTemplate = new Template (); + f.ItemTemplate = itemTemplate; + f.EmptyDataTemplate = emptyTemplate; + f.InsertItemTemplate = insertTemplate; + f.DefaultMode = FormViewMode.Insert; + f.Page = p; + ds.Page = p; + p.Controls.Add (f); + p.Controls.Add (ds); + f.DataSourceID = "ObjectDataSource1"; + f.DoConfirmInitState (); + f.DoOnPreRender (EventArgs.Empty); + + f.AllowPaging = true; + Assert.IsFalse(itemTemplate.Instantiated, "#01"); + Assert.IsFalse(emptyTemplate.Instantiated, "#02"); + Assert.IsTrue(insertTemplate.Instantiated, "#03"); + } + + [TestFixtureTearDown] + public void TearDown () + { + WebTest.Unload (); + } + + [Test] + [Category("NunitWeb")] + public void FormViewCssClass () + { + string res = new WebTest ("FormView.aspx").Run (); + Assert.IsTrue (Regex.IsMatch ( + res, ".*]*class=\"[^\"]*test1[^\"]*\"[^>]*>.*", + RegexOptions.IgnoreCase|RegexOptions.Singleline), + "check that is found. Actual: "+res); + Assert.IsFalse (Regex.IsMatch ( + res, ".*]*class=\"\"[^>]*>.*", + RegexOptions.IgnoreCase|RegexOptions.Singleline), + "check that
    is not found. Actual: "+res); + } + + + + + [Test] + [Category ("NunitWeb")] + public void FormView_RenderSimpleTemplate() + { + string renderedPageHtml = new WebTest ("FormViewTest1.aspx").Run (); + string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml); + string origHtmlValue = "
    \r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123456
    "; + + HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderSimpleTemplate"); + } + + [Test] + [Category ("NunitWeb")] + public void FormView_RenderFooterAndPager() + { + string renderedPageHtml = new WebTest ("FormViewTest1_2.aspx").Run (); + string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml); + string origHtmlValue = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1\n
    \n Footer Template Test\n
    \n \n \n \n \n
    "; + HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "FormView_RenderFooterAndPager"); + } + + [Test] + [Category ("NunitWeb")] + public void FormView_RenderWithHeader() + { + string renderedPageHtml = new WebTest ("FormViewTest1_4.aspx").Run (); + string newHtmlValue = HtmlDiff.GetControlFromPageHtml (renderedPageHtml); + string origHtmlValue = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Using Header Text property
    Using Footer Text property
    \n Next\n Prev\n Page Index: 0\n
    "; + HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderingDefaultPaging"); + } + + + [Test] + [Category ("NunitWeb")] + public void FormView_Render () + { + string RenderedPageHtml = new WebTest ("FormViewTest1_3.aspx").Run (); + string newHtmlValue = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + string origHtmlValue = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n Header Template Test\n
    \n 1\n
    \n FormView Footer\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123456
    "; + HtmlDiff.AssertAreEqual (origHtmlValue, newHtmlValue, "RenderingDefaultPaging"); + } + + + [Test] + [Category ("NunitWeb")] + public void FormView_EditPostback () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + string pageHTML = t.Run (); + string newHtml = HtmlDiff.GetControlFromPageHtml (pageHTML); + string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1001 \n Chand\n Mahesh \n Edit\n New\n Delete\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    "; + HtmlDiff.AssertAreEqual (origHtml, newHtml, "BeforeEditPostback"); + + //Edit button postback (change to edit mode - buttons "Update" and "Cancel" should appear. + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$EditButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + newHtml = HtmlDiff.GetControlFromPageHtml (pageHTML); + origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n Enter First Name:
    \n Enter Last Name:
    \n Update\n Cancel\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    "; + HtmlDiff.AssertAreEqual (origHtml, newHtml, "AfterEditPostback"); + + //Update record postback + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls.Add ("FormView1$FNameEdit"); + fr.Controls.Add ("FormView1$LNameEdit"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$UpdateButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + fr.Controls["FormView1$FNameEdit"].Value = "Merav"; + fr.Controls["FormView1$LNameEdit"].Value = "Test"; + t.Request = fr; + pageHTML = t.Run (); + newHtml = HtmlDiff.GetControlFromPageHtml (pageHTML); + origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1001 \n Test\n Merav \n Edit\n New\n Delete\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    "; + HtmlDiff.AssertAreEqual (origHtml, newHtml, "AfterUpdatePostback"); + + //Postback to return to Edit mode + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$EditButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + newHtml = pageHTML.Substring (pageHTML.IndexOf ("start") + 5, pageHTML.IndexOf ("end") - pageHTML.IndexOf ("start") - 5); + Assert.AreEqual (true, pageHTML.Contains ("Merav"), "EditModePostback1"); + Assert.AreEqual (true, pageHTML.Contains ("CancelUpdateButton"), "EditModePostback2"); + + // Cancel edited record postback + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls.Add ("FormView1$FNameEdit"); + fr.Controls.Add ("FormView1$LNameEdit"); + fr.Controls["FormView1$FNameEdit"].Value = "EditFirstName"; + fr.Controls["FormView1$LNameEdit"].Value = "EditLastName"; + fr.Controls["__EVENTTARGET"].Value = "FormView1$CancelUpdateButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + newHtml = HtmlDiff.GetControlFromPageHtml (pageHTML); + origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1001 \n Test\n Merav \n Edit\n New\n Delete\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    "; + HtmlDiff.AssertAreEqual (origHtml, newHtml, "CancelEditedRecordPostback"); + } + + [Test (Description="Bug #578863")] + public void FormView_PagerSettings_Visibility () + { + string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n
    \n 1\n\t
    "; + WebTest t = new WebTest ("FormViewPagerVisibility.aspx"); + string pageHtml = t.Run (); + string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); + + HtmlDiff.AssertAreEqual (origHtml, renderedHtml, "#A1"); + } + + [Test] + [Category ("NunitWeb")] + public void FormView_FireEvent_1 () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + t.Invoker = PageInvoker.CreateOnInit (EditPostbackFireEvent_Init); + string html = t.Run (); + //Edit button postback (change to edit mode - buttons "Update" and "Cancel" should appear. + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$EditButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + html = t.Run (); + + ArrayList eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("ItemCommand", eventlist[0], "#1"); + Assert.AreEqual ("ModeChanging", eventlist[1], "#2"); + Assert.AreEqual ("ModeChanged", eventlist[2], "#3"); + t.UserData = null; + + //Update record postback + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls.Add ("FormView1$FNameEdit"); + fr.Controls.Add ("FormView1$LNameEdit"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$UpdateButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + fr.Controls["FormView1$FNameEdit"].Value = "Merav"; + fr.Controls["FormView1$LNameEdit"].Value = "Test"; + t.Request = fr; + html = t.Run (); + + eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("ItemCommand", eventlist[0], "#1"); + Assert.AreEqual ("ItemUpdating", eventlist[1], "#2"); + Assert.AreEqual ("ItemUpdated", eventlist[2], "#3"); + Assert.AreEqual ("ModeChanging", eventlist[3], "#4"); + Assert.AreEqual ("ModeChanged", eventlist[4], "#5"); + } + + #region FireEvents_1 + public static void EditPostbackFireEvent_Init (Page p) + { + + FormView d = p.FindControl ("FormView1") as FormView; + if (d != null) { + d.ModeChanged +=new EventHandler(d_ModeChanged); + d.ModeChanging+=new FormViewModeEventHandler(d_ModeChanging); + d.ItemCommand += new FormViewCommandEventHandler (d_ItemCommand); + d.ItemUpdating += new FormViewUpdateEventHandler (d_ItemUpdating); + d.ItemUpdated += new FormViewUpdatedEventHandler (d_ItemUpdated); + } + } + + static void d_ItemUpdated (object sender, FormViewUpdatedEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemUpdated"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemUpdated"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ItemUpdating (object sender, FormViewUpdateEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemUpdating"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemUpdating"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ItemCommand (object sender, FormViewCommandEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemCommand"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemCommand"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ModeChanging(object sender, FormViewModeEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) + { + ArrayList list = new ArrayList (); + list.Add ("ModeChanging"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ModeChanging"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ModeChanged(object sender, EventArgs e) + { + if (WebTest.CurrentTest.UserData == null) + { + ArrayList list = new ArrayList (); + list.Add ("ModeChanged"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ModeChanged"); + WebTest.CurrentTest.UserData = list; + } + } + #endregion + + [Test] + [Category ("NunitWeb")] + public void FormView_FireEvent_2 () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + t.Invoker = PageInvoker.CreateOnInit (FireEvent_2_Init); + t.Run (); + + // Checking for itemcreated event fired. + ArrayList eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("ItemCreated", eventlist[0], "#1"); + } + + #region FireEvent_2 + public static void FireEvent_2_Init (Page p) + { + FormView d = p.FindControl ("FormView1") as FormView; + if (d != null) { + d.ItemCreated += new EventHandler (d_ItemCreated); + } + } + + static void d_ItemCreated (object sender, EventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemCreated"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemCreated"); + WebTest.CurrentTest.UserData = list; + } + } + #endregion + + [Test] + [Category ("NunitWeb")] + public void FormView_FireEvent_3 () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + t.Invoker = PageInvoker.CreateOnInit (FireEvent_3_Init); + t.Run (); + + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$NewButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + t.Run (); + + //Insert new record + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls.Add ("FormView1$IDInsert"); + fr.Controls.Add ("FormView1$FNameInsert"); + fr.Controls.Add ("FormView1$LNameInsert"); + fr.Controls["FormView1$IDInsert"].Value = "33"; + fr.Controls["FormView1$FNameInsert"].Value = "InsertFirstName"; + fr.Controls["FormView1$LNameInsert"].Value = "InsertLastName"; + fr.Controls["__EVENTTARGET"].Value = "FormView1$InsertButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + t.Run (); + + ArrayList eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("ItemInserting", eventlist[0], "#1"); + Assert.AreEqual ("ItemInserted", eventlist[1], "#2"); + } + + #region FireEvent_3 + public static void FireEvent_3_Init (Page p) + { + FormView d = p.FindControl ("FormView1") as FormView; + if (d != null) { + d.ItemInserted += new FormViewInsertedEventHandler (d_ItemInserted); + d.ItemInserting += new FormViewInsertEventHandler (d_ItemInserting); + } + } + + static void d_ItemInserting (object sender, FormViewInsertEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemInserting"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemInserting"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ItemInserted (object sender, FormViewInsertedEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemInserted"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemInserted"); + WebTest.CurrentTest.UserData = list; + } + } + #endregion + + [Test] + [Category ("NunitWeb")] + public void FormView_FireEvent_4 () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + t.Invoker = PageInvoker.CreateOnInit (FireEvent_4_Init); + t.Run (); + + //Delete Item + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$DeleteButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + t.Run (); + + ArrayList eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("ItemDeleting", eventlist[0], "#1"); + Assert.AreEqual ("ItemDeleted", eventlist[1], "#2"); + + } + + #region FireEvent_4 + public static void FireEvent_4_Init (Page p) + { + FormView d = p.FindControl ("FormView1") as FormView; + if (d != null) { + d.ItemDeleting += new FormViewDeleteEventHandler (d_ItemDeleting); + d.ItemDeleted += new FormViewDeletedEventHandler (d_ItemDeleted); + } + } + + static void d_ItemDeleted (object sender, FormViewDeletedEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemDeleted"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemDeleted"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_ItemDeleting (object sender, FormViewDeleteEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("ItemDeleting"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("ItemDeleting"); + WebTest.CurrentTest.UserData = list; + } + } + #endregion + + [Test] + [Category ("NunitWeb")] + public void FormView_FireEvent_5 () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + t.Invoker = PageInvoker.CreateOnInit (FireEvent_5_Init); + t.Run (); + + //Delete Item + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1"; + fr.Controls["__EVENTARGUMENT"].Value = "Page$2"; + t.Request = fr; + t.Run (); + + ArrayList eventlist = t.UserData as ArrayList; + if (eventlist == null) + Assert.Fail ("User data does not been created fail"); + + Assert.AreEqual ("PageIndexChanging", eventlist[0], "#1"); + Assert.AreEqual ("PageIndexChanged", eventlist[1], "#2"); + } + + #region FireEvent_5 + public static void FireEvent_5_Init (Page p) + { + FormView d = p.FindControl ("FormView1") as FormView; + if (d != null) { + d.PageIndexChanged+=new EventHandler(d_PageIndexChanged); + d.PageIndexChanging+=new FormViewPageEventHandler(d_PageIndexChanging); + } + } + + static void d_PageIndexChanging (object sender, FormViewPageEventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("PageIndexChanging"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("PageIndexChanging"); + WebTest.CurrentTest.UserData = list; + } + } + + static void d_PageIndexChanged (object sender, EventArgs e) + { + if (WebTest.CurrentTest.UserData == null) { + ArrayList list = new ArrayList (); + list.Add ("PageIndexChanged"); + WebTest.CurrentTest.UserData = list; + } + else { + ArrayList list = WebTest.CurrentTest.UserData as ArrayList; + if (list == null) + throw new NullReferenceException (); + list.Add ("PageIndexChanged"); + WebTest.CurrentTest.UserData = list; + } + } + #endregion + + [Test] + [Category ("NunitWeb")] + public void FormView_InsertPostback () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + string pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("1001"), "BeforeInsert1"); + Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "BeforeInsert2"); + Assert.AreEqual (true, pageHTML.Contains ("Chand"), "BeforeInsert3"); + Assert.AreEqual (false, pageHTML.Contains ("Page$4"), "BeforeInsert4"); + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$NewButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + string newHtml = HtmlDiff.GetControlFromPageHtml (pageHTML); + string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n
    \n Insert ID:\n
    \n Insert First Name:\n \n
    \n Insert Last Name: \n \n Insert\n Cancel\n
    "; + HtmlDiff.AssertAreEqual (origHtml, newHtml, "InsertPostback"); + + //Insert new record + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls.Add ("FormView1$IDInsert"); + fr.Controls.Add ("FormView1$FNameInsert"); + fr.Controls.Add ("FormView1$LNameInsert"); + fr.Controls["FormView1$IDInsert"].Value = "33"; + fr.Controls["FormView1$FNameInsert"].Value = "InsertFirstName"; + fr.Controls["FormView1$LNameInsert"].Value ="InsertLastName"; + fr.Controls["__EVENTTARGET"].Value = "FormView1$InsertButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("1001"), "AfterInsert1"); + Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "AfterInsert2"); + Assert.AreEqual (true, pageHTML.Contains ("Chand"), "AfterInsert3"); + Assert.AreEqual (true, pageHTML.Contains ("Page$4"), "AfterInsert4"); + + //Checking that the inserted record appears on page 4. + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1"; + fr.Controls["__EVENTARGUMENT"].Value = "Page$4"; + t.Request = fr; + pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("33"), "AfterInsert1"); + Assert.AreEqual (true, pageHTML.Contains ("InsertLastName"), "AfterInsert2"); + Assert.AreEqual (true, pageHTML.Contains ("InsertFirstName"), "AfterInsert3"); + + } + + [Test] + [Category ("NunitWeb")] + public void FormView_DeleteAndEmptyTemplatePostback () + { + WebTest t = new WebTest ("FormViewInsertEditDelete.aspx"); + string pageHTML = t.Run (); + + Assert.AreEqual (true, pageHTML.Contains ("1001"), "BeforeDelete1"); + Assert.AreEqual (true, pageHTML.Contains ("Mahesh"), "BeforeDelete2"); + Assert.AreEqual (true, pageHTML.Contains ("Chand"), "BeforeDelete3"); + Assert.AreEqual (true, pageHTML.Contains ("Page$3"), "BeforeDelete4"); + //Delete First Item + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$DeleteButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("1002"), "AfterFirstDelete1"); + Assert.AreEqual (true, pageHTML.Contains ("Talmadge"), "AfterFirstDelete2"); + Assert.AreEqual (true, pageHTML.Contains ("Melanie"), "AfterFirstDelete3"); + Assert.AreEqual (true, pageHTML.Contains ("Page$2"), "AfterFirstDelete4"); + Assert.AreEqual (false, pageHTML.Contains ("Page$3"), "AfterFirstDelete5"); + + //Delete second item + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$DeleteButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("1003"), "AfterSecondDelete1"); + Assert.AreEqual (true, pageHTML.Contains ("Bansal"), "AfterSecondDelete2"); + Assert.AreEqual (true, pageHTML.Contains ("Vinay"), "AfterSecondDelete3"); + Assert.AreEqual (false, pageHTML.Contains ("Page$2"), "AfterSecondDelete4"); + + //Delete last item and checking that the EmptyDataTemplate appears. + + fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "FormView1$DeleteButton"; + fr.Controls["__EVENTARGUMENT"].Value = ""; + t.Request = fr; + pageHTML = t.Run (); + Assert.AreEqual (true, pageHTML.Contains ("FormView1_Label1"), "EmptyTemplateTest1"); + Assert.AreEqual (true, pageHTML.Contains ("The Database is empty"), "EmptyTemplateTest2"); + } + + [Test] + public void FormView_CurrentMode () { + FormView view = new FormView (); + view.DefaultMode = FormViewMode.Insert; + Assert.AreEqual (FormViewMode.Insert, view.CurrentMode, "FormView_CurrentMode#1"); + view.ChangeMode (FormViewMode.Edit); + Assert.AreEqual (FormViewMode.Edit, view.CurrentMode, "FormView_CurrentMode#2"); + } + + [Test] + public void FormView_CreateDataSourceSelectArguments2 () { + DataSourceView view; + Page p = new Page (); + + Poker dv = new Poker (); + p.Controls.Add (dv); + + ObjectDataSource data = new ObjectDataSource (); + data.TypeName = typeof (DataSourceObject).AssemblyQualifiedName; + data.SelectMethod = "GetList"; + data.SortParameterName = "sortExpression"; + DataSourceSelectArguments arg; + p.Controls.Add (data); + + dv.DataSource = data; + dv.DataBind (); + + arg = dv.DoCreateDataSourceSelectArguments (); + Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "Default"); + + dv.AllowPaging = true; + dv.PageIndex = 2; + arg = dv.DoCreateDataSourceSelectArguments (); + view = dv.DoGetData (); + Assert.IsFalse (view.CanPage); + Assert.IsTrue (view.CanRetrieveTotalRowCount); + Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = true, CanPage = false, CanRetrieveTotalRowCount = true"); + + // make DataSourceView.CanPage = true + data.EnablePaging = true; + + arg = dv.DoCreateDataSourceSelectArguments (); + view = dv.DoGetData (); + Assert.IsTrue (view.CanPage); + Assert.IsFalse (view.CanRetrieveTotalRowCount); + Assert.IsTrue (arg.Equals (new DataSourceSelectArguments (2, -1)), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = false"); + + dv.AllowPaging = false; + arg = dv.DoCreateDataSourceSelectArguments (); + Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = false"); + + // make DataSourceView.CanRetrieveTotalRowCount = true + data.SelectCountMethod = "GetCount"; + + arg = dv.DoCreateDataSourceSelectArguments (); + Assert.IsTrue (arg.Equals (DataSourceSelectArguments.Empty), "AllowPaging = false, CanPage = true, CanRetrieveTotalRowCount = true"); + + dv.AllowPaging = true; + arg = dv.DoCreateDataSourceSelectArguments (); + DataSourceSelectArguments arg1 = new DataSourceSelectArguments (2, 1); + arg1.RetrieveTotalRowCount = true; + view = dv.DoGetData (); + Assert.IsTrue (view.CanPage); + Assert.IsTrue (view.CanRetrieveTotalRowCount); + Assert.IsTrue (arg.Equals (arg1), "AllowPaging = true, CanPage = true, CanRetrieveTotalRowCount = true"); + } + + [Test] + public void FormView_GetPostBackOptions () { + FormView fv = new FormView (); + fv.Page = new Page (); + IButtonControl btn = new Button (); + btn.CausesValidation = false; + Assert.IsFalse (btn.CausesValidation); + Assert.AreEqual (String.Empty, btn.CommandName); + Assert.AreEqual (String.Empty, btn.CommandArgument); + Assert.AreEqual (String.Empty, btn.PostBackUrl); + Assert.AreEqual (String.Empty, btn.ValidationGroup); + PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn); + Assert.IsFalse (options.PerformValidation); + Assert.IsFalse (options.AutoPostBack); + Assert.IsFalse (options.TrackFocus); + Assert.IsTrue (options.ClientSubmit); + Assert.IsTrue (options.RequiresJavaScriptProtocol); + Assert.AreEqual ("$", options.Argument); + Assert.AreEqual (null, options.ActionUrl); + Assert.AreEqual (null, options.ValidationGroup); + Assert.IsTrue (object.ReferenceEquals (options.TargetControl, fv)); + + btn.ValidationGroup = "VG"; + btn.CommandName = "CMD"; + btn.CommandArgument = "ARG"; + btn.PostBackUrl = "Page.aspx"; + Assert.IsFalse (btn.CausesValidation); + Assert.AreEqual ("CMD", btn.CommandName); + Assert.AreEqual ("ARG", btn.CommandArgument); + Assert.AreEqual ("Page.aspx", btn.PostBackUrl); + Assert.AreEqual ("VG", btn.ValidationGroup); + options = ((IPostBackContainer) fv).GetPostBackOptions (btn); + Assert.IsFalse (options.PerformValidation); + Assert.IsFalse (options.AutoPostBack); + Assert.IsFalse (options.TrackFocus); + Assert.IsTrue (options.ClientSubmit); + Assert.IsTrue (options.RequiresJavaScriptProtocol); + Assert.AreEqual ("CMD$ARG", options.Argument); + Assert.AreEqual (null, options.ActionUrl); + Assert.AreEqual (null, options.ValidationGroup); + } + + [Test] + [ExpectedException (typeof (InvalidOperationException))] + public void FormView_GetPostBackOptions_CausesValidation () { + FormView fv = new FormView (); + fv.Page = new Page (); + IButtonControl btn = new Button (); + Assert.IsTrue (btn.CausesValidation); + Assert.AreEqual (String.Empty, btn.CommandName); + Assert.AreEqual (String.Empty, btn.CommandArgument); + Assert.AreEqual (String.Empty, btn.PostBackUrl); + Assert.AreEqual (String.Empty, btn.ValidationGroup); + PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (btn); + } + + [Test] + [ExpectedException (typeof (ArgumentNullException))] + public void FormView_GetPostBackOptions_Null_Argument () { + FormView fv = new FormView (); + fv.Page = new Page (); + PostBackOptions options = ((IPostBackContainer) fv).GetPostBackOptions (null); + } + + [Test] + [Category ("NunitWeb")] + public void FormView_RequiresDataBinding () { + PageDelegates delegates = new PageDelegates (); + delegates.LoadComplete = FormView_RequiresDataBinding_LoadComplete; + PageInvoker invoker = new PageInvoker (delegates); + WebTest t = new WebTest (invoker); + t.Run (); + } + + public static void FormView_RequiresDataBinding_LoadComplete (Page p) { + Poker view = new Poker (); + p.Form.Controls.Add (view); + + view.DataSource = new string [] { "A", "B", "C" }; + view.DataBind (); + + Assert.AreEqual (false, view.GetRequiresDataBinding ()); + + view.PagerTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "PagerTemplate was set"); + + view.EmptyDataTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "EmptyDataTemplate was set"); + + view.HeaderTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "HeaderTemplate was set"); + + view.FooterTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "FooterTemplate was set"); + + view.EditItemTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "EditItemTemplate was set"); + + view.InsertItemTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "InsertItemTemplate was set"); + + view.ItemTemplate = new CompiledTemplateBuilder (BuildTemplateMethod); + Assert.AreEqual (false, view.GetRequiresDataBinding (), "ItemTemplate was set"); + } + + public static void BuildTemplateMethod (Control c) { } + [Test] + public void ModifiedOuterTableStylePropertyName () + { + var fv = new Poker (); + string props; + + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.AreEqual (String.Empty, props, "#A1"); + + fv.BackImageUrl = "http://example.com/image.png"; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A2-1"); + Assert.AreEqual ("BackImageUrl", props, "#A2-2"); + + fv = new Poker (); + fv.CellPadding = 10; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A3-1"); + Assert.AreEqual ("CellPadding", props, "#A3-2"); + + fv = new Poker (); + fv.CellSpacing = 10; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A4-1"); + Assert.AreEqual ("CellSpacing", props, "#A4-2"); + + fv = new Poker (); + fv.GridLines = GridLines.Both; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A5-1"); + Assert.AreEqual ("GridLines", props, "#A5-2"); + + fv = new Poker (); + fv.HorizontalAlign = HorizontalAlign.Justify; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A6-1"); + Assert.AreEqual ("HorizontalAlign", props, "#A6-2"); + + fv = new Poker (); + fv.Font.Bold = true; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#A6-1"); + Assert.AreEqual ("Font", props, "#A6-2"); + + // Just one property is reported at a time + fv = new Poker (); + fv.BackImageUrl = "http://example.com/image.png"; + fv.CellPadding = 10; + props = fv.CallModifiedOuterTableStylePropertyName (); + Assert.IsNotNull (props, "#B1-1"); + Assert.AreEqual ("BackImageUrl", props, "#B1-2"); + } + } + + public class TestMyData + { + static IList str; + //str.(new int[] { 1, 2, 3, 4, 5, 6 }); + + static TestMyData () + { + InitData (); + } + + public static void InitData() + { + str = new List (); + for (int i=1;i<7;i++) + str.Add (i); + } + public static IList GetMyList() + { + return str; + } + + public static int UpdateList(int index, int value) + { + str[index] = value; + return str[index]; + } + + public static int InsertList(int value) + { + str.Add(value); + return value; + } + + public static void DeleteList(int value) + { + str.Remove(value); + } + + } + + public class MyTemplate : ITemplate + { + + Label l = new Label (); +#region ITemplate Members + + public void InstantiateIn (Control container) + { + container.Controls.Add (l); + + } + + public void SetDataItem (object value) + { + l.Text = value.ToString (); + } + +#endregion + } + +public class FormViewDataObject + { + + public static DataTable ds = CreateDataTable(); + + public static DataTable Select() + { + + return ds; + + } + + + + public static DataTable Delete(string ID, string FName, string LName) + { + + DataRow dr = ds.Rows.Find(ID); + + if (dr != null) + { + + ds.Rows.Remove(dr); + + } + + return ds; + + } + + + + public static DataTable Insert(string ID, string FName, string LName) + { + + DataRow dr = ds.NewRow(); + dr["ID"] = ID; + dr["FName"] = FName; + dr["LName"] = LName; + ds.Rows.Add(dr); + return ds; + } + + + + public static DataTable Update(string ID, string FName, string LName) + { + DataRow dr = ds.Rows.Find(ID); + if (dr == null) + { + Label lbl = new Label(); + lbl.Text = "ID doesn't exist "; + return ds; + } + dr["FName"] = FName; + dr["LName"] = LName; + return ds; + + } + + + + public static DataTable CreateDataTable() + { + + DataTable aTable = new DataTable("A"); + DataColumn dtCol; + DataRow dtRow; + + // Create ID column and add to the DataTable. + + dtCol = new DataColumn(); + dtCol.DataType = Type.GetType("System.Int32"); + dtCol.ColumnName = "ID"; + dtCol.AutoIncrement = true; + dtCol.Caption = "ID"; + dtCol.ReadOnly = true; + dtCol.Unique = true; + aTable.Columns.Add(dtCol); + + + + // Create Name column and add to the table + + dtCol = new DataColumn(); + dtCol.DataType = Type.GetType("System.String"); + dtCol.ColumnName = "FName"; + dtCol.AutoIncrement = false; + dtCol.Caption = "First Name"; + dtCol.ReadOnly = false; + dtCol.Unique = false; + aTable.Columns.Add(dtCol); + + + + // Create Last Name column and add to the table. + + dtCol = new DataColumn(); + dtCol.DataType = Type.GetType("System.String"); + dtCol.ColumnName = "LName"; + dtCol.AutoIncrement = false; + dtCol.Caption = "Last Name"; + dtCol.ReadOnly = false; + dtCol.Unique = false; + aTable.Columns.Add(dtCol); + + + + // Create three rows to the table + + dtRow = aTable.NewRow(); + dtRow["ID"] = 1001; + dtRow["FName"] = "Mahesh"; + dtRow["LName"] = "Chand"; + aTable.Rows.Add(dtRow); + + dtRow = aTable.NewRow(); + dtRow["ID"] = 1002; + dtRow["FName"] = "Melanie"; + dtRow["LName"] = "Talmadge"; + aTable.Rows.Add(dtRow); + + dtRow = aTable.NewRow(); + dtRow["ID"] = 1003; + dtRow["FName"] = "Vinay"; + dtRow["LName"] = "Bansal"; + aTable.Rows.Add(dtRow); + + aTable.PrimaryKey = new DataColumn[] { aTable.Columns["ID"] }; + return aTable; + + } + } +} + + diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs.REMOVED.git-id deleted file mode 100644 index 7d7876dd97..0000000000 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/FormViewTest.cs.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -b4d8d304db7540d11f79acbf97c5c27983983838 \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs.REMOVED.git-id index b16666e130..3f69945c6a 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs.REMOVED.git-id +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/GridViewTest.cs.REMOVED.git-id @@ -1 +1 @@ -2f38ba4b556ad9983b3585b4831ef907f227fc94 \ No newline at end of file +7561fd84425b70a803d0918521917d5d9deb3e8c \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/HyperLinkTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/HyperLinkTest.cs index af0ffcd739..cdfe04bfb9 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/HyperLinkTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/HyperLinkTest.cs @@ -81,11 +81,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void ImageUrlWithoutText () { -#if NET_4_0 string origHtml = "\"\""; -#else - string origHtml = ""; -#endif TestHyperLink hl = new TestHyperLink (); hl.ImageUrl = imageUrl; Assert.AreEqual (imageUrl, hl.ImageUrl, "ImageUrl"); @@ -101,11 +97,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void ImageUrlWithoutText_ToolTip () { -#if NET_4_0 string origHtml = "\"\""; -#else - string origHtml = ""; -#endif TestHyperLink hl = new TestHyperLink (); hl.ImageUrl = imageUrl; hl.ToolTip = "Some message"; @@ -136,11 +128,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void ImageUrl_NO_ResolveUrl () { -#if NET_4_0 string origHtml = "\"\""; -#else - string origHtml = ""; -#endif TestHyperLink hl = new TestHyperLink (); hl.ImageUrl = "~/ben.jpeg"; Assert.AreEqual ("~/ben.jpeg", hl.ImageUrl, "ImageUrl"); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageButtonTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageButtonTest.cs index 0cb462e762..f15a00fe4d 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageButtonTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageButtonTest.cs @@ -237,11 +237,7 @@ namespace MonoTests.System.Web.UI.WebControls [Test] public void Text () { -#if NET_4_0 string origHtml = ""; -#else - string origHtml = ""; -#endif PokerImageButton b = new PokerImageButton (); b.Text = "MyText"; string html = b.Render (); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageFieldTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageFieldTest.cs index 1f9e1bea4a..b413ce2f2e 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageFieldTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageFieldTest.cs @@ -299,11 +299,7 @@ namespace MonoTests.System.Web.UI.WebControls t.Invoker = new PageInvoker (pd); string htmlPage = t.Run (); -#if NET_4_0 string htmlOrigin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    Data
    \"Item:
    \"Item:
    \"Item:
    \"Item:
    \"Item:
    \r\n
    "; -#else - string htmlOrigin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    Data
    \"Item:
    \"Item:
    \"Item:
    \"Item:
    \"Item:
    \r\n
    "; -#endif string htmlControl = HtmlDiff.GetControlFromPageHtml (htmlPage); HtmlDiff.AssertAreEqual (htmlOrigin, htmlControl, "GetFormattedAlternateText"); } @@ -372,11 +368,7 @@ namespace MonoTests.System.Web.UI.WebControls pd.PreRender = _ConvertEmptyStringToNull; t.Invoker = new PageInvoker (pd); string htmlPage = t.Run (); -#if NET_4_0 string htmlOrigin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    DataField
     
     
     
     
     
    \r\n
    "; -#else - string htmlOrigin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    DataField
     
     
     
     
     
    \r\n
    "; -#endif string htmlControl = HtmlDiff.GetControlFromPageHtml (htmlPage); HtmlDiff.AssertAreEqual (htmlOrigin, htmlControl, "ConvertEmptyStringToNull"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageMapTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageMapTest.cs index 64863d73e7..ff078412d9 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageMapTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageMapTest.cs @@ -133,11 +133,7 @@ namespace MonoTests.System.Web.UI.WebControls public void ImageMap_Defaults_Render () { PokerImageMap imageMap = new PokerImageMap (); -#if NET_4_0 string originalHtml = ""; -#else - string originalHtml = ""; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderDefault"); } @@ -154,11 +150,7 @@ namespace MonoTests.System.Web.UI.WebControls CircleHotSpot circle = new CircleHotSpot (); circle.NavigateUrl = "NavigateURL"; imageMap.HotSpots.Add (circle); -#if NET_4_0 string originalHtml = "\r\n\t\"\"\r\n"; -#else - string originalHtml = "\r\n\t\"\"\r\n"; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderNavigateTextAssigned"); } @@ -180,11 +172,7 @@ namespace MonoTests.System.Web.UI.WebControls circle.X = 30; circle.Y = 40; imageMap.HotSpots.Add (circle); -#if NET_4_0 string originalHtml = "\r\n\t\"Circle\"\r\n"; -#else - string originalHtml = "\r\n\t\"Circle\"\r\n"; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderNavigateCircleTextAssigned"); } @@ -216,11 +204,7 @@ namespace MonoTests.System.Web.UI.WebControls poly.TabIndex = 2; poly.Coordinates = "10,20,30,40,50,60,100,200"; imageMap.HotSpots.Add (poly); -#if NET_4_0 string originalHtml = "\r\n\t\"Rectangle\"\"Polygon\"\r\n"; -#else - string originalHtml = "\r\n\t\"Rectangle\"\"Polygon\"\r\n"; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderNavigateShapesTextAssigned"); } @@ -235,11 +219,7 @@ namespace MonoTests.System.Web.UI.WebControls imageMap.HotSpotMode = HotSpotMode.Inactive; imageMap.Target = "Target"; imageMap.HotSpots.Add (new CircleHotSpot ()); -#if NET_4_0 string originalHtml = "\r\n\t\"\"\r\n"; -#else - string originalHtml = "\r\n\t\"\"\r\n"; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderInaciveTextAssigned"); } @@ -256,11 +236,7 @@ namespace MonoTests.System.Web.UI.WebControls CircleHotSpot circle = new CircleHotSpot (); circle.NavigateUrl = "NavigateURL"; imageMap.HotSpots.Add (circle); -#if NET_4_0 string originalHtml = "\r\n\t\"\"\r\n"; -#else - string originalHtml = "\r\n\t\"\"\r\n"; -#endif string renderedHtml = imageMap.Render (); HtmlDiff.AssertAreEqual (originalHtml, renderedHtml, "RenderDisabledTextAssigne"); } @@ -470,11 +446,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnLoad (myPageLoad)); #region orig -#if NET_4_0 string strTarget = "\r\n\t\"\"\"\"\"\"\r\n"; -#else - string strTarget = "\r\n\t\"\"\"\"\"\"\r\n"; -#endif #endregion string RenderedPageHtml = t.Run (); string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); @@ -494,11 +466,7 @@ namespace MonoTests.System.Web.UI.WebControls fr.Controls["__EVENTARGUMENT"].Value = "0"; t.Request = fr; #region orig -#if NET_4_0 string strTarget = "\r\n\t\"\"\"\"\"\"\r\n"; -#else - string strTarget = "\r\n\t\"\"\"\"\"\"\r\n"; -#endif #endregion string RenderedPageHtml = t.Run (); string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageTest.cs index 3bc92fa124..2afd9e1b6a 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ImageTest.cs @@ -167,11 +167,7 @@ namespace MonoTests.System.Web.UI.WebControls { img.Enabled = false; string html = img.Render (); -#if NET_4_0 Assert.IsTrue (html.IndexOf (" class=\"aspNetDisabled\"") > 0, "#"); -#else - Assert.IsTrue (html.IndexOf (" disabled=\"") > 0, "#"); -#endif } [Test] @@ -196,21 +192,12 @@ namespace MonoTests.System.Web.UI.WebControls { s = i.Render (); Assert.IsTrue (i.Render ().IndexOf (" alt=\"alt\"") > 0, "alt"); i.AlternateText = String.Empty; -#if NET_4_0 s = i.Render (); Assert.IsTrue (s.IndexOf (" class=\"aspNetDisabled\"") < 0, "enabled"); i.Enabled = false; s = i.Render (); Assert.IsTrue (s.IndexOf (" class=\"aspNetDisabled\"") > 0, "disabled"); i.Enabled = true; -#else - s = i.Render (); - Assert.IsTrue (i.Render ().IndexOf (" disabled=\"disabled\"") < 0, "enabled"); - i.Enabled = false; - s = i.Render (); - Assert.IsTrue (i.Render ().IndexOf (" disabled=\"disabled\"") > 0, "disabled"); - i.Enabled = true; -#endif // note: align is in mixed-case in 1.x so we lower everything to test i.ImageAlign = ImageAlign.AbsBottom; diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MasterPageTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MasterPageTest.cs index bb97516436..02fc853705 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MasterPageTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MasterPageTest.cs @@ -73,7 +73,6 @@ namespace MonoTests.System.Web.UI.WebControls [TestFixture] public class MasterPageTest { -#if NET_4_0 class MyTemplate : ITemplate { public const string MyText = "|MyTemplate.InstantiateIn called|"; @@ -93,7 +92,6 @@ namespace MonoTests.System.Web.UI.WebControls container.Controls.Add (new LiteralControl (MyText)); } } -#endif [TestFixtureSetUp] public void CopyTestResources () { @@ -215,7 +213,6 @@ namespace MonoTests.System.Web.UI.WebControls if (PageRenderHtml.IndexOf ("FromMasterMethod") < 0) Assert.Fail ("MasterType TypeName test failed"); } -#if NET_4_0 [Test] public void InstantiateInContentPlaceHolder () { @@ -295,7 +292,6 @@ namespace MonoTests.System.Web.UI.WebControls return false; } -#endif public static void _RenderDefault (Page p) { p.Form.Controls.Add(new LiteralControl("Page dynamic text")); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuItemBindingTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuItemBindingTest.cs index a9107f8585..7921e1e234 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuItemBindingTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuItemBindingTest.cs @@ -31,7 +31,6 @@ using System.Web.UI; using System.Web.UI.WebControls; using NUnit.Framework; -#if NET_4_0 namespace MonoTests.System.Web.UI.WebControls { [TestFixture] @@ -126,4 +125,3 @@ namespace MonoTests.System.Web.UI.WebControls } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs new file mode 100644 index 0000000000..868e447a27 --- /dev/null +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs @@ -0,0 +1,1786 @@ +// +// Tests for System.Web.UI.WebControls.MenuTest.cs +// +// Author: +// Yoni Klein (yonik@mainsoft.com) +// +// +// Copyright (C) 2005 Novell, Inc (http://www.novell.com) +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.IO; +using System.Drawing; +using System.Threading; +using MyWebControl = System.Web.UI.WebControls; +using System.Collections; +using MonoTests.SystemWeb.Framework; +using MonoTests.stand_alone.WebHarness; +using System.Text.RegularExpressions; +using System.Reflection; +using System.Xml; + +using MonoTests.Common; + +namespace MonoTests.System.Web.UI.WebControls +{ + class MenuTable : Menu + { + public MenuTable () + { + RenderingMode = MenuRenderingMode.Table; + } + } + + class PokerMenu : Menu + { + public PokerMenu () + { + TrackViewState(); + } + public StateBag StateBag + { + get { return base.ViewState; } + } + public HtmlTextWriterTag OnTagKey() + { + return TagKey; + } + public void DoOnDataBind(EventArgs e) + { + OnDataBinding(e); + } + public void DoOnDataBound (EventArgs e) + { + OnDataBound(e); + } + public void DoCreateChildControls () + { + CreateChildControls (); + } + public void DoEnsureDataBound () + { + EnsureDataBound (); + } + public void DoLoadViewState (object state) + { + LoadViewState (state); + } + public object DoSaveViewState () + { + return SaveViewState (); + } + public void DoLoadControlState (object state) + { + LoadControlState (state); + } + public object DoSaveControlState () + { + return SaveControlState (); + } + public void DoOnMenuItemClick (MenuEventArgs e) + { + OnMenuItemClick(e); + } + public void DoOnInit(EventArgs e) + { + OnInit(e); + } + public void DoMenuItemDataBound (MenuEventArgs e) + { + OnMenuItemDataBound (e); + } + public void DoOnPreRender (EventArgs e) + { + base.OnPreRender(e); + } + public bool DoOnBubbleEvent(EventArgs e) + { + return base.OnBubbleEvent(this,e); + } + } + + [Serializable] + [TestFixture] + public class MenuTest + { + + [TestFixtureSetUp] + public void SetUp () + { + WebTest.CopyResource (GetType (), "menuclass.aspx", "menuclass.aspx"); + WebTest.CopyResource (GetType (), "PostBackMenuTest.aspx", "PostBackMenuTest.aspx"); + } + + [Test] + public void Menu_DefaultProperties () + { + PokerMenu p = new PokerMenu (); + Assert.AreEqual ("Click",PokerMenu.MenuItemClickCommandName,"Staic_MenuItemClickCommandName"); + Assert.AreEqual (0,p.Controls.Count,"ControlsCollection"); + Assert.AreEqual (0,p.DataBindings.Count,"DataBindings"); + Assert.AreEqual (500,p.DisappearAfter,"DisappearAfter"); + Assert.AreEqual (string.Empty, p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl"); + Assert.IsTrue (p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage"); + Assert.AreEqual (0, p.DynamicHorizontalOffset, "DynamicHorizontalOffset"); + Assert.IsNotNull (p.DynamicHoverStyle, "DynamicHoverStyle"); + Assert.AreEqual ("", p.DynamicItemFormatString, "DynamicItemFormatString"); + Assert.IsNull (p.DynamicItemTemplate, "DynamicItemTemplate"); + Assert.IsNotNull (p.DynamicMenuItemStyle, "DynamicMenuItemStyle"); + Assert.IsNotNull (p.DynamicMenuStyle, "DynamicMenuStyle"); + Assert.AreEqual (string.Empty,p.DynamicPopOutImageUrl,"DynamicPopOutImageUrl"); + Assert.IsNotNull (p.DynamicSelectedStyle, "DynamicSelectedStyle"); + Assert.AreEqual (string.Empty, p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl"); + Assert.AreEqual (0, p.DynamicVerticalOffset, "DynamicVerticalOffset"); + Assert.AreEqual (0, p.Items.Count, "Items"); + Assert.AreEqual (false, p.ItemWrap, "ItemWrap"); + Assert.IsNotNull (p.LevelSelectedStyles, "LevelSelectedStyles"); + Assert.IsNotNull (p.LevelSubMenuStyles, "LevelSubMenuStyles"); + Assert.AreEqual (3, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels"); + Assert.AreEqual (Orientation.Vertical, p.Orientation, "Orientation"); + Assert.AreEqual ("/", p.PathSeparator.ToString(), "PathSeparator"); + Assert.AreEqual (string.Empty, p.ScrollDownImageUrl, "ScrollDownImageUrl"); + Assert.AreEqual (null, p.SelectedItem, "p.SelectedItem"); + Assert.AreEqual (string.Empty, p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl"); + Assert.AreEqual (1, p.StaticDisplayLevels, "StaticDisplayLevels"); + Assert.AreEqual (true, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage"); + Assert.IsNotNull (p.StaticHoverStyle, "StaticHoverStyle"); + Assert.AreEqual ("", p.StaticItemFormatString, "StaticItemFormatString"); + Assert.AreEqual (null, p.StaticItemTemplate, "StaticItemTemplate"); + Assert.IsNotNull (p.StaticMenuItemStyle, "StaticMenuItemStyle"); + Assert.IsNotNull (p.StaticMenuStyle, "StaticMenuStyle"); + Assert.AreEqual ("", p.StaticPopOutImageUrl, "StaticPopOutImageUrl"); + Assert.IsNotNull (p.StaticSelectedStyle, "StaticSelectedStyle"); + Assert.IsTrue (p.StaticSubMenuIndent.IsEmpty, "StaticSubMenuIndent"); + Assert.AreEqual ("", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl"); + Assert.AreEqual ("", p.Target, "Target"); + Assert.IsNotNull (p.OnTagKey (), "TagKey"); + + } + + [Test] + public void Menu_DefaultProperties_2 () + { + PokerMenu p = new PokerMenu (); + Assert.AreEqual ("Skip Navigation Links", p.SkipLinkText, "SkipLinkText"); + Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue"); + Assert.AreEqual ("Scroll up", p.ScrollUpText, "ScrollUpText"); + Assert.AreEqual ("Expand {0}", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString"); //not implemented + Assert.AreEqual ("Scroll down", p.ScrollDownText, "ScrollDownText"); + Assert.AreEqual ("Expand {0}", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString"); //not implemented + } + + + + [Test] + public void Menu_ChangeDefaultProperties () + { + PokerMenu p = new PokerMenu (); + Button B = new Button (); + p.Controls.Add (B); + Assert.AreEqual (1,p.Controls.Count, "ControlsCollection"); + + MenuItemBinding M = new MenuItemBinding (); + M.DataMember = "test"; + M.Depth = 0; + M.TextField = "title"; + M.NavigateUrl="url"; + Object C = p.DataBindings; + Assert.AreEqual (0, p.DataBindings.Count, "DataBindings#1"); + ((MenuItemBindingCollection)C).Add (M); + Assert.AreEqual (1,p.DataBindings.Count,"DataBindings#2"); + + p.DisappearAfter = 100; + Assert.AreEqual (100, p.DisappearAfter, "DisappearAfter"); + + p.DynamicBottomSeparatorImageUrl = "test.aspx"; + Assert.AreEqual ("test.aspx", p.DynamicBottomSeparatorImageUrl, "DynamicBottomSeparatorImageUrl"); + + p.DynamicEnableDefaultPopOutImage = false; + Assert.AreEqual (false,p.DynamicEnableDefaultPopOutImage, "DynamicEnableDefaultPopOutImage"); + + p.DynamicHorizontalOffset = 10; + Assert.AreEqual (10, p.DynamicHorizontalOffset, "DynamicHorizontalOffset"); + + p.DynamicHoverStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red ,p.DynamicHoverStyle.BackColor, "DynamicHoverStyle"); + + p.DynamicItemFormatString = "Mytest"; + Assert.AreEqual ("Mytest", p.DynamicItemFormatString, "DynamicItemFormatString"); + + MyWebControl.Image myImage = new MyWebControl.Image (); + myImage.ImageUrl = "myimage.jpg"; + ImageTemplate Template = new ImageTemplate (); + Template.MyImage = myImage; + // end create template image + p.DynamicItemTemplate = Template; + Assert.IsNotNull (p.DynamicItemTemplate, "RootNodeTemplate"); + Assert.AreEqual (typeof (ImageTemplate), p.DynamicItemTemplate.GetType (), "RootNodeTemplate#1"); + + p.DynamicMenuItemStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red, p.DynamicMenuItemStyle.BackColor, "DynamicMenuItemStyle"); + + p.DynamicMenuStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red,p.DynamicMenuStyle.BackColor, "DynamicMenuStyle"); + + p.DynamicPopOutImageUrl = "test"; + Assert.AreEqual ("test", p.DynamicPopOutImageUrl, "DynamicPopOutImageUrl"); + + p.DynamicSelectedStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red,p.DynamicSelectedStyle.BackColor, "DynamicSelectedStyle"); + + p.DynamicTopSeparatorImageUrl = "test"; + Assert.AreEqual ("test", p.DynamicTopSeparatorImageUrl, "DynamicTopSeparatorImageUrl"); + + p.DynamicVerticalOffset = 10; + Assert.AreEqual (10, p.DynamicVerticalOffset, "DynamicVerticalOffset"); + + MenuItem I = new MenuItem (); + I.NavigateUrl = "default.aspx"; + I.Text = "MyText"; + I.ToolTip = "Test"; + p.Items.Add (I); + Assert.AreEqual (1, p.Items.Count, "Items"); + + p.ItemWrap = true; + Assert.AreEqual (true, p.ItemWrap, "ItemWrap"); + + MenuItemStyle S = new MenuItemStyle (); + S.BackColor = Color.Red; + p.LevelSelectedStyles.Add (S); + Assert.AreEqual (1,p.LevelSelectedStyles.Count , "LevelSelectedStyles#1"); + Assert.AreEqual (true, p.LevelSelectedStyles.Contains (S), "LevelSelectedStyles#2"); + + SubMenuStyle SM = new SubMenuStyle (); + SM.BackColor = Color.Red; + p.LevelSubMenuStyles.Add (SM); + Assert.AreEqual(1, p.LevelSubMenuStyles.Count, "LevelSubMenuStyles#1"); + Assert.AreEqual (true, p.LevelSubMenuStyles.Contains (SM), "LevelSubMenuStyles#2"); + + p.MaximumDynamicDisplayLevels = 5; + Assert.AreEqual (5, p.MaximumDynamicDisplayLevels, "MaximumDynamicDisplayLevels"); + + p.Orientation = Orientation.Horizontal; + Assert.AreEqual (Orientation.Horizontal, p.Orientation, "Orientation"); + + p.PathSeparator = 'A'; + Assert.AreEqual ('A', p.PathSeparator, "PathSeparator"); + + p.ScrollDownImageUrl = "test"; + Assert.AreEqual ("test", p.ScrollDownImageUrl, "ScrollDownImageUrl"); + + p.ScrollDownText = "test"; + Assert.AreEqual ("test", p.ScrollDownText, "ScrollDownText"); + + // This properties will be checked in events part of tests + // Assert.AreEqual (0, p.SelectedItem, "p.SelectedItem"); + // Assert.AreEqual (string.Empty, p.SelectedValue, "SelectedValue"); + + p.SkipLinkText = "test"; + Assert.AreEqual ("test", p.SkipLinkText, "SkipLinkText"); + + p.StaticBottomSeparatorImageUrl = "test"; + Assert.AreEqual ("test", p.StaticBottomSeparatorImageUrl, "StaticBottomSeparatorImageUrl"); + + p.StaticDisplayLevels = 2; + Assert.AreEqual (2, p.StaticDisplayLevels, "StaticDisplayLevels"); + + p.StaticEnableDefaultPopOutImage = false; + Assert.AreEqual (false, p.StaticEnableDefaultPopOutImage, "StaticEnableDefaultPopOutImage"); + + p.StaticHoverStyle.BackColor = Color.Red; + Assert.AreEqual(Color.Red, p.StaticHoverStyle.BackColor, "StaticHoverStyle"); + + p.StaticItemFormatString = "test"; + Assert.AreEqual ("test", p.StaticItemFormatString, "StaticItemFormatString"); + + + p.StaticItemTemplate = Template; + Assert.IsNotNull (p.StaticItemTemplate, "StaticItemTemplate"); + + p.StaticMenuItemStyle.BackColor = Color.Red; + Assert.AreEqual(Color.Red,p.StaticMenuItemStyle.BackColor, "StaticMenuItemStyle"); + + p.StaticMenuStyle.BackColor = Color.Red; + Assert.AreEqual (Color.Red,p.StaticMenuStyle.BackColor, "StaticMenuStyle"); + + p.StaticPopOutImageUrl = "test"; + Assert.AreEqual ("test", p.StaticPopOutImageUrl, "StaticPopOutImageUrl"); + + p.StaticSelectedStyle.BackColor = Color.Red; + Assert.AreEqual(Color.Red,p.StaticSelectedStyle.BackColor, "StaticSelectedStyle"); + + p.StaticSubMenuIndent = 20; + Assert.AreEqual (Unit.Pixel (20), p.StaticSubMenuIndent, "StaticSubMenuIndent"); + + p.StaticTopSeparatorImageUrl = "test"; + Assert.AreEqual ("test", p.StaticTopSeparatorImageUrl, "StaticTopSeparatorImageUrl"); + + p.Target = "test"; + Assert.AreEqual ("test", p.Target, "Target"); + } + + [Test] + public void Menu_ChangeDefaultProperties_2 () + { + PokerMenu p = new PokerMenu (); + p.ScrollUpText = "test"; + Assert.AreEqual ("test", p.ScrollUpText, "ScrollUpText"); + p.DynamicPopOutImageTextFormatString = "test"; + Assert.AreEqual ("test", p.DynamicPopOutImageTextFormatString, "DynamicPopOutImageTextFormatString"); + p.StaticPopOutImageTextFormatString = "test"; + Assert.AreEqual ("test", p.StaticPopOutImageTextFormatString, "StaticPopOutImageTextFormatString"); + } + + [Test] + public void Menu_ControlState() + { + PokerMenu p = new PokerMenu (); + MenuItem I1 = new MenuItem (); + MenuItem I2 = new MenuItem (); + p.Items.Add (I1); + p.Items.Add (I2); + MenuEventArgs e = new MenuEventArgs (I1); + p.DoOnMenuItemClick (e); + object state = p.DoSaveControlState (); + p.DoLoadControlState (state); + e = new MenuEventArgs (I2); + p.DoOnMenuItemClick (e); + Console.WriteLine(); + } + + [Test] + public void Menu_FindItem () + { + PokerMenu p = new PokerMenu (); + MenuItem I = new MenuItem (); + string path = I.ValuePath; + p.Items.Add (I); + MenuItem V = new MenuItem (); + I.ChildItems.Add (V); + MenuItem copy = p.FindItem (path); + Assert.AreEqual (I, copy, "FindItem#1"); + path = V.ValuePath; + Assert.AreEqual (V, p.FindItem (path), "FindItem#2"); + } + + + // Set & Get DesignModeState dosn't tested + // Can't test on Page Load event + + + [Test] + [Category ("NunitWeb")] + public void Menu_RenderBeginTag () + { + new WebTest (PageInvoker.CreateOnLoad (_BeginTagRender)).Run (); + } + + public static void _BeginTagRender(Page p) + { + PokerMenu pm = new PokerMenu (); + pm.RenderingCompatibility = new Version (2, 0); + p.Form.Controls.Add (pm); + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + pm.RenderBeginTag (tw); + string RenderedControlHtml = sw.ToString(); + string OriginControlHtml = "\"Skip\r\n"; + HtmlDiff.AssertAreEqual(OriginControlHtml,RenderedControlHtml,"RenderBeginTag"); + } + [Test] + [Category ("NunitWeb")] + public void Menu_RenderBeginTag_List () + { + new WebTest (PageInvoker.CreateOnLoad (_BeginTagRender_List)).Run (); + } + + public static void _BeginTagRender_List (Page p) + { + PokerMenu pm = new PokerMenu (); + pm.RenderingCompatibility = new Version (4, 0); + pm.RenderingMode = MenuRenderingMode.List; + + p.Form.Controls.Add (pm); + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + pm.RenderBeginTag (tw); + string RenderedControlHtml = sw.ToString (); + string OriginControlHtml = "\"Skip
    \r\n"; + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderBeginTag_List"); + } + [Test] + [Category ("NunitWeb")] + public void Menu_RenderEndTag () + { + new WebTest (PageInvoker.CreateOnLoad (_EndTagRender)).Run (); + } + public static void _EndTagRender (Page p) + { + PokerMenu pm = new PokerMenu (); + pm.RenderingCompatibility = new Version (2, 0); + p.Form.Controls.Add (pm); + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + pm.RenderBeginTag (tw); + pm.RenderEndTag (tw); + string RenderedControlHtml = sw.ToString (); + string OriginControlHtml = "\"Skip
    \r\n\r\n
    "; + HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderEndTag"); + } + [Test] + [Category ("NunitWeb")] + public void Menu_RenderEndTag_List () + { + new WebTest (PageInvoker.CreateOnLoad (_EndTagRender_List)).Run (); + } + public static void _EndTagRender_List (Page p) + { + PokerMenu pm = new PokerMenu (); + pm.RenderingCompatibility = new Version (4, 0); + pm.RenderingMode = MenuRenderingMode.List; + + p.Form.Controls.Add (pm); + StringWriter sw = new StringWriter (); + HtmlTextWriter tw = new HtmlTextWriter (sw); + pm.RenderBeginTag (tw); + pm.RenderEndTag (tw); + string RenderedControlHtml = sw.ToString (); + string OriginControlHtml = "\"Skip
    \r\n\r\n
    "; + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "RenderEndTag"); + } + [Test] + public void Menu_DataBind () { + Page p = new Page (); + Menu m = CreateMenu (); + m.DataBinding += new EventHandler (m_DataBinding); + m.DataBound += new EventHandler (m_DataBound); + p.Controls.Add (m); + + ResetTemplateBoundFlags (); + m.DataBind (); + } + + static void m_DataBinding (object sender, EventArgs e) { + Assert.AreEqual (true, _StaticTemplateCreated, "StaticTemplateCreated"); + Assert.AreEqual (true, _DynamicTemplateCreated, "DynamicTemplateCreated"); + } + + static void m_DataBound (object sender, EventArgs e) { + Assert.AreEqual (true, _StaticTemplateBound, "StaticTemplateBound"); + Assert.AreEqual (true, _DynamicTemplateBound, "DynamicTemplateBound"); + } + + private static void ResetTemplateBoundFlags() { + _StaticTemplateBound = false; + _DynamicTemplateBound = false; + _StaticTemplateCreated = false; + _DynamicTemplateCreated = false; + } + + static Menu CreateMenu () { + Menu m = new MenuTable (); + MenuItem rootItem = new MenuItem ("RootItem-Text", "RootItem-Value"); + m.Items.Add (rootItem); + rootItem.ChildItems.Add (new MenuItem ("Node1-Text", "Node1-Value")); + rootItem.ChildItems.Add (new MenuItem ("Node2-Text", "Node2-Value")); + m.StaticItemTemplate = new CompiledTemplateBuilder (_StaticItemTemplate); + m.DynamicItemTemplate = new CompiledTemplateBuilder (_DynamicItemTemplate); + return m; + } + + [Test] + [Category ("NunitWeb")] + public void Menu_DataBindByDataSourceID () { + PageDelegates pd = new PageDelegates (); + pd.Init = Menu_DataBindByDataSourceID_PageInit; + pd.PreRenderComplete = Menu_DataBindByDataSourceID_PagePreRenderComplete; + PageInvoker pi = new PageInvoker (pd); + new WebTest (pi).Run (); + } + + public static void Menu_DataBindByDataSourceID_PageInit (Page p) { + XmlDataSource xmlDs = new XmlDataSource (); + xmlDs.ID = "XmlDataSource"; + xmlDs.Data = ""; + p.Form.Controls.Add (xmlDs); + + Menu m = CreateMenu (); + m.RenderingMode = MenuRenderingMode.Table; + m.DataSourceID = "XmlDataSource"; + m.MenuItemDataBound += new MenuEventHandler (m_MenuItemDataBound); + p.Form.Controls.Add (m); + + ResetTemplateBoundFlags (); + _MenuItemBoundCount = 0; + _MenuItemCreatedCount = 0; + } + + public static void m_MenuItemDataBound (object sender, MenuEventArgs e) { + _MenuItemBoundCount++; + } + + [Test] + [Category ("NunitWeb")] + public void Menu_Templates () { + PageDelegates pd = new PageDelegates (); + pd.Init = Menu_Templates_PageInit; + pd.PreRenderComplete = Menu_Templates_PagePreRenderComplete; + PageInvoker pi = new PageInvoker (pd); + new WebTest (pi).Run (); + } + + public static void Menu_Templates_PageInit (Page p) { + Menu m = CreateMenu (); + p.Form.Controls.Add (m); + + ResetTemplateBoundFlags (); + } + + static bool _StaticTemplateBound; + static bool _DynamicTemplateBound; + + static bool _StaticTemplateCreated; + static bool _DynamicTemplateCreated; + + static int _MenuItemBoundCount; + static int _MenuItemCreatedCount; + + private static void CheckTemplateBoundFlags () { + Assert.AreEqual (true, _StaticTemplateCreated, "StaticTemplateCreated"); + Assert.AreEqual (true, _DynamicTemplateCreated, "DynamicTemplateCreated"); + Assert.AreEqual (true, _StaticTemplateBound, "StaticTemplateBound"); + Assert.AreEqual (true, _DynamicTemplateBound, "DynamicTemplateBound"); + } + + public static void Menu_Templates_PagePreRenderComplete (Page p) { + CheckTemplateBoundFlags (); + } + + public static void Menu_DataBindByDataSourceID_PagePreRenderComplete (Page p) { + CheckTemplateBoundFlags (); + Assert.AreEqual (6, _MenuItemBoundCount, "MenuItemBoundCount"); + Assert.AreEqual (6, _MenuItemCreatedCount, "MenuItemBoundCount"); + } + + private static void _StaticItemTemplate (Control container) { + _StaticTemplateCreated = true; + _MenuItemCreatedCount++; + Literal l = new Literal (); + container.Controls.Add (l); + container.DataBinding += new EventHandler (StaticTemplate_DataBinding); + } + + static void StaticTemplate_DataBinding (object sender, EventArgs e) { + _StaticTemplateBound = true; + } + + private static void _DynamicItemTemplate (Control container) { + _DynamicTemplateCreated = true; + _MenuItemCreatedCount++; + Literal l = new Literal (); + container.Controls.Add (l); + container.DataBinding += new EventHandler (DynamicTemplate_DataBinding); + } + + static void DynamicTemplate_DataBinding (object sender, EventArgs e) { + _DynamicTemplateBound = true; + } + + [Test] + public void Menu_ViewState() + { + PokerMenu b = new PokerMenu (); + PokerMenu copy = new PokerMenu (); + b.ToolTip = "mytest1"; + b.Target = "mytest2"; + b.BackColor = Color.Red; + b.BorderColor = Color.Red; + b.BorderStyle = BorderStyle.Dotted; + b.BorderWidth = 1; + b.ForeColor = Color.Red; + b.Height = 100; + b.MaximumDynamicDisplayLevels = 2; + b.Orientation = Orientation.Vertical; + b.PathSeparator = '-'; + b.ScrollDownImageUrl = "test"; + b.ScrollDownText = "test"; + b.ScrollUpImageUrl = "test"; + b.ScrollUpText = "test"; + b.SkipLinkText = "test"; + b.Visible = false; + b.Width = 100; + b.TabIndex = 1; + + object state = b.DoSaveViewState (); + copy.DoLoadViewState (state); + Assert.AreEqual ("mytest1", copy.ToolTip, "ViewState#1"); + Assert.AreEqual ("mytest2", copy.Target, "ViewState#2"); + Assert.AreEqual (Color.Red, copy.BackColor, "ViewState#3"); + Assert.AreEqual (Color.Red, copy.BorderColor , "ViewState#4"); + Assert.AreEqual (BorderStyle.Dotted, copy.BorderStyle, "ViewState#5"); + Assert.AreEqual (Unit.Pixel(1), copy.BorderWidth, "ViewState#6"); + + Assert.AreEqual (Color.Red, copy.ForeColor, "ViewState#8"); + Assert.AreEqual (Unit.Pixel(100), copy.Height, "ViewState#9"); + Assert.AreEqual (2, copy.MaximumDynamicDisplayLevels, "ViewState#10"); + Assert.AreEqual (Orientation.Vertical, copy.Orientation, "ViewState#11"); + Assert.AreEqual ('-', copy.PathSeparator, "ViewState#12"); + Assert.AreEqual ("test", copy.ScrollDownImageUrl, "ViewState#13"); + Assert.AreEqual ("test", copy.ScrollDownText, "ViewState#14"); + Assert.AreEqual ("test", copy.ScrollUpImageUrl, "ViewState#15"); + Assert.AreEqual ("test", copy.ScrollUpText, "ViewState#16"); + Assert.AreEqual ("test", copy.SkipLinkText, "ViewState#17"); + Assert.AreEqual (1, copy.TabIndex, "ViewState#18"); + Assert.AreEqual (false, copy.Visible, "ViewState#19"); + Assert.AreEqual (Unit.Pixel (100), copy.Width, "ViewState#20"); + + + } + + [Test] + public void Menu_ViewStateNotWorking() + { + PokerMenu b = new PokerMenu (); + PokerMenu copy = new PokerMenu (); + b.Font.Size = 10; + object state = b.DoSaveViewState (); + copy.DoLoadViewState (state); + Assert.AreEqual ("10pt", copy.Font.Size.ToString() , "ViewState#7"); + } + + [Test] + public void Menu_ViewStateItems () { + PokerMenu b = new PokerMenu (); + MenuItem R = new MenuItem ("root", "value-root"); + MenuItem N1 = new MenuItem ("node1", "value-node1"); + MenuItem N2 = new MenuItem ("node2", "value-node2"); + R.ChildItems.Add (N1); + R.ChildItems.Add (N2); + b.Items.Add (R); + PokerMenu copy = new PokerMenu (); + object state = b.DoSaveViewState (); + copy.DoLoadViewState (state); + Assert.AreEqual (1, copy.Items.Count, "ViewStateItems#1"); + Assert.AreEqual (2, copy.Items [0].ChildItems.Count, "ViewStateItems#2"); + Assert.AreEqual (0, copy.Items [0].ChildItems [0].ChildItems.Count, "ViewStateItems#3"); + Assert.AreEqual ("node1", copy.Items [0].ChildItems [0].Text, "ViewStateItems#4"); + Assert.AreEqual ("value-node1", copy.Items [0].ChildItems [0].Value, "ViewStateItems#5"); + Assert.AreEqual (false, copy.Items [0].ChildItems [0].DataBound, "ViewStateItems#6"); + Assert.AreEqual ("", copy.Items [0].ChildItems [0].DataPath, "ViewStateItems#7"); + } + + + [Test] + public void Menu_ViewStateDataBoundItems () { + PokerMenu b = new PokerMenu (); + SetDataBindings (b); + b.DataSource = CreateXmlDataSource (); + b.DataBind (); + PokerMenu copy = new PokerMenu (); + object state = b.DoSaveViewState (); + copy.DoLoadViewState (state); + CheckMenuItems (copy); + } + + private static void CheckMenuItems (Menu m) { + Assert.AreEqual (1, m.Items.Count, "CheckMenuItems#1"); + Assert.AreEqual (10, m.Items [0].ChildItems.Count, "CheckMenuItems#2"); + Assert.AreEqual (0, m.Items [0].ChildItems [0].ChildItems.Count, "CheckMenuItems#3"); + Assert.AreEqual (true, m.Items [0].ChildItems [0].DataBound, "CheckMenuItems#4"); + Assert.AreEqual ("/*[position()=1]/*[position()=1]", m.Items [0].ChildItems [0].DataPath, "CheckMenuItems#5"); + + Assert.AreEqual (false, m.Items [0].Enabled, "CheckMenuItems_Enabled#1"); + Assert.AreEqual (true, m.Items [0].ChildItems [0].Enabled, "CheckMenuItems_Enabled#2"); + Assert.AreEqual (false, m.Items [0].ChildItems [1].Enabled, "CheckMenuItems_Enabled#3"); + Assert.AreEqual (false, m.Items [0].ChildItems [2].Enabled, "CheckMenuItems_Enabled#4"); + Assert.AreEqual (true, m.Items [0].ChildItems [2].ChildItems [0].Enabled, "CheckMenuItems_Enabled#5"); + + Assert.AreEqual ("img#root", m.Items [0].ImageUrl, "CheckMenuItems_ImageUrl#1"); + Assert.AreEqual ("img#1", m.Items [0].ChildItems [0].ImageUrl, "CheckMenuItems_ImageUrl#2"); + Assert.AreEqual ("img#2", m.Items [0].ChildItems [1].ImageUrl, "CheckMenuItems_ImageUrl#3"); + Assert.AreEqual ("img#default", m.Items [0].ChildItems [2].ImageUrl, "CheckMenuItems_ImageUrl#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].ImageUrl, "CheckMenuItems_ImageUrl#5"); + + Assert.AreEqual ("url#root", m.Items [0].NavigateUrl, "CheckMenuItems_NavigateUrl#1"); + Assert.AreEqual ("url#1", m.Items [0].ChildItems [0].NavigateUrl, "CheckMenuItems_NavigateUrl#2"); + Assert.AreEqual ("url#2", m.Items [0].ChildItems [1].NavigateUrl, "CheckMenuItems_NavigateUrl#3"); + Assert.AreEqual ("url#default", m.Items [0].ChildItems [2].NavigateUrl, "CheckMenuItems_NavigateUrl#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].NavigateUrl, "CheckMenuItems_NavigateUrl#5"); + + Assert.AreEqual ("popoutimg#root", m.Items [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#1"); + Assert.AreEqual ("popoutimg#1", m.Items [0].ChildItems [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#2"); + Assert.AreEqual ("popoutimg#2", m.Items [0].ChildItems [1].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#3"); + Assert.AreEqual ("popoutimg#default", m.Items [0].ChildItems [2].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].PopOutImageUrl, "CheckMenuItems_PopOutImageUrl#5"); + + Assert.AreEqual (false, m.Items [0].Selectable, "CheckMenuItems_Selectable#1"); + Assert.AreEqual (true, m.Items [0].ChildItems [0].Selectable, "CheckMenuItems_Selectable#2"); + Assert.AreEqual (false, m.Items [0].ChildItems [1].Selectable, "CheckMenuItems_Selectable#3"); + Assert.AreEqual (false, m.Items [0].ChildItems [2].Selectable, "CheckMenuItems_Selectable#4"); + Assert.AreEqual (true, m.Items [0].ChildItems [2].ChildItems [0].Selectable, "CheckMenuItems_Selectable#5"); + + Assert.AreEqual ("separatorimg#root", m.Items [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#1"); + Assert.AreEqual ("separatorimg#1", m.Items [0].ChildItems [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#2"); + Assert.AreEqual ("separatorimg#2", m.Items [0].ChildItems [1].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#3"); + Assert.AreEqual ("separatorimg#default", m.Items [0].ChildItems [2].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].SeparatorImageUrl, "CheckMenuItems_SeparatorImageUrl#5"); + + Assert.AreEqual ("target#root", m.Items [0].Target, "CheckMenuItems_Target#1"); + Assert.AreEqual ("target#1", m.Items [0].ChildItems [0].Target, "CheckMenuItems_Target#2"); + Assert.AreEqual ("target#2", m.Items [0].ChildItems [1].Target, "CheckMenuItems_Target#3"); + Assert.AreEqual ("target#default", m.Items [0].ChildItems [2].Target, "CheckMenuItems_Target#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].Target, "CheckMenuItems_Target#5"); + + Assert.AreEqual ("text#root", m.Items [0].Text, "CheckMenuItems_Text#1"); + Assert.AreEqual ("text#1", m.Items [0].ChildItems [0].Text, "CheckMenuItems_Text#2"); + Assert.AreEqual ("text#2", m.Items [0].ChildItems [1].Text, "CheckMenuItems_Text#3"); + Assert.AreEqual ("text#", m.Items [0].ChildItems [2].Text, "CheckMenuItems_Text#4"); + Assert.AreEqual ("subnode", m.Items [0].ChildItems [2].ChildItems [0].Text, "CheckMenuItems_Text#5"); + + Assert.AreEqual ("tooltip#root", m.Items [0].ToolTip, "CheckMenuItems_ToolTip#1"); + Assert.AreEqual ("tooltip#1", m.Items [0].ChildItems [0].ToolTip, "CheckMenuItems_ToolTip#2"); + Assert.AreEqual ("tooltip#2", m.Items [0].ChildItems [1].ToolTip, "CheckMenuItems_ToolTip#3"); + Assert.AreEqual ("tooltip#default", m.Items [0].ChildItems [2].ToolTip, "CheckMenuItems_ToolTip#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [2].ChildItems [0].ToolTip, "CheckMenuItems_ToolTip#5"); + + Assert.AreEqual ("value#root", m.Items [0].Value, "CheckMenuItems_Value#1"); + Assert.AreEqual ("value#1", m.Items [0].ChildItems [0].Value, "CheckMenuItems_Value#2"); + Assert.AreEqual ("value#2", m.Items [0].ChildItems [1].Value, "CheckMenuItems_Value#3"); + Assert.AreEqual ("value#default", m.Items [0].ChildItems [2].Value, "CheckMenuItems_Value#4"); + Assert.AreEqual ("subnode", m.Items [0].ChildItems [2].ChildItems [0].Value, "CheckMenuItems_Value#5"); + + Assert.AreEqual ("text#extra1", m.Items [0].ChildItems [3].Text, "CheckMenuItems_Extra1#1"); + Assert.AreEqual ("text#extra1", m.Items [0].ChildItems [3].Value, "CheckMenuItems_Extra1#2"); + + Assert.AreEqual ("value#extra2", m.Items [0].ChildItems [4].Text, "CheckMenuItems_Extra2#1"); + Assert.AreEqual ("value#extra2", m.Items [0].ChildItems [4].Value, "CheckMenuItems_Extra2#2"); + + Assert.AreEqual ("text#extra3", m.Items [0].ChildItems [5].Text, "CheckMenuItems_Extra3#1"); + Assert.AreEqual ("", m.Items [0].ChildItems [5].Value, "CheckMenuItems_Extra3#2"); + Assert.AreEqual ("", m.Items [0].ChildItems [6].Text, "CheckMenuItems_Extra3#3"); + Assert.AreEqual ("value#extra3", m.Items [0].ChildItems [6].Value, "CheckMenuItems_Extra3#4"); + Assert.AreEqual ("", m.Items [0].ChildItems [7].Text, "CheckMenuItems_Extra3#5"); + Assert.AreEqual ("", m.Items [0].ChildItems [7].Value, "CheckMenuItems_Extra3#6"); + + Assert.AreEqual ("text#extra4", m.Items [0].ChildItems [8].Text, "CheckMenuItems_Extra4#1"); + Assert.AreEqual ("text#default", m.Items [0].ChildItems [8].Value, "CheckMenuItems_Extra4#2"); + + Assert.AreEqual ("value#default", m.Items [0].ChildItems [9].Text, "CheckMenuItems_Extra5#1"); + Assert.AreEqual ("value#extra5", m.Items [0].ChildItems [9].Value, "CheckMenuItems_Extra5#2"); + } + + void SetDataBindings (Menu menu) { + MenuItemBinding b = new MenuItemBinding (); + b.DataMember = "node"; + b.EnabledField = "enabled"; + b.Enabled = false; + b.ImageUrlField = "img"; + b.ImageUrl = "img#default"; + b.NavigateUrlField = "url"; + b.NavigateUrl = "url#default"; + b.PopOutImageUrlField = "popoutimg"; + b.PopOutImageUrl = "popoutimg#default"; + b.SelectableField = "selectable"; + b.Selectable = false; + b.SeparatorImageUrlField = "separatorimg"; + b.SeparatorImageUrl = "separatorimg#default"; + b.TargetField = "target"; + b.Target = "target#default"; + b.FormatString = "text#{0}"; + b.TextField = "text"; + b.Text = "text#default"; + b.ToolTipField = "tooltip"; + b.ToolTip = "tooltip#default"; + b.ValueField = "value"; + b.Value = "value#default"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "root"; + b.Enabled = false; + b.ImageUrl = "img#root"; + b.NavigateUrl = "url#root"; + b.PopOutImageUrl = "popoutimg#root"; + b.Selectable = false; + b.SeparatorImageUrl = "separatorimg#root"; + b.Target = "target#root"; + b.Text = "text#root"; + b.ToolTip = "tooltip#root"; + b.Value = "value#root"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "extra1"; + b.Text = "text#extra1"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "extra2"; + b.Value = "value#extra2"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "extra3"; + b.TextField = "text"; + b.ValueField = "value"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "extra4"; + b.TextField = "text"; + b.Text = "text#default"; + b.ValueField = "value"; + menu.DataBindings.Add (b); + + b = new MenuItemBinding (); + b.DataMember = "extra5"; + b.TextField = "text"; + b.Value = "value#default"; + b.ValueField = "value"; + menu.DataBindings.Add (b); + } + + XmlDataSource CreateXmlDataSource () { + XmlDataSource xmlDs = new XmlDataSource (); + xmlDs.ID = "XmlDataSource"; + xmlDs.Data = ""+ + "" + + "" + + "" + + "" + + ""+ + ""+ + "" + + "" + + "" + + "" + + "" + + ""; + return xmlDs; + } + + [Test] + public void Menu_DataBindings () { + Menu m = new MenuTable (); + SetDataBindings (m); + m.DataSource = CreateXmlDataSource (); + m.DataBind (); + CheckMenuItems (m); + } + + // Rendering Menu controll with some possible options, styles and items + + + [Test] + [Category ("NunitWeb")] + [Ignore ("NUNIT 2.4 issue - temporarily disabled")] + public void Menu_DefaultRender () + { + string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (_DefaultRender)).Run (); + string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + string OriginControlHtml = ""; + HtmlDiff.AssertAreEqual(OriginControlHtml, RenderedControlHtml,"RenderDefault"); + } + + // All this methods are delegates for running tests in host assembly. + + public static void _DefaultRender (Page p) + { + LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG); + LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG); + Menu menu = new MenuTable (); + p.Form.Controls.Add (lcb); + p.Form.Controls.Add (menu); + p.Form.Controls.Add (lce); + } + + [Test] + [Category ("NunitWeb")] + public void Menu_RenderStaticItems () { + string RenderedPageHtml, RenderedControlHtml, OriginControlHtml; + #region OriginControlHtml + OriginControlHtml = "\"Skip\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    one-black
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    two-black-1
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-1
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-1
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-2
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-2
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-3
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-4
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    two-black-2
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-3
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-5
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-6
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-4
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-7
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-8
    "; + #endregion + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Vertical)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Vertical"); +#if !DOT_NET + // Throws NREX on .NET 4.0, most probably because the adapter's Control is null + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Vertical)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithDefaultAdapter_Vertical"); +#endif + #region OriginControlHtml + OriginControlHtml = "\"Skip\r\n\t\r\n\t\t\r\n\t\r\n
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    one-black
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    two-black-1
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-1
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-1
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-2
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-2
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-3
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-4
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    two-black-2
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-3
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-5
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-6
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    three-black-4
    \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-7
    \r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
    four-black-8
    "; + #endregion + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Horizontal)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Horizontal"); +#if !DOT_NET + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Horizontal)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithBaseAdapter_Horizontal"); +#endif + } + [Test] + [Category ("NunitWeb")] + [Ignore ("Disabled temporarily")] + public void Menu_RenderStaticItems_List () + { + string RenderedPageHtml, RenderedControlHtml, OriginControlHtml; + #region OriginControlHtml + OriginControlHtml = "\"Skip"; + #endregion + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Vertical_List)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Vertical"); +#if !DOT_NET + // Throws NREX on .NET 4.0, most probably because the adapter's Control is null + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Vertical)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithDefaultAdapter_Vertical"); +#endif + #region OriginControlHtml + OriginControlHtml = "\"Skip"; + #endregion + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItems_Horizontal_List)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItems_Horizontal"); +#if !DOT_NET + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithBaseAdapter_Horizontal)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithBaseAdapter_Horizontal"); +#endif + } + class MyMenuAdapter : global::System.Web.UI.WebControls.Adapters.MenuAdapter + { + protected internal override void RenderItem (HtmlTextWriter writer, + MenuItem item, + int position) + { + writer.Write ("{"); + base.RenderItem (writer, item, position); + writer.Write ("}"); + } + } + + [Test] + [Category ("NunitWeb")] + [Category ("NotDotNet")] + public void Menu_RenderStaticItemsWithAdapter () + { + string RenderedPageHtml, RenderedControlHtml, OriginControlHtml; + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithAdapter_Vertical)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + #region OriginControlHtml + OriginControlHtml = @" + { + + + + } +
    + + + +
    one-black
    + { + + + + }{ + + + + } +
    + + + +
    two-black-1
    + { + + + + }{ + + + + } +
    + + + +
    three-black-1
    + { + + }{ + + } +
    + + + +
    four-black-1
    + + + +
    four-black-2
    + + + +
    three-black-2
    + { + + }{ + + } +
    + + + +
    four-black-3
    + + + +
    four-black-4
    + + + +
    two-black-2
    + { + + + + }{ + + + + } +
    + + + +
    three-black-3
    + { + + }{ + + } +
    + + + +
    four-black-5
    + + + +
    four-black-6
    + + + +
    three-black-4
    + { + + }{ + + } +
    + + + +
    four-black-7
    + + + +
    four-black-8
    "; + #endregion + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithAdapter_Vertical"); + RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Menu_RenderStaticItemsWithAdapter_Horizontal)).Run (); + RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); + #region OriginControlHtml + OriginControlHtml = @" + + {} + +
    + + + +
    one-black
    + + {}{} + +
    + + + +
    two-black-1
    + + {}{} + +
    + + + +
    three-black-1
    + + {}{} + +
    + + + +
    four-black-1
    + + + +
    four-black-2
    + + + +
    three-black-2
    + + {}{} + +
    + + + +
    four-black-3
    + + + +
    four-black-4
    + + + +
    two-black-2
    + + {}{} + +
    + + + +
    three-black-3
    + + {}{} + +
    + + + +
    four-black-5
    + + + +
    four-black-6
    + + + +
    three-black-4
    + + {}{} + +
    + + + +
    four-black-7
    + + + +
    four-black-8
    "; + #endregion + HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Menu_RenderStaticItemsWithAdapter_Horizontal"); + } + + public static void Menu_RenderStaticItems_Vertical (Page p) { + Menu m = CreateMenuForRenderTests (null); + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + public static void Menu_RenderStaticItems_Horizontal (Page p) { + Menu m = CreateMenuForRenderTests (null); + m.Orientation = Orientation.Horizontal; + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + public static void Menu_RenderStaticItems_Vertical_List (Page p) + { + Menu m = CreateMenuForRenderTests (null, false); + m.RenderingCompatibility = new Version (4, 0); + m.RenderingMode = MenuRenderingMode.List; + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + public static void Menu_RenderStaticItems_Horizontal_List (Page p) + { + Menu m = CreateMenuForRenderTests (null, false); + m.Orientation = Orientation.Horizontal; + m.StaticDisplayLevels = 4; + m.RenderingCompatibility = new Version (4, 0); + m.RenderingMode = MenuRenderingMode.List; + AddMenuToPage (p, m); + } + public static void Menu_RenderStaticItemsWithBaseAdapter_Vertical (Page p) { + Menu m = CreateMenuForRenderTests (new MyWebControl.Adapters.MenuAdapter()); + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + public static void Menu_RenderStaticItemsWithBaseAdapter_Horizontal (Page p) { + Menu m = CreateMenuForRenderTests (new MyWebControl.Adapters.MenuAdapter()); + m.Orientation = Orientation.Horizontal; + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + public static void Menu_RenderStaticItemsWithAdapter_Vertical (Page p) { + Menu m = CreateMenuForRenderTests (new MyMenuAdapter()); + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + public static void Menu_RenderStaticItemsWithAdapter_Horizontal (Page p) { + Menu m = CreateMenuForRenderTests (new MyMenuAdapter()); + m.Orientation = Orientation.Horizontal; + m.StaticDisplayLevels = 4; + AddMenuToPage (p, m); + } + + private static void AddMenuToPage (Page p, Menu m) { + LiteralControl lcb = new LiteralControl (HtmlDiff.BEGIN_TAG); + LiteralControl lce = new LiteralControl (HtmlDiff.END_TAG); + p.Form.Controls.Add (lcb); + p.Form.Controls.Add (m); + p.Form.Controls.Add (lce); + } + + class MyMenu : Menu + { + internal MyMenu (MyWebControl.Adapters.MenuAdapter adapter) : base () + { + menu_adapter = adapter; + } + + MyWebControl.Adapters.MenuAdapter menu_adapter; + protected override global::System.Web.UI.Adapters.ControlAdapter ResolveAdapter () + { + return menu_adapter; + } + } + + static Menu CreateMenuForRenderTests (MyWebControl.Adapters.MenuAdapter adapter) + { + return CreateMenuForRenderTests (adapter, true); + } + + static Menu CreateMenuForRenderTests (MyWebControl.Adapters.MenuAdapter adapter, bool compatibilityRendering) + { + Menu menu = new MyMenu (adapter); + if (compatibilityRendering) + menu.RenderingCompatibility = new Version (3, 5); + menu.ID = "Menu"; + MenuItem R, N1, N2, SN1, SN2, SN3, SN4; + R = new MenuItem ("one-black", "one-black-value"); + N1 = new MenuItem ("two-black-1", "two-black-1-value"); + N2 = new MenuItem ("two-black-2", "two-black-2-value"); + SN1 = new MenuItem ("three-black-1", "three-black-1-value"); + SN2 = new MenuItem ("three-black-2", "three-black-2-value"); + SN3 = new MenuItem ("three-black-3", "three-black-3-value"); + SN4 = new MenuItem ("three-black-4", "three-black-4-value"); + SN1.ChildItems.Add (new MenuItem ("four-black-1", "four-black-1-value")); + SN1.ChildItems.Add (new MenuItem ("four-black-2", "four-black-2-value")); + SN2.ChildItems.Add (new MenuItem ("four-black-3", "four-black-3-value")); + SN2.ChildItems.Add (new MenuItem ("four-black-4", "four-black-4-value")); + SN3.ChildItems.Add (new MenuItem ("four-black-5", "four-black-5-value")); + SN3.ChildItems.Add (new MenuItem ("four-black-6", "four-black-6-value")); + SN4.ChildItems.Add (new MenuItem ("four-black-7", "four-black-7-value")); + SN4.ChildItems.Add (new MenuItem ("four-black-8", "four-black-8-value")); + N1.ChildItems.Add (SN1); + N1.ChildItems.Add (SN2); + N2.ChildItems.Add (SN3); + N2.ChildItems.Add (SN4); + R.ChildItems.Add (N1); + R.ChildItems.Add (N2); + menu.Items.Add (R); + return menu; + } + + //Events Stuff + private bool OnDataBinding; + private bool OnDataBound; + private bool OnMenuItemClick; + private bool OnInit; + private bool OnMenuItemDataBound; + private bool OnPreRender; + + private void OnMenuItemDataBoundHandler(object sender, MenuEventArgs e) + { + OnMenuItemDataBound = true; + } + private void OnInitHandler (object sender, EventArgs e) + { + OnInit = true; + } + private void OnDataBindingHandler (object sender, EventArgs e) + { + OnDataBinding = true; + } + private void OnDataDataBoundHandler (object sender, EventArgs e) + { + OnDataBound = true; + } + private void OnMenuItemClickHandler (object sender, MenuEventArgs e) + { + OnMenuItemClick = true; + } + private void OnPreRenderHandler (object sender, EventArgs e) + { + OnPreRender = true; + } + private void ResetEvents () + { + OnMenuItemClick = false; + OnDataBinding = false; + OnDataBound = false; + OnInit = false; + OnPreRender = false; + } + [Test] + public void Menu_Events () + { + Page myPage = new Page (); + PokerMenu p = new PokerMenu (); + MenuItem I = new MenuItem (); + p.Items.Add (I); + myPage.Controls.Add(p); + + + p.Init += new EventHandler(OnInitHandler); + p.DataBinding += new EventHandler (OnDataBindingHandler); + p.DataBound += new EventHandler(OnDataDataBoundHandler); + p.MenuItemClick += new MenuEventHandler(OnMenuItemClickHandler); + p.MenuItemDataBound += new MenuEventHandler (OnMenuItemDataBoundHandler); + Assert.AreEqual (false, OnDataBinding, "BeforeOnDataBinding"); + p.DoOnDataBind (new EventArgs ()); + Assert.AreEqual (true, OnDataBinding, "AfterOnDataBinding"); + Assert.AreEqual (false, OnDataBound, "BeforeOnDataBound"); + p.DoOnDataBound (new EventArgs ()); + Assert.AreEqual (true, OnDataBound, "AfterOnDataBinding"); + MenuEventArgs e = new MenuEventArgs (I); + Assert.AreEqual (false, OnMenuItemClick, "BeforeMenuItemClick"); + p.DoOnMenuItemClick (e); + Assert.AreEqual (true, OnMenuItemClick, "AfterMenuItemClick"); + Assert.AreEqual (false, OnInit, "BeforeOnInit"); + p.DoOnInit (new EventArgs()); + Assert.AreEqual (true, OnInit, "AfterOnInit"); + Assert.AreEqual (false, OnMenuItemDataBound, "BeforeMenuItemDataBound"); + p.DoMenuItemDataBound(e); + Assert.AreEqual (true, OnMenuItemDataBound, "AfterMenuItemDataBound"); + } + [Test] + public void Menu_BubbleEvent () { + PokerMenu pm = new PokerMenu (); + MenuItem item = new MenuItem ("Root"); + pm.Items.Add (item); + pm.MenuItemClick += new MenuEventHandler (pm_MenuItemClick); + _MenuItemClick = false; + MenuEventArgs clickCommandArg = new MenuEventArgs (item, null, new CommandEventArgs (Menu.MenuItemClickCommandName, null)); + CommandEventArgs notClickCommandArg = new CommandEventArgs (Menu.MenuItemClickCommandName + "No", null); + Assert.AreEqual (true, pm.DoOnBubbleEvent (notClickCommandArg), "Bubble Event#1"); + Assert.AreEqual (false, _MenuItemClick, "MenuItemClick Bubbled"); + Assert.AreEqual (true, pm.DoOnBubbleEvent (clickCommandArg), "Bubble Event#2"); + Assert.AreEqual (true, _MenuItemClick, "MenuItemClick Bubbled"); + Assert.AreEqual (false, pm.DoOnBubbleEvent (new EventArgs ()), "Bubble Event#3"); + } + + bool _MenuItemClick; + + void pm_MenuItemClick (object sender, MenuEventArgs e) { + _MenuItemClick = true; + } + + [Test] + [Category ("NunitWeb")] + public void Menu_PreRenderEvent () + { + new WebTest (PageInvoker.CreateOnLoad (PreRenderEvent)).Run (); + } + public void PreRenderEvent (Page p) + { + PokerMenu pm = new PokerMenu (); + p.Controls.Add (pm); + pm.PreRender += new EventHandler (OnPreRenderHandler); + Assert.AreEqual (false, OnPreRender, "BeforePreRender"); + pm.DoOnPreRender (new EventArgs ()); + Assert.AreEqual (true, OnPreRender, "AfterPreRender"); + } + [TestFixtureTearDown] + public void TearDown () + { + WebTest.Unload (); + } + + // A simple Template class to wrap an image. + public class ImageTemplate : ITemplate + { + private MyWebControl.Image myImage; + public MyWebControl.Image MyImage + { + get + { + return myImage; + } + set + { + myImage = value; + } + } + public void InstantiateIn (Control container) + { + container.Controls.Add (MyImage); + } + } + [Test] + [Category ("NunitWeb")] +#if !DOT_NET + [Ignore ("Temporarily ignored on Mono until the Menu control is updated for 4.0")] +#endif + public void MenuClass () + { + string res = new WebTest ("menuclass.aspx").Run (); + string menua_pattern="]*class=\"[^\"]*menua[^\"]*\"[^>]*>"; + Assert.IsTrue (Regex.IsMatch (res, ".*"+menua_pattern+".*", + RegexOptions.IgnoreCase|RegexOptions.Singleline), + "check that is found"); + Assert.IsFalse (Regex.IsMatch (res, ".*"+menua_pattern+".*"+menua_pattern+".*", + RegexOptions.IgnoreCase|RegexOptions.Singleline), + "check that
    is found only once"); + } + + [Test] + [Category ("NunitWeb")] + [Category ("NotDotNet")] // implementation specific + public void Menu_PostBack () + { + PageDelegates pd = new PageDelegates (); + pd.Init = Menu_SetTableMode; + WebTest t = new WebTest ("PostBackMenuTest.aspx"); + t.Invoker = new PageInvoker (pd); + + string str = t.Run (); + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "Menu1"; + fr.Controls ["__EVENTARGUMENT"].Value = "0_1"; + t.Request = fr; + pd.PreRender = _MenuItemsPost; + t.Invoker = new PageInvoker (pd); + t.Run (); + } + + public static void Menu_SetTableMode (Page p) + { + Menu m = p.Form.FindControl ("Menu1") as Menu; + Assert.IsNotNull (m, "Menu present"); + m.RenderingMode = MenuRenderingMode.Table; + } + + public static void _MenuItemsPost (Page p) + { + foreach (Control c in p.Form.Controls) { + Menu m = c as Menu; + if (m != null) { + Assert.AreEqual ("node2", m.SelectedValue, "MenuItemsPostBack"); + } + } + } + + [Test] + [Category ("NunitWeb")] + public void Menu_PostBackFireEvents_1 () + { + PageDelegates pd = new PageDelegates (); + pd.Init = Menu_SetTableMode; + WebTest t = new WebTest ("PostBackMenuTest.aspx"); + t.Invoker = new PageInvoker (pd); + + string str = t.Run (); + FormRequest fr = new FormRequest (t.Response, "form1"); + fr.Controls.Add ("__EVENTTARGET"); + fr.Controls.Add ("__EVENTARGUMENT"); + fr.Controls["__EVENTTARGET"].Value = "Menu1"; +#if DOT_NET + fr.Controls["__EVENTARGUMENT"].Value = "root"; // "0_1"; +#else + fr.Controls ["__EVENTARGUMENT"].Value = "0"; // "0_1"; +#endif + t.Request = fr; + str = t.Run (); + Assert.AreEqual ("MenuItemClick", t.UserData.ToString (), "PostBackEvent"); + } + + [Test] + [Category ("NunitWeb")] + public void Menu_PostBackFireEvents_2 () + { + WebTest t = new WebTest ("PostBackMenuTest.aspx"); + PageDelegates pd = new PageDelegates (); + pd.Init = PostBackFireEvents_Init ; + t.Invoker = new PageInvoker (pd); + t.Run (); + Assert.AreEqual ("MenuItemDataBound", t.UserData.ToString (), "MenuItemDataBound"); + } + + public static void PostBackFireEvents_Init (Page p) + { + Menu_SetTableMode (p); + Menu m = new MenuTable (); + m.MenuItemDataBound += new MenuEventHandler (MenuItemDataBound_Event); + m.DataSource = LoadXml (); + p.Controls.Add (m); + m.DataBind (); + } + + public static XmlDataSource LoadXml () + { + XmlDataSource ds = new XmlDataSource (); + ds.EnableCaching = false; + #region xml_doc + String xml_text = @" + + "; + #endregion + ds.Data = xml_text; + return ds; + } + + static void MenuItemDataBound_Event (object sender, MenuEventArgs e) + { + WebTest.CurrentTest.UserData = "MenuItemDataBound"; + } + + [Test] + public void MenuItemCollection1 () + { + Menu m = new MenuTable (); + fillMenu (m); + + ((IStateManager) m.Items).TrackViewState (); + m.Items [0].Text = "root"; + m.Items [0].ChildItems [0].Text = "node"; + m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode"; + object state = ((IStateManager) m.Items).SaveViewState (); + + Menu copy = new MenuTable (); + fillMenu (copy); + ((IStateManager) copy.Items).TrackViewState (); + ((IStateManager) copy.Items).LoadViewState (state); + + Assert.AreEqual (1, copy.Items.Count); + Assert.AreEqual (2, copy.Items [0].ChildItems.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems [0].ChildItems.Count); + + Assert.AreEqual ("root", copy.Items [0].Text); + Assert.AreEqual ("node", copy.Items [0].ChildItems [0].Text); + Assert.AreEqual ("subnode", copy.Items [0].ChildItems [0].ChildItems [0].Text); + } + + [Test] + public void MenuItemCollection2 () + { + Menu m = new MenuTable (); + fillMenu (m); + + ((IStateManager) m.Items).TrackViewState (); + m.Items [0].Text = "root"; + m.Items [0].ChildItems [0].Text = "node"; + m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode"; + m.Items.Add (new MenuItem ("root 2")); + object state = ((IStateManager) m.Items).SaveViewState (); + + Menu copy = new MenuTable (); + fillMenu (copy); + ((IStateManager) copy.Items).TrackViewState (); + ((IStateManager) copy.Items).LoadViewState (state); + + Assert.AreEqual (2, copy.Items.Count); + Assert.AreEqual (2, copy.Items [0].ChildItems.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems [0].ChildItems.Count); + + Assert.AreEqual ("root", copy.Items [0].Text); + Assert.AreEqual ("node", copy.Items [0].ChildItems [0].Text); + Assert.AreEqual ("subnode", copy.Items [0].ChildItems [0].ChildItems [0].Text); + Assert.AreEqual ("root 2", copy.Items [1].Text); + } + + [Test] + public void MenuItemCollection3 () + { + Menu m = new MenuTable (); + fillMenu (m); + m.Items.Add (new MenuItem ("root 2")); + + ((IStateManager) m.Items).TrackViewState (); + m.Items [0].Text = "root"; + m.Items [0].ChildItems [0].Text = "node"; + m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode"; + m.Items.RemoveAt (1); + object state = ((IStateManager) m.Items).SaveViewState (); + + Menu copy = new MenuTable (); + fillMenu (copy); + copy.Items.Add (new MenuItem ("root 2")); + ((IStateManager) copy.Items).TrackViewState (); + ((IStateManager) copy.Items).LoadViewState (state); + + Assert.AreEqual (1, copy.Items.Count); + Assert.AreEqual (2, copy.Items [0].ChildItems.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems [0].ChildItems.Count); + + Assert.AreEqual ("root", copy.Items [0].Text); + Assert.AreEqual ("node", copy.Items [0].ChildItems [0].Text); + Assert.AreEqual ("subnode", copy.Items [0].ChildItems [0].ChildItems [0].Text); + } + + [Test] + public void MenuItemCollection4 () + { + Menu m = new MenuTable (); + fillMenu (m); + m.Items.Add (new MenuItem ("root 2")); + m.Items [0].ChildItems.RemoveAt (1); + + ((IStateManager) m.Items).TrackViewState (); + m.Items [0].Text = "root"; + m.Items [0].ChildItems [0].Text = "node"; + m.Items [0].ChildItems [0].ChildItems [0].Text = "subnode"; + object state = ((IStateManager) m.Items).SaveViewState (); + + Menu copy = new MenuTable (); + fillMenu (copy); + copy.Items.Add (new MenuItem ("root 2")); + copy.Items [0].ChildItems.RemoveAt (1); + ((IStateManager) copy.Items).TrackViewState (); + ((IStateManager) copy.Items).LoadViewState (state); + + Assert.AreEqual (2, copy.Items.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems [0].ChildItems.Count); + + Assert.AreEqual ("root", copy.Items [0].Text); + Assert.AreEqual ("node", copy.Items [0].ChildItems [0].Text); + Assert.AreEqual ("subnode", copy.Items [0].ChildItems [0].ChildItems [0].Text); + } + + [Test] + public void MenuItemCollection5 () + { + Menu m = new MenuTable (); + ((IStateManager) m.Items).TrackViewState (); + fillMenu (m); + + object state = ((IStateManager) m.Items).SaveViewState (); + + Menu copy = new MenuTable (); + ((IStateManager) copy.Items).TrackViewState (); + ((IStateManager) copy.Items).LoadViewState (state); + + Assert.AreEqual (1, copy.Items.Count); + Assert.AreEqual (2, copy.Items [0].ChildItems.Count); + Assert.AreEqual (1, copy.Items [0].ChildItems [0].ChildItems.Count); + } + + private static void fillMenu (Menu m) { + m.Items.Clear (); + m.Items.Add (new MenuItem ()); + m.Items [0].ChildItems.Add (new MenuItem ()); + m.Items [0].ChildItems.Add (new MenuItem ()); + m.Items [0].ChildItems [0].ChildItems.Add (new MenuItem ()); + } + + [Test] + public void MenuItem_TextValue1 () + { + MenuItem item = new MenuItem (); + item.Text = "TTT"; + Assert.AreEqual ("TTT", item.Value, "MenuItem_TextValue1#1"); + item.Value = ""; + Assert.AreEqual ("", item.Value, "MenuItem_TextValue1#2"); + item.Value = null; + Assert.AreEqual ("TTT", item.Value, "MenuItem_TextValue1#3"); + } + + [Test] + public void MenuItem_TextValue2 () + { + MenuItem item = new MenuItem (); + item.Value = "VVV"; + Assert.AreEqual ("VVV", item.Text, "MenuItem_TextValue2#1"); + item.Text = ""; + Assert.AreEqual ("", item.Text, "MenuItem_TextValue2#2"); + item.Text = null; + Assert.AreEqual ("VVV", item.Text, "MenuItem_TextValue2#3"); + } + [Test] + public void Menu_RenderingMode () + { + var m = new PokerMenu (); + + Assert.AreEqual (MenuRenderingMode.Default, m.RenderingMode, "#A1"); + + Array values = Enum.GetValues (typeof (MenuRenderingMode)); + int minValue = Int32.MaxValue, maxValue = Int32.MinValue; + + foreach (object v in values) { + int value = (int) v; + if (value < minValue) + minValue = value; + else if (value > maxValue) + maxValue = value; + } + + AssertExtensions.Throws (() => { + m.RenderingMode = (MenuRenderingMode) (minValue - 1); + }, "#A2-1"); + + AssertExtensions.Throws (() => { + m.RenderingMode = (MenuRenderingMode) (maxValue + 1); + }, "#A2-2"); + } + } +} diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs.REMOVED.git-id deleted file mode 100644 index 7d1253c3cc..0000000000 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/MenuTest.cs.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -c4defa6b5dccd209fafc7eb2e185725645954dfe \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceTest.cs index 05fa013c7a..9f0d0ea297 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceTest.cs @@ -422,11 +422,7 @@ namespace MonoTests.System.Web.UI.WebControls string html = new WebTest (PageInvoker.CreateOnLoad ( new PageDelegate (EnablePaging))).Run (); string newHtml = HtmlDiff.GetControlFromPageHtml (html); -#if NET_4_0 string origHtml = "
    \r\n\t
    \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    NameNumber
    Number00
    Number11
    Number22
    Number33
    Number44
    \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    1234
    \r\n"; -#else - string origHtml = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    NameNumber
    Number00
    Number11
    Number22
    Number33
    Number44
    \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    1234
    \r\n
    "; -#endif HtmlDiff.AssertAreEqual (origHtml, newHtml, "EnablePaging"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceViewTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceViewTest.cs index e6f461ffb8..7ae1839e3a 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceViewTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ObjectDataSourceViewTest.cs @@ -504,11 +504,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnLoad (select)); string html = t.Run (); -#if NET_4_0 string origin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    IDFNameLName
    1001MaheshChand
    \r\n
    "; -#else - string origin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    IDFNameLName
    1001MaheshChand
    \r\n
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewSelect"); } @@ -552,11 +548,7 @@ namespace MonoTests.System.Web.UI.WebControls // Note : ObjectDataSource will return page counter 5 hard coded WebTest t = new WebTest (PageInvoker.CreateOnLoad (selectcount)); string html = t.Run (); -#if NET_4_0 string origin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    IDFNameLName
    1001MaheshChand
    \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    12345
    \r\n
    "; -#else - string origin = "
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    IDFNameLName
    1001MaheshChand
    \r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    12345
    \r\n
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "ObjectDataSourceViewSelectCount"); } @@ -923,9 +915,7 @@ namespace MonoTests.System.Web.UI.WebControls evaluateCount = 0; } -#if NET_4_0 internal -#endif protected override object Evaluate (HttpContext context, Control control) { evaluateCount++; diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RadioButtonListTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RadioButtonListTest.cs index c78edd26fb..75fd9a334b 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RadioButtonListTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RadioButtonListTest.cs @@ -180,11 +180,7 @@ namespace MonoTests.System.Web.UI.WebControls { { string RenderedPageHtml = new WebTest (PageInvoker.CreateOnLoad (Render_Load)).Run (); string RenderedControlHtml = HtmlDiff.GetControlFromPageHtml (RenderedPageHtml); -#if NET_4_0 string OriginControlHtml = "\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#else - string OriginControlHtml = "\r\n\t\r\n\t\t\r\n\t\r\n
    "; -#endif HtmlDiff.AssertAreEqual (OriginControlHtml, RenderedControlHtml, "Render"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.2.0.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.2.0.cs.REMOVED.git-id deleted file mode 100644 index 08cbd8b45f..0000000000 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.2.0.cs.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -89ac879c342baa7a97974db1e0b8727b06461a61 \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs.REMOVED.git-id index 45e908f02f..ab76ce34a9 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs.REMOVED.git-id +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.auto.4.0.cs.REMOVED.git-id @@ -1 +1 @@ -ecdf82387178897008415dae7f86bf9b30ebfa67 \ No newline at end of file +a3772412270d2034fc106168a237dd41420adfa9 \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.cs index 218d8d896d..cf59b7d81d 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RepeatInfoTest.cs @@ -167,13 +167,8 @@ namespace MonoTests.System.Web.UI.WebControls { [Test] public void RenderRepeater_BaseControl () { -#if NET_4_0 string noid = "\n\t\n\t\t\n\t\n
    0
    "; string id_enabled = "\n\t\n\t\t\n\t\n
    0
    "; -#else - string noid = "\n\t\n\t\t\n\t\n
    0
    "; - string id_enabled = "\n\t\n\t\t\n\t\n
    0
    "; -#endif RenderRepeater_BaseControl (noid, "Table", new Table ()); RenderRepeater_BaseControl (noid, "DataList", new DataList ()); RenderRepeater_BaseControl (noid, "DataListItem", new DataListItem (0, ListItemType.Item)); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RouteParameterTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RouteParameterTest.cs index dccaf32652..eec1e9bc2c 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/RouteParameterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/RouteParameterTest.cs @@ -23,7 +23,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Collections.Generic; using System.Data; @@ -177,4 +176,3 @@ namespace MonoTests.System.Web.UI.WebControls } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceViewTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceViewTest.cs index 9d8d7ae6ca..e44c3db5d6 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceViewTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/SqlDataSourceViewTest.cs @@ -452,9 +452,7 @@ namespace MonoTests.System.Web.UI.WebControls evaluateCount = 0; } -#if NET_4_0 internal -#endif protected override object Evaluate (HttpContext context, Control control) { evaluateCount++; return String.Format ("{0}{1}", DefaultValue, evaluateCount); diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableTest.cs index 46adf22e5a..1daefe5a3a 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TableTest.cs @@ -112,11 +112,7 @@ namespace MonoTests.System.Web.UI.WebControls { TestTable t = new TestTable (); t.Caption = "CaptionText"; string html = t.Render (); -#if NET_4_0 string orig = "\n\t\n
    \n\t\tCaptionText\n\t
    "; -#else - string orig = "\n\t\n
    \n\t\tCaptionText\n\t
    "; -#endif HtmlDiff.AssertAreEqual (orig, html, "Caption"); } @@ -127,11 +123,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.Caption = "CaptionText"; t.CaptionAlign = TableCaptionAlign.Left; string html = t.Render (); -#if NET_4_0 string orig = "\n\t\n
    \n\t\tCaptionText\n\t
    "; -#else - string orig = "\n\t\n
    \n\t\tCaptionText\n\t
    "; -#endif HtmlDiff.AssertAreEqual (orig, html, "CaptionAlign"); } [Test] @@ -251,28 +243,16 @@ namespace MonoTests.System.Web.UI.WebControls { { TestTable t = new TestTable (); string s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "empty/default"); -#else - Assert.AreEqual ("\n\n
    ", s, "empty/default"); -#endif t.CellPadding = 1; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "CellPadding"); -#else - Assert.AreEqual ("\n\n
    ", s, "CellPadding"); -#endif t.CellPadding = -1; t.CellSpacing = 2; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "CellSpacing"); -#else - Assert.AreEqual ("\n\n
    ", s, "CellSpacing"); -#endif t.CellSpacing = -1; t.GridLines = GridLines.Horizontal; @@ -288,125 +268,61 @@ namespace MonoTests.System.Web.UI.WebControls { t.BorderWidth = new Unit (2); s = t.Render (); -#if NET_4_0 Assert.IsTrue ((s.IndexOf ("\"border-width:2px;border-style:solid;\"") > 0), "border=0/2"); -#else - Assert.IsTrue ((s.IndexOf ("border=\"0\"") > 0), "border=0/2"); -#endif t.GridLines = GridLines.Horizontal; s = t.Render (); -#if NET_4_0 Console.WriteLine (s); Assert.IsTrue ((s.IndexOf ("rules=\"rows\" style=\"border-width:2px;border-style:solid;\"") > 0), "2/GridLines.Horizontal"); -#else - Assert.IsTrue ((s.IndexOf ("rules=\"rows\" border=\"2\"") > 0), "2/GridLines.Horizontal"); -#endif t.GridLines = GridLines.Vertical; s = t.Render (); -#if NET_4_0 Assert.IsTrue ((s.IndexOf ("rules=\"cols\" style=\"border-width:2px;border-style:solid;\"") > 0), "2/GridLines.Vertical"); -#else - Assert.IsTrue ((s.IndexOf ("rules=\"cols\" border=\"2\"") > 0), "2/GridLines.Vertical"); -#endif t.GridLines = GridLines.Both; s = t.Render (); -#if NET_4_0 Assert.IsTrue ((s.IndexOf ("rules=\"all\" style=\"border-width:2px;border-style:solid;\"") > 0), "2/GridLines.Both"); -#else - Assert.IsTrue ((s.IndexOf ("rules=\"all\" border=\"2\"") > 0), "2/GridLines.Both"); -#endif t.GridLines = GridLines.None; t.BorderWidth = new Unit (); t.HorizontalAlign = HorizontalAlign.Left; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Left"); -#else - Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Left"); -#endif t.HorizontalAlign = HorizontalAlign.Center; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Center"); -#else - Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Center"); -#endif t.HorizontalAlign = HorizontalAlign.Right; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Right"); -#else - Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Right"); -#endif t.HorizontalAlign = HorizontalAlign.Justify; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Justify"); -#else - Assert.AreEqual ("\n\n
    ", s.ToLower (), "HorizontalAlign.Justify"); -#endif t.HorizontalAlign = HorizontalAlign.NotSet; t.Caption = "mono"; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption"); -#else - Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption"); -#endif t.CaptionAlign = TableCaptionAlign.Top; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Top"); -#else - Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Top"); -#endif t.CaptionAlign = TableCaptionAlign.Bottom; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Bottom"); -#else - Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Bottom"); -#endif t.CaptionAlign = TableCaptionAlign.Right; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Right"); -#else - Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Right"); -#endif t.CaptionAlign = TableCaptionAlign.Left; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Left"); -#else - Assert.AreEqual ("\n\t\n
    \n\t\tmono\n\t
    ", s.ToLower (), "Caption/Left"); -#endif t.Caption = null; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "CaptionAlign without Caption"); -#else - Assert.AreEqual ("\n\n
    ", s, "CaptionAlign without Caption"); -#endif t.CaptionAlign = TableCaptionAlign.NotSet; t.BackImageUrl = imageUrl; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "BackImageUrl"); -#else - Assert.AreEqual ("\n\n
    ", s, "BackImageUrl"); -#endif t.BackImageUrl = localImageUrl; s = t.Render (); -#if NET_4_0 Assert.AreEqual ("\n\n
    ", s, "BackImageUrl"); -#else - Assert.AreEqual ("\n\n
    ", s, "BackImageUrl"); -#endif t.BackImageUrl = String.Empty; } @@ -416,11 +332,7 @@ namespace MonoTests.System.Web.UI.WebControls { { WebTest t = new WebTest (PageInvoker.CreateOnLoad (RenderInAspxPage_OnLoad)); string res = t.Run (); -#if NET_4_0 Assert.IsTrue (res.IndexOf ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1"); -#endif // change instance properties tr.HorizontalAlign = HorizontalAlign.Justify; s = t.Render (); -#if NET_4_0 Assert.AreEqual (Adjust ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1j"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1j"); -#endif // add it again (same instance) t.Rows.Add (tr); Assert.AreEqual (1, t.Rows.Count, "t1bis"); Assert.AreEqual (1, t.Controls.Count, "c1bis"); s = t.Render (); -#if NET_4_0 Assert.AreEqual (Adjust ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1bis"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n
    "), Adjust (s), "tr-1bis"); -#endif tr.HorizontalAlign = HorizontalAlign.NotSet; tr = new TableRow (); @@ -507,11 +407,7 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual (2, t.Rows.Count, "r2"); Assert.AreEqual (2, t.Controls.Count, "c2"); s = t.Render (); -#if NET_4_0 Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n
    "), Adjust (s), "tr-2"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n
    "), Adjust (s), "tr-2"); -#endif tr = new TableRow (); tr.VerticalAlign = VerticalAlign.Bottom; @@ -519,19 +415,11 @@ namespace MonoTests.System.Web.UI.WebControls { Assert.AreEqual (3, t.Rows.Count, "r3"); Assert.AreEqual (3, t.Controls.Count, "c3"); s = t.Render (); -#if NET_4_0 Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n\n\t\n
    "), Adjust (s), "tr-3"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n\n\t\n
    "), Adjust (s), "tr-3"); -#endif t.Caption = "caption"; s = t.Render (); -#if NET_4_0 Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n\n\t\n
    \n\t\tcaption\n\t
    "), Adjust (s), "tr-2c"); -#else - Assert.AreEqual (Adjust ("\n\t\n\n\t\n\n\t\n\n\t\n
    \n\t\tcaption\n\t
    "), Adjust (s), "tr-2c"); -#endif } [Test] @@ -620,11 +508,7 @@ namespace MonoTests.System.Web.UI.WebControls { Table t = new Table (); t.RenderBeginTag (writer); string s = writer.InnerWriter.ToString (); -#if NET_4_0 Assert.AreEqual ("\n", s, "empty"); -#else - Assert.AreEqual ("
    \n", s, "empty"); -#endif } [Test] @@ -635,11 +519,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.CellPadding = 1; t.RenderBeginTag (writer); string s = writer.InnerWriter.ToString (); -#if NET_4_0 Assert.AreEqual ("
    \n", s, "CellPadding"); -#else - Assert.AreEqual ("
    \n", s, "CellPadding"); -#endif } [Test] @@ -650,11 +530,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.Caption = "caption"; t.RenderBeginTag (writer); string s = writer.InnerWriter.ToString (); -#if NET_4_0 Assert.AreEqual ("
    \n\t", s, "caption"); -#else - Assert.AreEqual ("
    \n\t\tcaption\n\t
    \n\t", s, "caption"); -#endif } [Test] @@ -666,11 +542,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.CaptionAlign = TableCaptionAlign.Top; t.RenderBeginTag (writer); string s = writer.InnerWriter.ToString (); -#if NET_4_0 Assert.AreEqual ("
    \n\t\tcaption\n\t
    \n\t", s.ToLower (), "caption"); -#else - Assert.AreEqual ("
    \n\t\tcaption\n\t
    \n\t", s.ToLower (), "caption"); -#endif } [Test] @@ -681,11 +553,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.Rows.Add (new TableRow ()); t.RenderBeginTag (writer); string s = writer.InnerWriter.ToString (); -#if NET_4_0 Assert.AreEqual ("
    \n\t\tcaption\n\t
    \n", s, "tr"); -#else - Assert.AreEqual ("
    \n", s, "tr"); -#endif } [Test] diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TextBoxTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TextBoxTest.cs index a50d339cfa..88388e870f 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TextBoxTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TextBoxTest.cs @@ -105,11 +105,7 @@ namespace MonoTests.System.Web.UI.WebControls { Poker t = new Poker (); t.TextMode = TextBoxMode.MultiLine; t.Text = ""; -#if NET_4_0 string exp = ""; -#else - string exp = ""; -#endif HtmlDiff.AssertAreEqual(exp, t.Render (),"MultilineRenderEscape"); } @@ -164,11 +160,7 @@ namespace MonoTests.System.Web.UI.WebControls { t.ValidationGroup = "VG"; t.CausesValidation = true; t.TextMode = TextBoxMode.MultiLine; -#if NET_4_0 string exp = ""; -#else - string exp = ""; -#endif HtmlDiff.AssertAreEqual (exp, t.Render (),"ValidationRender"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeTest.cs index 2cf00c0f6f..6fae07cfcd 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeNodeTest.cs @@ -156,18 +156,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Category ("NunitWeb")] public void TreeNode_NavigateUrl () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (pageLoadNavigateUrl)); -#if NET_4_0 string strTarget = "\"Skip
    \r\n\t
    \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    \"\"TreeNode1
    \r\n"; -#else - string strTarget = -@"
    - - - - -
    TreeNode1
    -
    "; -#endif string str = HtmlDiff.GetControlFromPageHtml (t.Run ()); HtmlDiff.AssertAreEqual (strTarget, str, "PostbackNavigate"); } @@ -194,23 +183,7 @@ namespace MonoTests.System.Web.UI.WebControls { [Category ("NunitWeb")] public void TreeNode_Render () { WebTest t = new WebTest (PageInvoker.CreateOnLoad (pageLoadRender)); -#if NET_4_0 string strTarget = "\"Skip
    \r\n\t\r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    \"Collapse\"ImageToolTip\"text
    \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    \"\"childenode
    \r\n
    "; -#else - string strTarget = -@"
    - - - - -
    text
    - - - - -
    childenode
    -
    "; -#endif string str = HtmlDiff.GetControlFromPageHtml (t.Run ()); HtmlDiff.AssertAreEqual (strTarget, str, "Render"); } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeViewTest.cs.REMOVED.git-id b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeViewTest.cs.REMOVED.git-id index 3d1b2c9a0e..d333eca7fe 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeViewTest.cs.REMOVED.git-id +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/TreeViewTest.cs.REMOVED.git-id @@ -1 +1 @@ -c67c20264c7d0a6d74e50c2f11556b0f52f71846 \ No newline at end of file +26c5088ccf80d21e12be7aaaee864949746300b3 \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ValidationSummaryTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ValidationSummaryTest.cs index 7c5e7530fa..4f43e8e142 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/ValidationSummaryTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/ValidationSummaryTest.cs @@ -270,7 +270,6 @@ namespace MonoTests.System.Web.UI.WebControls StopValidationTest(); } -#if NET_4_0 [Test] public void SupportsDisabledAttribute () { @@ -284,6 +283,5 @@ namespace MonoTests.System.Web.UI.WebControls Assert.AreEqual (ver35, p.RenderingCompatibility, "#A2-1"); Assert.IsTrue (p.SupportsDisabledAttribute, "#A2-2"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardStepBaseTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardStepBaseTest.cs index ceb2dad584..c91f3cbf40 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardStepBaseTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardStepBaseTest.cs @@ -215,11 +215,7 @@ namespace MonoTests.System.Web.UI.WebControls // This render test include Title property test string html = new WebTest (PageInvoker.CreateOnLoad ( new PageDelegate (Render_Test))).Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    my_title
    my_title_2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    my_title
    my_title_2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    123
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "BaseRender"); if (html.IndexOf ("my_title") < 0) @@ -312,7 +308,7 @@ namespace MonoTests.System.Web.UI.WebControls [Category ("NunitWeb")] public void WizardStepBase_Theme () { - WebTest.CopyResource (GetType (), "WizardTest.skin", "App_Themes/Theme1/WizardTest.skin"); + WebTest.CopyResource (GetType (), "WizardTest.skin", "App_Themes/WizardStepBase/WizardTest.skin"); WebTest t = new WebTest (); PageDelegates pd = new PageDelegates (); pd.PreInit = set_properties; @@ -332,7 +328,7 @@ namespace MonoTests.System.Web.UI.WebControls public static void set_properties (Page p) { - p.Theme = "Theme1"; + p.Theme = "WizardStepBase"; } public static void theme (Page p) diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardTest.cs index 03a3921653..f81a3a88c4 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/WizardTest.cs @@ -300,7 +300,6 @@ namespace MonoTests.System.Web.UI.WebControls base.EnsureChildControls (); } } -#if NET_4_0 class TestHeaderSpan : WebControl { public TestHeaderSpan () @@ -360,7 +359,6 @@ namespace MonoTests.System.Web.UI.WebControls return ctl; } } -#endif [TestFixture] public class WizardTest { @@ -374,12 +372,10 @@ namespace MonoTests.System.Web.UI.WebControls Assert.AreEqual ("MoveNext", Wizard.MoveNextCommandName, "MoveNextCommandName"); Assert.AreEqual ("MovePrevious", Wizard.MovePreviousCommandName, "MovePreviousCommandName"); Assert.AreEqual ("Move", Wizard.MoveToCommandName, "MoveToCommandName"); -#if NET_4_0 Assert.AreEqual ("headerPlaceholder", Wizard.HeaderPlaceholderId, "HeaderPlaceHolderId"); Assert.AreEqual ("navigationPlaceholder", Wizard.NavigationPlaceholderId, "NavigationPlaceHolderId"); Assert.AreEqual ("sideBarPlaceholder", Wizard.SideBarPlaceholderId, "SidePlaceholderId"); Assert.AreEqual ("wizardStepPlaceholder", Wizard.WizardStepPlaceholderId, "WizardStepPlaceholderId"); -#endif // Protected Fields Assert.AreEqual ("CancelButton", PokerWizard.PokerCancelButtonID, "CancelButtonID"); Assert.AreEqual ("CustomFinishButton", PokerWizard.PokerCustomFinishButtonID, "CustomFinishButtonID"); @@ -539,11 +535,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_CancelButtonPropertyRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Start
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Start
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "CancelButtonPropertyRendering"); } @@ -585,11 +577,7 @@ namespace MonoTests.System.Web.UI.WebControls WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_FinishButtonPropertyRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Finish
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    FinishCompleteButtonText
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Finish
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    FinishCompleteButtonText
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "CancelButtonPropertyRendering"); } @@ -634,11 +622,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_HeaderRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Finish
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    Finish
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "HeaderRendering"); } @@ -685,11 +669,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_SideBarRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step 1
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step 1
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "SideBarRendering"); } @@ -742,11 +722,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_NavigationRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "NavigationRendering"); } @@ -783,11 +759,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_StartTypeRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "StartTypeRendering"); } @@ -826,11 +798,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_StartTemplateRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Start
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "StartTemplateRendering"); } @@ -868,11 +836,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_StepTypeRendering)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    step3
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step2
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    StepPreviousButtonText
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    step3
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step2
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    StepPreviousButtonText
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "StepRendering"); } @@ -924,11 +888,7 @@ namespace MonoTests.System.Web.UI.WebControls { WebTest t = new WebTest (PageInvoker.CreateOnPreInit (_StepNavigationTemplate)); string html = t.Run (); -#if NET_4_0 string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step1
    Test text
    "; -#else - string origin = "\r\n\t\r\n\t\t\r\n\t\r\n
    \"Skip\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    step1
    step2
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    Step1
    Test text
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origin, renderedHtml, "StepNavigationTemplateRendering"); } @@ -1443,11 +1403,7 @@ namespace MonoTests.System.Web.UI.WebControls { string html = new WebTest (PageInvoker.CreateOnPreInit ( new PageDelegate (WizardPreInit))).Run (); -#if NET_4_0 string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    123
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#else - string origHtml = "\r\n\t\r\n\t\t\r\n\t\r\n\t\t\r\n\t\r\n
    123
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
    "; -#endif string renderedHtml = HtmlDiff.GetControlFromPageHtml (html); HtmlDiff.AssertAreEqual (origHtml, renderedHtml, "BaseRender"); } @@ -1530,7 +1486,6 @@ namespace MonoTests.System.Web.UI.WebControls Assert.Fail ("FinishButtonNotCreated"); Assert.AreEqual (-1, result.IndexOf ("Next"), "NextButtonCreatedOnLastPage"); } -#if NET_4_0 [Test] public void Wizard_LayoutTemplate () { @@ -1752,7 +1707,6 @@ namespace MonoTests.System.Web.UI.WebControls w.WizardSteps.Add (ws); } -#endif [Test] [Category ("NunitWeb")] public void Wizard_RenderTestCompleteItem () diff --git a/mcs/class/System.Web/Test/System.Web.UI.WebControls/XmlDataSourceTest.cs b/mcs/class/System.Web/Test/System.Web.UI.WebControls/XmlDataSourceTest.cs index d5dfbac458..2d845ac32d 100644 --- a/mcs/class/System.Web/Test/System.Web.UI.WebControls/XmlDataSourceTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI.WebControls/XmlDataSourceTest.cs @@ -462,7 +462,6 @@ namespace MonoTests.System.Web.UI.WebControls DSPoker p = new DSPoker (); p.GetXmlDocument (); } -#if NET_4_0 [Test] public void CacheKeyContext () { @@ -474,7 +473,6 @@ namespace MonoTests.System.Web.UI.WebControls xds.CacheKeyContext = "MyKey"; Assert.AreEqual ("MyKey", xds.CacheKeyContext, "#A1"); } -#endif [TestFixtureTearDown] public void TearDown () { diff --git a/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs b/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs index 5b1f33ff1e..604365e428 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/ControlTest.cs @@ -44,9 +44,7 @@ using MonoTests.Common; using System.Web.UI.Adapters; -#if NET_4_0 using System.Web.Routing; -#endif namespace MonoTests.System.Web.UI { @@ -973,11 +971,7 @@ namespace MonoTests.System.Web.UI fr.Controls ["__EVENTTARGET"].Value = "container$children$lb"; fr.Controls ["__EVENTARGUMENT"].Value = String.Empty; t.Request = fr; -#if NET_4_0 string originalHtml = "Woot! I got clicked!
    "; -#else - string originalHtml = @"Woot! I got clicked!
    "; -#endif string pageHtml = t.Run (); string renderedHtml = HtmlDiff.GetControlFromPageHtml (pageHtml); @@ -998,7 +992,6 @@ namespace MonoTests.System.Web.UI WebTest.CopyResource (GetType (), "OverridenControlsPropertyAndPostBack_Bug594238.aspx", "OverridenControlsPropertyAndPostBack_Bug594238.aspx"); } -#if NET_4_0 [Test] public void GetRouteUrl_Object () { @@ -1116,7 +1109,6 @@ namespace MonoTests.System.Web.UI path = ctl.GetRouteUrl (String.Empty, (RouteValueDictionary) null); Assert.IsNull (path, "#A3-3"); } -#endif #region helpcalsses class ControlWithState : Control { diff --git a/mcs/class/System.Web/Test/System.Web.UI/DataKeyPropertyAttributeTest.cs b/mcs/class/System.Web/Test/System.Web.UI/DataKeyPropertyAttributeTest.cs index 6017b12618..73fc20a8b6 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/DataKeyPropertyAttributeTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/DataKeyPropertyAttributeTest.cs @@ -23,7 +23,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Web.UI; @@ -60,4 +59,3 @@ namespace MonoTests.System.Web.UI } } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.UI/LosFormatterTest.cs b/mcs/class/System.Web/Test/System.Web.UI/LosFormatterTest.cs index 03e03728e1..359096352c 100644 --- a/mcs/class/System.Web/Test/System.Web.UI/LosFormatterTest.cs +++ b/mcs/class/System.Web/Test/System.Web.UI/LosFormatterTest.cs @@ -81,13 +81,8 @@ namespace MonoTests.System.Web.UI byte [] data = Convert.FromBase64String (expected); byte [] signed_data = Convert.FromBase64String (signed); Assert.IsTrue (BitConverter.ToString (signed_data).StartsWith (BitConverter.ToString (data)), "4 / same data"); -#if NET_4_0 // 32 bytes == 256 bits -> match HMACSHA256 as default Assert.AreEqual (32, signed_data.Length - data.Length, "signature length"); -#else - // 20 bytes == 160 bits -> match HMACSHA1 as default - Assert.AreEqual (20, signed_data.Length - data.Length, "signature length"); -#endif } [Test] @@ -114,13 +109,8 @@ namespace MonoTests.System.Web.UI byte [] data = Convert.FromBase64String (expected); byte [] signed_data = Convert.FromBase64String (signed); Assert.IsTrue (BitConverter.ToString (signed_data).StartsWith (BitConverter.ToString (data)), "5 / same data"); -#if NET_4_0 // 32 bytes == 256 bits -> match HMACSHA256 as default Assert.AreEqual (32, signed_data.Length - data.Length, "signature length"); -#else - // 20 bytes == 160 bits -> match HMACSHA1 as default - Assert.AreEqual (20, signed_data.Length - data.Length, "signature length"); -#endif LosFormatter lf6 = new LosFormatter (true, "string"); // bug #649551 signed = NoKeyRoundTrip (lf6, "true, plain"); Assert.AreNotEqual (expected, signed, "6"); @@ -171,7 +161,6 @@ namespace MonoTests.System.Web.UI Assert.AreNotEqual (r4, r5, "r4-r5"); } -#if NET_4_0 [Test] [ExpectedException (typeof (NotSupportedException))] public void Deserialize_Stream_NonSeekable () @@ -181,19 +170,6 @@ namespace MonoTests.System.Web.UI LosFormatter lf = new LosFormatter (); lf.Serialize (ns, s1); } -#else - [Test] // bug #411115 - public void Deserialize_Stream_NonSeekable () - { - string s1 = "Hello world"; - NonSeekableStream ns = new NonSeekableStream (); - LosFormatter lf = new LosFormatter (); - lf.Serialize (ns, s1); - ns.Reset (); - string s2 = lf.Deserialize (ns) as string; - Assert.AreEqual (s1, s2); - } -#endif [Test] // bug #324526 public void Serialize () { diff --git a/mcs/class/System.Web/Test/System.Web.Util/HttpEncoderTest.cs b/mcs/class/System.Web/Test/System.Web.Util/HttpEncoderTest.cs index 4975b430ee..4ea7ad9ab5 100644 --- a/mcs/class/System.Web/Test/System.Web.Util/HttpEncoderTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Util/HttpEncoderTest.cs @@ -23,7 +23,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Collections.Generic; using System.IO; @@ -75,11 +74,7 @@ namespace MonoTests.System.Web.Util [TestFixture] public class HttpEncoderTest { -#if NET_4_0 const string notEncoded = "!()*-._"; -#else - const string notEncoded = "!'()*-._"; -#endif static char [] hexChars = "0123456789abcdef".ToCharArray (); [Test] @@ -412,4 +407,3 @@ namespace MonoTests.System.Web.Util #endregion } } -#endif \ No newline at end of file diff --git a/mcs/class/System.Web/Test/System.Web.Util/MachineKeySectionUtilsTest.cs b/mcs/class/System.Web/Test/System.Web.Util/MachineKeySectionUtilsTest.cs index b92554ec98..8a1a4ed673 100644 --- a/mcs/class/System.Web/Test/System.Web.Util/MachineKeySectionUtilsTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Util/MachineKeySectionUtilsTest.cs @@ -107,7 +107,6 @@ namespace MonoTests.System.Web.Util { section.Validation = MachineKeyValidation.SHA1; Encrypt_RoundTrip (section); } -#if NET_4_0 [Test] public void Encrypt_RoundTrip_HMACSHA256 () { @@ -139,7 +138,6 @@ namespace MonoTests.System.Web.Util { section.ValidationAlgorithm = "alg:HMACRIPEMD160"; EncryptSign_RoundTrip (section); } -#endif public void EncryptSign_RoundTrip (MachineKeySection section) { byte [] data = new byte [14]; @@ -196,7 +194,6 @@ namespace MonoTests.System.Web.Util { section.Validation = MachineKeyValidation.SHA1; EncryptSign_RoundTrip (section); } -#if NET_4_0 [Test] public void EncryptSign_RoundTrip_HMACSHA256 () { @@ -228,7 +225,6 @@ namespace MonoTests.System.Web.Util { section.ValidationAlgorithm = "alg:HMACRIPEMD160"; EncryptSign_RoundTrip (section); } -#endif public void Validation_RoundTrip (MachineKeySection section) { byte [] data = new byte [] { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 }; @@ -282,7 +278,6 @@ namespace MonoTests.System.Web.Util { Validation_RoundTrip (section); } -#if NET_4_0 [Test] public void Validation_RoundTrip_HMACSHA256 () { @@ -314,7 +309,6 @@ namespace MonoTests.System.Web.Util { section.ValidationAlgorithm = "alg:HMACRIPEMD160"; Validation_RoundTrip (section); } -#endif [Test] public void GetHexString () { diff --git a/mcs/class/System.Web/Test/System.Web.Util/RequestValidatorTest.cs b/mcs/class/System.Web/Test/System.Web.Util/RequestValidatorTest.cs index cbb24fab1d..b185d1290f 100644 --- a/mcs/class/System.Web/Test/System.Web.Util/RequestValidatorTest.cs +++ b/mcs/class/System.Web/Test/System.Web.Util/RequestValidatorTest.cs @@ -24,7 +24,6 @@ // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_4_0 using System; using System.Collections.Generic; using System.Diagnostics; @@ -97,4 +96,3 @@ namespace MonoTests.System.Web.Util } } } -#endif diff --git a/mcs/class/System.Web/Test/System.Web/HttpApplicationTest.cs b/mcs/class/System.Web/Test/System.Web/HttpApplicationTest.cs index 64d8773abb..7d572081fc 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpApplicationTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpApplicationTest.cs @@ -37,7 +37,6 @@ namespace MonoTests.System.Web [TestFixture] public class HttpApplicationTest { -#if NET_4_0 [Test] public void GetOutputCacheProviderName () { @@ -45,6 +44,5 @@ namespace MonoTests.System.Web Assert.AreEqual ("AspNetInternalProvider", app.GetOutputCacheProviderName (null), "#A1"); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web/HttpCookieTest.cs b/mcs/class/System.Web/Test/System.Web/HttpCookieTest.cs index f6eafc6d76..387406dcbd 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpCookieTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpCookieTest.cs @@ -357,40 +357,22 @@ namespace MonoTests.System.Web { Assert.AreEqual ("`~!@#$%^", cookie.Values.Get (0), "#G5"); Assert.AreEqual ("*()_+-", cookie.Values.GetKey (1), "#G6"); Assert.AreEqual ("\\][{}|'\";:,<.>/?", cookie.Values.Get (1), "#G7"); -#if NET_4_0 Assert.AreEqual ("%60%7e!%40%23%24%25%5e&*()_%2b-=%5c%5d%5b%7b%7d" + "%7c%27%22%3b%3a%2c%3c.%3e%2f%3f", cookie.Values.ToString (), "#G8"); -#else - Assert.AreEqual ("%60%7e!%40%23%24%25%5e&*()_%2b-=%5c%5d%5b%7b%7d" - + "%7c'%22%3b%3a%2c%3c.%3e%2f%3f", cookie.Values.ToString (), "#G8"); -#endif cookie = new HttpCookie ("funkycookie11", cookie.Values.ToString ()); Assert.AreEqual ("System.Web.HttpCookie", cookie.ToString (), "#H1"); -#if NET_4_0 Assert.AreEqual ("%60%7e!%40%23%24%25%5e&*()_%2b-=%5c%5d%5b%7b%7d" + "%7c%27%22%3b%3a%2c%3c.%3e%2f%3f", cookie.Value, "#H2"); -#else - Assert.AreEqual ("%60%7e!%40%23%24%25%5e&*()_%2b-=%5c%5d%5b%7b%7d" - + "%7c'%22%3b%3a%2c%3c.%3e%2f%3f", cookie.Value, "#H2"); -#endif Assert.AreEqual (2, cookie.Values.Count, "#H3"); Assert.IsNull (cookie.Values.GetKey (0), "#H4"); Assert.AreEqual ("%60%7e!%40%23%24%25%5e", cookie.Values.Get (0), "#H5"); Assert.AreEqual ("*()_%2b-", cookie.Values.GetKey (1), "#H6"); -#if NET_4_0 Assert.AreEqual ("%5c%5d%5b%7b%7d%7c%27%22%3b%3a%2c%3c.%3e%2f%3f", cookie.Values.Get (1), "#H7"); Assert.AreEqual ("%2560%257e!%2540%2523%2524%2525%255e&*()_%252b-=" + "%255c%255d%255b%257b%257d%257c%2527%2522%253b%253a%252c%253c.%2" + "53e%252f%253f", cookie.Values.ToString (), "#H8"); -#else - Assert.AreEqual ("%5c%5d%5b%7b%7d%7c'%22%3b%3a%2c%3c.%3e%2f%3f", - cookie.Values.Get (1), "#H7"); - Assert.AreEqual ("%2560%257e!%2540%2523%2524%2525%255e&*()_%252b-=" - + "%255c%255d%255b%257b%257d%257c'%2522%253b%253a%252c%253c.%2" - + "53e%252f%253f", cookie.Values.ToString (), "#H8"); -#endif cookie = new HttpCookie ("basic"); cookie.Values ["one"] = "hello world"; diff --git a/mcs/class/System.Web/Test/System.Web/HttpExceptionTest.cs b/mcs/class/System.Web/Test/System.Web/HttpExceptionTest.cs index 69a21a3bca..1d33f02fa8 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpExceptionTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpExceptionTest.cs @@ -11,13 +11,11 @@ namespace MonoTests.System.Web [TestFixture] public class HttpExceptionTest { -#if NET_4_0 [Test] public void WebEventCode () { var ex = new HttpException (); Assert.AreEqual (WebEventCodes.UndefinedEventCode, ex.WebEventCode); } -#endif } } diff --git a/mcs/class/System.Web/Test/System.Web/HttpRequestTest.cs b/mcs/class/System.Web/Test/System.Web/HttpRequestTest.cs index 9ee9ebe1a1..15d1f137a0 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpRequestTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpRequestTest.cs @@ -254,6 +254,30 @@ namespace MonoTests.System.Web { { HttpContext.Current.Request.MapPath ("Web.config", "something", false); } + + [Test] + [ExpectedException (typeof (PlatformNotSupportedException))] + public void ReadOnlyHeadersAdd () + { + var r = new HttpRequest ("file", "http://www.gnome.org", "key=value&key2=value%32second"); + r.Headers.Add ("a","a"); + } + + [Test] + [ExpectedException (typeof (PlatformNotSupportedException))] + public void ReadOnlyHeadersSet () + { + var r = new HttpRequest ("file", "http://www.gnome.org", "key=value&key2=value%32second"); + r.Headers.Set ("a","a"); + } + + [Test] + [ExpectedException (typeof (PlatformNotSupportedException))] + public void ReadOnlyHeadersRemove () + { + var r = new HttpRequest ("file", "http://www.gnome.org", "key=value&key2=value%32second"); + r.Headers.Remove ("a"); + } } [TestFixture] diff --git a/mcs/class/System.Web/Test/System.Web/HttpResponseTest.cs b/mcs/class/System.Web/Test/System.Web/HttpResponseTest.cs index 4dd13d12b4..2ce8621aec 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpResponseTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpResponseTest.cs @@ -33,10 +33,8 @@ using System.Configuration.Provider; using System.IO; using System.Text; using System.Web; -#if NET_4_0 using System.Web.Routing; using System.Web.Caching; -#endif using NUnit.Framework; @@ -634,7 +632,6 @@ namespace MonoTests.System.Web { var resp = new HttpResponse (null); Assert.IsNull (resp.Output, "#A1"); } -#if NET_4_0 [Test] public void RedirectPermanent () { @@ -733,7 +730,6 @@ namespace MonoTests.System.Web { context.Response.Write ((object) null); }, "#A3-5"); } -#endif } [TestFixture] diff --git a/mcs/class/System.Web/Test/System.Web/HttpUtilityTest.cs b/mcs/class/System.Web/Test/System.Web/HttpUtilityTest.cs index 3882f2e779..d320a54f1f 100644 --- a/mcs/class/System.Web/Test/System.Web/HttpUtilityTest.cs +++ b/mcs/class/System.Web/Test/System.Web/HttpUtilityTest.cs @@ -48,26 +48,16 @@ namespace MonoTests.System.Web { Assert.AreEqual (String.Empty, HttpUtility.HtmlAttributeEncode (String.Empty), "#A2"); Assert.AreEqual ("<script>", HttpUtility.HtmlAttributeEncode ("